蓝牙加密算法

蓝牙加密算法为数据包中的净荷加密。由于密钥长度从8比特到128比特不等,信息交互双方必须通过协商确定密钥长度。

在蓝牙技术中,用户信息作为分组的有效载荷进行加密保护,这通过采用流密码E0来实现。E0利用主节点地址、26bit的主节点实时时钟和加密密钥Kc作为输入。它由三部分组成,第一部分执行初始化(生成有效载荷字),第二部分生成密钥流,第三部分完成加密和解密,如图所示:

第二部分是该密码系统的主要部分,并也将用于初始化过程中。密钥流使用求和流密生成器产生,该流密算法由Massey和Rueppel提出,对其强度的评估也得到了很好的结果。

最后就是流加密算法的加密过程。将数据流与密码算法生成二进制流比特进行异或运算。对于加密规则,流加密算法用于将加密位按位模2并加到数据流上,然后通过无线接口进行传输。对每一分组的有效载荷的加密是单独进行的,它发生在CRC校验之后,FEC编码之前。由于加密是对称的,解密使用完全和加密相同的密钥和相同的方法实现。

蓝牙加密算法的不足

蓝牙所采用的E0流密码算法主要的缺点在于若一个伪随机序列发生错误便会使整个密文发生错误,致使在解密过程中无法还原回明文。流加密算法系统的安全完全依靠密钥流发生器的内部机制。如果它的输出是无穷无尽的0序列,那么密文就是明文,这样整个系统就一文不值;如果它的输出是一个周期性的16位模式,那么该算法仅是一个可忽略安全性的异或运算。密钥流发生器输出的密钥越接近于随机,对密码分析者来说就越困难。然而,这种随机的密钥流却不容易得到。在蓝牙E0流加密中用到的LFSR易受到相关攻击和分割解决攻击,且用软件实现效率非常低。在实现过程中要避免稀疏的反馈多项式,因为它们易遭到相关攻击,但稠密的反馈多项式效率也很低。事实上,LFSR算法用软件实现并不比DES快。

上述问题会让人认为蓝牙的安全体系是高度不可靠的,然而一个不可忽略的事实是:通过蓝牙连接传输的数据一般来说并不是非常重要的。目前蓝牙标准考虑到的安全技术只适用于规模较小的网络,如果网络结点较多,拓扑复杂,现有的基于点对点的密钥分配和认证机制不能满足需求。蓝牙所提供的数据安全性措施对小型应用来说看起来已足够了,但任何敏感数据或会产生问题的数据都不应直接通过蓝牙传输。为了使蓝牙技术应用得更广泛,所以要采用另外更强劲的蓝牙加密算法。