对蓝牙技术中的加密算法的进一步探讨(1)(2)
2014-05-31 01:12
导读:E1函数的输入是link key,AU_RAND及BD_ADDR,它的定义如下: E1: 在蓝牙技术中,认证采用口令-应答方式。验证方要求申请者鉴别随机数AU_RAND并返回计算结果
E1函数的输入是link key,AU_RAND及BD_ADDR,它的定义如下:
E1:
在蓝牙技术中,认证采用口令-应答方式。验证方要求申请者鉴别随机数AU_RAND并返回计算结果SRES,若双方的计算结果相等则认证成功,并保留ACO(Authenticated Ciphering Offset)值。 若某次认证失败,则必须等待一定的时间间隔才能进行再次认证
3. 2加密算法
在蓝牙技术中,用户信息可采用分组有效载荷的加密进行保护,但识别码和分组头不加密。有效载荷的加密采用E0流密码来实现。E0将对每一有效载荷重新同步。流密码系统E0由三部分组成。第一部分执行初始化(生成有效载荷字),第二部分生成密钥流,第三部分完成加密和解密,如图2。
有效载荷字 明码文本/密码文本
Kc
地址
时钟 Z 密码文本/明码文本
RAND
图2 蓝牙的E0流加密
有效载荷字发生器非常简单,它仅仅以适当序列对输入的位进行组合,然后将它们转移到用于密钥流发生器的四位LFSR中。加密机采用了四个线性反馈移位寄存器(LFSR),依次为LFSR1、LFSR2、LFSR3、LFSR4,其长度分别为25,31,33,39比特。LFSR的性质: 加密机把四个LFSR的输出结果输入到一个有限状态机中,经有限状态机的组合运算输出密钥流序列,若在初始化阶段则输出一个随机的初始化值。加密算法使用Kc、BD_ADDR、主时钟CLK26-1及RAND这些参数。时钟CLK26-1按时隙递增,在任两次发送中,CLK26-1至少有一位是不同的,因此在每次初始化后都将产生新的密钥流。对占用多个时隙的分组来说,CLK26-1为分组所占的第一个时隙的时钟值。
第二部分是该密码系统的主要部分,并也将用于初始化过程中。密钥流取自于Massey和Rueppel流密码发生器的方法来生成。
最后就是流加密算法的加密过程。将数据流与密码算法生成二进制流比特 进行异或运算。对于加密规则,流密码算法用于将加密位按位模2并加到数据流上,然后通过无线接口进行传输。对每一分组的有效载荷的加密是单独进行的,它发生在CRC校验之后,FEC编码之前。由于加密是对称的,解密使用完全和加密相同的密钥和相同的方法实现。
(科教论文网 lw.NsEac.com编辑整理) 4 蓝牙标准中加密算法存在的问题
蓝牙所采用的E0流密码算法的本身就有一些弱点。流密码算法主要的缺点在于若一个伪随机序列发生错误便会使整个密文发生错误,致使在解密过程中无法还原回明文。流加密算法系统的安全完全依靠密钥流发生器的内部机制。如果它的输出是无穷无尽的0序列,那么密文就是明文,这样整个系统就一文不值;如果它的输出是一个周期性的16-位模式,那么该算法仅是一个可忽略安全性的异或运算;如果输出的是一系列无尽的随机序列(是真正的随机,非伪随机),那么就有一次一密乱码本和非常完美的安全。实际的流密码算法的安全性依赖于简单的异或运算和一次一密乱码本。密钥流发生器产生的看似随机的密钥流实际上是确定的,在解密的时候能很好的将其再现。密钥流发生器输出的密钥越接近于随机,对密码分析者来说就越困难。然而,这种随机的密钥流却不容易得到。
在蓝牙E0流加密中用到的 LFSR易受到相关攻击和分割解决攻击,且用软件实现效率非常低。在实现过程中要避免稀疏的反馈多项式,因为它们易遭到相关攻击,但稠密的反馈多项式效率也很低。事实上LFSR算法用软件实现并不比DES快。
以上的这些问题会让人认为蓝牙的安全体系是高度不可靠的,然而一个不可忽略的事实是:通过蓝牙连接传输的数据一般来说并不是非常重要的。目前蓝牙标准考虑到的安全技术只适用于规模较小的网络,如果网络结点较多,拓扑复杂(如Ad Hoc网络),现有的基于点对点的密钥分配和认证机制不能满足需求。蓝牙所提供的数据安全性措施对小型应用来说看起来已足够了,但任何敏感数据或会产生问题的数据都不应直接通过蓝牙传输。为了使蓝牙技术应用得更广泛,我们可采用另外更强劲的加密算法,如DES算法。5 DES解决方案