蓝牙安全吗关于蓝牙安全机制的研究( 二 )


先介绍几个概念:
1)蓝牙设备地址(BD_ADDR):是一个对每个蓝牙单元唯一的48位IEEE地址 。
2)个人确认码(PIN:Personal Identification Number):是由蓝牙单元提供的1-16位(八进制)数字,可以固定或者由用户选择 。一般来讲,这个PIN码是随单元一起提供的一个固定数字 。但当该单元有人机接口时,用户可以任意选择PIN的值,从而进入通信单元 。蓝牙基带标准中要求PIN的值是可以改变的 。
3)鉴权字:是长度为128位的数字,用于系统的鉴权 。
4)加密字:长度8-128位,可以改变 。这是因为不同的国家有许多不同的对加密算法的要求,同时也是各种不同应用的需要,还有利于算法和加密硬件系统的升级 。
区分鉴权字和加密字的目的是在不降低鉴权过程作用的前提下使用更短的加密字 。
虽然蓝牙系统的跳频机制对于来自系统内部其它设备的偶然传输干扰起到了一定的保护作用,但是很显然仅有这种保护是不够的 。它不能防止有人在两个传输单元之间对数据的窃听和偷取,尤其在无线传输数据时,窃取数据者可以轻松地屏蔽自己而不让用户发现,因此蓝牙系统需要加入相应的安全机制 。在一般的系统中,通常对所传输的数据包进行加密,但仅有这种做法是不够的 。更重要的是在通信连接建立以前,确保通信单元的安全性 。例如用户相同时跟几个用户通信,就需要对这些用户进行确认 。因此,在蓝牙系统中间时运用了鉴权和加密技术 。
三、蓝牙安全机制
1、字治理机制
蓝牙链字是长度为128位的随机数,它是蓝牙系统鉴权和加密的基础 。为了支持不同阶段、模式的要求,蓝牙系统在链路层上用了4种不同的字来保证系统的安全性 。包括单元字KA组合字是KAB,临时字Kmaster及初始化字Kinit 。
单元字KA与组合字KAB仅产生方式不同,执行的功能是完全相同的 。也就是说,KAB是由两个单元A,B共同产生的,而KA仅由一个单元A产生,因此KA在初始化阶段产生后就基本不变了 。系统的内存比较小时通常选择KA,而系统对稳定性要求比较高时选择KAB 。
临时字Kmaster只是临时取代原始字 。例如,当主机想与多个子机通信时主机将用同一个加密字,因此把它存放在临时字中,以便于使用 。
初始化字Kinit仅仅在初始化阶段有效,也主是单元字KA,KAB产生的阶段,它不仅仅是初始化阶段的一个临时字,其产生需要一个PIN 。
半永久性的链接字在特定的时间内被称作当前链接字 。当前链接字和其它链接字一样,用于鉴权和加密过程 。此外,还用到了加密字KC,加密字被LM的命令激活后将自动被改变 。
另外,鉴权字和加密字在不同的阶段执行不同的功能 。例如:在两个单元没有建立连接的阶段和已经建立连接的阶段有很大的不同,前者必须首先产生加密字,而后者可以继续使用上次通信的加密字 。相应地不同的阶段对字的治理是不一样的 。此外当主机想广播消息,而不是一个一个地传送消息时,需要非凡的字治理方法 。正是蓝牙系统有力的字治理机制,才使得系统具有很好的安全性,而且支持不同的应用模式 。
2.链接字的产生
初始化字Kunit的值以申请者的蓝牙设备地址、一个PIN码、PIN码的长度和一个随机数作为参数,通过E22算法产生 。而申请者相对校验者而言是需要通过验证的一方 。因此,申请者需要正确的PIN码和PIN码的长度 。一般来讲,由HCI决定谁是申请者,谁是校验者 。
当PIN的长度少于16个八进制数时,可以通过填充蓝牙设备地址的数据使其增大,因此假如循环使用E22可以使链接字的长度增长为128位 。

推荐阅读