介绍了ULP蓝牙技术及系统结构,重点描述了ULP蓝牙的安全机制,详细分析了其地址生成、认证过程、匹配和密钥交换等关键技术。最后比较了ULP蓝牙和传统蓝牙在安全方面的不同。
2007年6月,Wibree技术被纳入蓝牙技术联盟(SIG),并更名为超低功耗蓝牙(ULP)[1]。它继承了传统蓝牙优化运用、耗能更少、成本更低的优点,适用于小型设备件简单的数据传输。
Wibree作为一项耗电量极低的蓝牙技术成为蓝牙规格的一部分,是一种新的低功率无线技术,为业界开拓了新的市场机会及创新空间。由于采用无线方式进行通信,因此,ULP蓝牙与传统蓝牙一样面临传输数据被截获的危险。所以如何保证ULP蓝牙运用的安全,是ULP蓝牙技术设计的一个核心问题。
本文基于Bluetooth SIG的技术草案[2],讨论了ULP蓝牙技术的安全结构,介绍了ULP蓝牙的地址生成及认证、密钥生成和匹配原理的相关过程。
1 ULP蓝牙的安全构架
安全性是ULP蓝牙协议中必不可少的一部分,它提供使用保护和信息保密[3]。如图1所示,ULP蓝牙系统有三个逻辑组成部分:ULP控制器、ULP主机和HCI(主机控制器接口,介于ULP控制器与ULP主机之间,提供通信服务)。ULP控制器由物理层和链路层组成;ULP主机中主要是ULP的L2CAP协议;高层主要是应用层协议,多种剖面在高层中应用。而安全模块位于ULP控制器中的链路层和ULP主机的L2CAP协议中,由主机控制器提供控制和数据。
ULP蓝牙工作在2.4GHz的ISM(Industrial Scientific Medical)频段,其工作的中心频率为2402+K×2MHz(K=0~39),即工作频带宽度为2MHz~3.5MHz。划分为40个物理信道,其中包括3个广播信道和37个数据信道。
结构中的链路层有两种工作状态:空闲状态和连接状态,其链路层只能工作在一种工作状态下。同时,ULP蓝牙设备还有五种工作模式:广播模式、扫描模式、申请模式、主设备及从设备。
ULP L2CAP(Logic Link Control and Adaptation Protocol)处于链路控制协议之上,属于数据链路层。L2CAP对上层协议可以提供面向连接和无连接数据服务。L2CAP允许高层协议、应用发送和接收最长64KB数据包。
链路层中的连接加密过程由ULP主机负责,其中包含一个由链路层独立负责的加密子进程。加密过程由HCI_Setup_Encryption命令初始化。使用这个命令后,主设备的ULP主机就表明了链路层连接了新的加密模式。只要有这样一个来自于ULP主机的命令,一个SEC_EMPTY_REQ数据包就会在链路层的连接上被传送。
在HCI_Setup_Encryption命令之后, HCI_Command_Completed命令所表示的过程完成之前,不允许有来自于ULP主机的任何数据包。
2 ULP蓝牙认证及密钥生成过程
2.1 ULP蓝牙地址
ULP蓝牙使用两种类型的地址[4]:设备地址和存取地址,设备地址细分为公有和私有设备地址。每个ULP设备应该分配一个固定48bit的ULP蓝牙公共设备地址,而私有设备设置的地址是可选的。ULP设备只有在证明设备可靠性后,才显示其私有地址;每个链路层的连接有一个伪随机32bit的存取地址,由连接中的申请者产生,每个链路层连接不同的存取地址。ULP蓝牙系统中,只能有一个数据包格式能在广播通道数据包和数据通道数据包中同时使用。如图2所示,每个数据包含4个实体:标头、同步字、PDU和CRC。广播数据包中的同步字是固定的,数据通道中的数据包同步字是链路层连接的存取地址。
2.2 广播工作模式中认证
ULP系统中,每一台设备会产生并保持两个随机生成的密钥:鉴权(identity root)和加密(encryption root)。鉴权用于连接中生成私有地址和区分标识符密钥连接中的标识符;加密用于确立密钥标识符的安全。在任何加密连接中,广播创建密钥作为会话密钥的基础。集合密钥是在某些配对选择中创建,这些密钥只是用作保护(未来)广播中密钥的传递。
加密模式中,通过广播方式把创建的密钥分派给需要连接的所有设备或实体,鉴权可用来建立私有地址。因为鉴权每次只支持一个身份,所以许多申请者将获得同样的鉴权。广播向设备提供标识符的加密(伴随16bit标识符),在加密模式中该设备支持连接的设备。规范的基本概念有唯一的标识符密钥,被称为“长期密钥”(long term key),这个密钥分配给每个申请者。此外,加密规则仅仅是推荐使用并且在广播之外。长期密钥是不可见的,原则上能使用任何映射在16bit~128bit之间的密钥。加密标识符密钥有以下几种:IRK(Identity Resolving Key)、PIR(Pairing Identity Root)、DHK(Diversifier Hiding Key)、PIRK(Pairing Identity Resolving Key)、PDHK (Pairing Diversifier Hiding Key)。
在广播模式条件下,广播设备产生一个初始随机向量(IRV),该向量由10B的新随机数组成,也是链路层(LL)传输给申请者的第一个可能的数据包。广播设备初始化时,到达连接请求。
连接请求包括SEC字段(表明是否是加密请求)和PI字段(表明申请者连接一个匹配认证)。SEC=1,表示有2B的加密区分标识符(EDIV)和申请者6B的随机地址。
如图3所示,在SEC=1的条件下,ULP蓝牙广播模式下的认证步骤如下:
(1)解密区分标识符隐藏密钥。发送HCI_Set_key(0x00,DKH)命令到链路层,返回HCI_Command_Complete(),并再发送加密请求命令HCI_encrypt(addmaster),PAL返回请求完成命令HCI_Command_Complete()。
由EDHK计算DIV: DIV=EDHK(addmaster[0…15]?茌DIVhidden) 此具体过程是: 由Y=EDHK (IRA(初始化随机地址), 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00) DIV= {Y0, Y1} XOR {EDIV0, EDIV1}得出。或者在PI=1的条件下,即匹配连接中有: Y=EPDHK (IRA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00) 得出DIV={Y0,Y1}XOR{EDIV0, EDIV1}
(2)创建长期密钥。发送设置加密命令到链路层HCI_Set_key(0x00,ER),返回完成命令HCI_Command_Complete(),再发送请求加密长期密钥命令HCI_encrypt(DIV),返回完成创建长期密钥命令HCI_Command_Complete(LTK)。
按以下公式重新创建长期密钥LTK: LTK=EER(DIV/0) LTK=EER (DIV,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00)
(3) 创建会话密钥命令。HCI_Set_key(0x00,LTK),返回完成命令HCI_Command_Complete(),再发送请求加密长期密钥命令HCI_Encrypt(addmaster/IRV),返回完成创建长期密钥命令HCI_Command_Complete(SK)。
SK=ELTK(addmaster/IRV)
(4) 链路层设置会话密钥和初始值。初始值为
IV=addmaster/addslave[0…23]
分别发送命令HCI_Set_key(0x01,SK)和HCI_Set_IV(addr|addr[0…23])到链路层进行设置,返回完成设置命令HCI_Command_Complete()。生成会话密钥SK和IV,并在链路层设置(广播地址AA={A0,A1,…,A5})。
2.3 申请模式中加密会话设置
申请者浏览广播,找到相匹配的广播地址AA={A0,A1,…,A5},初始使用6 B完全随机地址(IRA)。
(1)创建随机地址:发送HCI_Rand()命令到链路层(LL),返回HCI_Command_Complete(rand),addmaster=rand[0…47]。
(2)加密区分标识符(diverfier)密钥。发送设置加密命令到链路层HCI_Set_key(0x00,DHR),返回请求完成命令HCI_Command_Complete(),再发送加密请求命令HCI_Encrypt(addmaster),返回请求完成命令HCI_Command_Complete()。
DIVhidden=EDHK(addmaster[0…15]?茌DIV) 由DIV计算出EDIV。 由Y=EDHK (IRA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00) 得出EDIV={Y0,Y1}XOR{DIV0,DIV1} 或者在PI=1的条件下,即匹配中由 Y=EPDHK (IRA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00) 得出EDIV={Y0, Y1}XOR{DIV0, DIV1} 最后申请者请求一个连接。
①如果请求加密连接,则SEC 字段一直等于1;如果在申请者和广播设备间,扩展匹配继续进行,即PI字段设置为1。
②2B的加密区分标识符密钥(EDIV),6B的申请者随机地址(IRA)。
③当连接已经建立时,申请者从广播中得到一个10B的随机向量(IRV)作为层协议数据单元PDU(类型0xFD),然后从长期密钥中,申请者创建会话密钥SK和设置初始值(IV)。 创建会话密钥SK:发送设置长期密钥命令HCI_Set_ key(0x00,LTK)到链路层,返回完成命令HCI_Command_ Complete(),再发送加密请求命令HCI_encrypt(addmaster/IRV),返回完成创建会话密钥命令HCI_Command_Complete(SK),SK=ELTK(addmaster/IRV),IV=addmaster/addslave[0…23],即可表示为: SK=ELTK(IRA,IRV),IV={IRA,A0,A1,A2}。
④SK和IV被分配给链路层(LL)作为最后的步骤。LL操作中,申请者将初始化“连接模式变化”。
链路层设置会话密钥和初始值:分别发送命令HCI_Set_key(0x01,SK)和HCI_Set_IV(addr|addr[0…23])到链路层设置,返回完成设置命令HCI_Command_Complete()。
2.4 密钥更新
安全连接建立之后,不支持密钥更新或者重建安全参数。唯一的例外就是匹配程序,在匹配的第一阶段后,匹配程序中的会话加密密钥和状态发生改变。
3 匹配和密钥交换
本文的匹配算法有两个扩展模式,在前n个连接中密钥改变(如果攻击者错过一个更新,安全性提高)。第一个扩展模式尤其适合于移动设备;第二扩展模式是假定两个设备有相同的地址,通过干扰硬件攻击者,提高密钥的安全性,该模式适用于家庭等固定环境。
ULP蓝牙的匹配分三个阶段进行,其流程如图4所示。
第一阶段,成功匹配功能交换后,开始执行第一阶段操作。这一阶段不受加密保护,连接中直接进入扩展的状态(伴随着PI 字段设置为连接请求和SEC 字段关闭)。
第二阶段,在加密通道中执行匹配,受临时密钥或者第一阶段的结果或是早期扩展阶段的保护。该阶段的匹配可以直接输入(PI字段设置为连接请求),在此保护通道中,下面之一被执行:(1)传送长期密钥和认证(从未来的广播到未来的申请者)。(2)传送扩展(临时)密钥和认证(从未来的广播到未来的申请者),在扩展模式中,进行有限的密钥交换。
第三阶段,第三阶段与匹配无关,是正常的会话,并且使用了在第二阶段同样的密钥保护。注:广泛的与这个密钥通信可能会导致(取决于匹配机制)攻击。攻击长期密钥可能导致在第二阶段中提供的长期密钥长度少于128bit。第三阶段提供方便和实用性的扩展模式,以及可能简单的设备。
总体层次规范定义了第三阶段的用处,如果没有定义任何第三阶段的用途,匹配的设备将终止匹配会话,用长期密钥建立新会话。
ULP蓝牙系统本身提供的安全系统具有相当的安全特性[5]。在ULP蓝牙用于商业或军事等方面时,现有的点对点的密钥分配和认证机制将无法满足安全要求,因而采用AES加密算法是必需的。与传统蓝牙相比,ULP蓝牙在安全上有以下特点:
(1) 现有的蓝牙认证[6],主要是通过质询—响应的方法进行认证。ULP蓝牙的认证基本相同,但是在ULP蓝牙的认证机制中,通过设置SEC和PI的值进行不同的认证。安全措施更明确、简单,易于实现。
(2) 蓝牙加密使用E0加密算法[7],缺点在于若一个伪随机序列发生错误,便会使整个密文发生错误,致使在解密过程中无法还原回明文。蓝牙E0流加密中用到的LFSR易受到相关攻击和分割解决攻击,且用软件实现效率非常低。
ULP蓝牙中使用AES加密模块。虽然传输速度有所降低,但安全性更高。适合小器件设备,如手表、运动传感器、医疗设备等;传统蓝牙适用于传输大量数据的设备。ULP蓝牙的加密的位置处于HCI 层,在流量控制和重传机制下,可以避免多次加密无用的数据。针对性更强,对不需要加密的数据进行了过滤(如命令分组、事件分组),所以它的日常连接次数可达到50次;而传统蓝牙连接次数在5次以内。ULP蓝牙加密方案采用低成本的可编程逻辑器件和现成可用的高级加密处理的智力产权产品实现,降低了系统的成本。 |