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