蓝牙4.0 BLE传统配对绑定过程

1.关键词

简写

说明

作用

TK

临时密钥

128bit,用来计算短期密钥STK

STK

短期密钥

128bit,用来计算长期密钥LTK

SK

会话密钥

128bit,通过LTK计算所得,作为第3阶段三次加密握手密钥;

该值的计算链路加密过程,SK=e(LTK, (SKDmaster || SKDslave));

链路加密过程是以STK为密钥,分散因子SKD初始向量IV进行加密

LTK

长期密钥

已配对绑定过的两个设备再次连接时,作为链路密钥;

绑定过程中LTK,EDIV和RAND三个值由从机发送给主机,

EDIV和RAND用来产生LTK,RAND为随机数

绑定成功后主机会保存LTK,EDIV和RAND三个值;

从机使用EDIV、RAND和自身保存的ER、IR两个种子数据计算得到LTK;

Mconfirm

主机身份确认值

第二阶段身份确认,通过TK和128bit随机数计算所得

Sconfirm

从机身份确认值

同上

ERIR

128位伪随机数

从机flash中保存的种子数据,有厂家写入,用于产生LTK

EDIV

加密分散器

用于产生LTK

2.配对过程

蓝牙配对过程分为三个阶段,第1阶段用来交换配对特征交并得到临时密钥TK。第2阶段中会进行身份确认以及产生短期密钥STK。第3阶段是设备绑定的过程,这期间会传输加密链路中使用到的LTK、IRK 以及 CSRK 等密钥,此阶段传输的数据是通过第一、二阶段的短期密钥进行加密传输的。配对过程图如下:

2.1第1阶段

2.1.1特征交换

    配对特征交换的是输入输出(IO)功能、认证需求(需不需要绑定以及防止MITM )、密钥大小(固定为128bit)。

    在BLE4.0协议中根据保护程度,协议中将安全分为3种特性:

  • Authenticated MITM protection: 可靠中间人保护
  • Unauthenticated no MITM protection: 不可靠无中间人保护
  • No security requirements: 无安全需求

    这里的中间人MITM的意思是第三方的蓝牙设备。可靠中间人保护就是在 TK 共享是不会有第三方设备知道共享的TK 密钥;不可靠无中间人保护就是说 TK 共享时第三方设备很容易知道共享的 TK 值,所以是不可靠的传输;而无保护是不怕被别人盗取数据。

    输入输出能力:输入和输出的组合决定采用什么方式生成TK。

          

2.1.2临时密钥

    配对特征交换时, 各自将自己的综合能力发送给对方设备,最后根据两个设备的能力最终选择那种方式实现 TK 值的共享。在BLE4.0协议规范中其实是有三种方式决定TK值:

  • Just Work(只工作):两设备使用的是默认的TK值(6 个 0)。对于这种方式是一个不可靠的加密链路,它不能防止MITM攻击。这种方式使用时可靠的前提是,确保在配对绑定是能保证没有 MITM 攻击,那么在之后的连接中加密的数据是无法被其它设备窃听的,也就是说这种方式能保护将来加密链路安全,但是不能保护配对绑定过程。
  • Passkey Entry(输入密码):对于输入密钥来说: 两个设备中 ,一 个蓝牙设备在自己的显示屏上显示随机6位数;而操作人员看到这6位数后,将这6位数在另一个蓝牙设备中输入,从而实现两个设备的TK值一样。
  • Out of Band(带外):带外是使用另一无线方式将数据传给蓝牙设备,如果带外本身能防止MITM的攻击,那么传送的TK值肯定是受保护的。而且这种方式下的TK值是128bit的随机数,虽然还是有概率被第三方猜中,但是猜中128bit随机数的概率远比输入密码时的6bit的随机数要小。

2.2第2阶段

    配对的第1阶段通过特征交换仅仅得到TK值,而TK值是用来做在第2阶段用来作为密钥进行计算两个重要的值:身份确认值(confirm)和短期秘钥(STK)值。

2.2.1身份确认值

    得到了TK值,是为了保证和自己通信的设备是自己需要连接的设备,必须通过某些计算来确定对方的身份。 两个设备都需要计算确认值,从而确定对方是所需要的连接的设备。所以分为主机确认值 / 发起者确认值 (Mconfirm) 计算和从机确 认值/响应者确认值(Sconfirm)计算

2.2.2短期密钥

    STK存在的目的在于配对绑定过程的第3阶段不再使用明文进行数据传输,而是使用STK作为长期秘钥LTK将需要交互的数据进行加密,第3阶段传输是在未来加密链路中使用到的LTK、IRK 以及 CSRK 等等密钥。然而 STK 或者 LTK 并不能直接作为将来要发送的数据包进行加密的密钥,为了传输的数据包更加的安全,加密数据包的密钥是会话密钥Session Key(SK),SK是用STK 或者 LTK 当做密钥计算得到的。当两个设备第一次进行配对绑定时,在第3阶段就需要进行加密链路传输数据,而此时长期密钥LTK是没有共享的,所以需要通过第 2 阶段计算得到的STK作为来计算会话密钥SK。

2.2.3第2阶段整体流程

    第2阶段中,主从机首先会计算各自的身份确认值,首先主机发送确认值给从机,从机也发送确认值给主机,之后主机发送随机数给从机,当从机接到随机数后,开始计算确认值,当计数的确认值和主机发过来的确认值一样,则从机也发送随机数给主机,否则就不发送随机数给主机,因为有可能受到攻击。 如果主从都交换了计算确认值的随机数后,各自会计算出短期密钥STK=s1(TK, Srand, Mrand)。

    计算出STK值后,双方交换分散因子SKD和初始向量VI。主机通过链路层使用 LL_ENC_REQ 发起加密请求,并将用来计算会话密钥SK的参数会话密钥分散值 SKDm发送给从机,以及CCM使用的初始化向量 IVm 值、计算 LTK 的 EDIV 和 RAND 参数都发送给从机。IV和SKD都为伪随机数。从机通过 LL_ENC_RSP 加密应答把计算 SK 相关的参数也发送给主机,这时主从之间通过 LL_START_ENC进行3次加密握手。第1次,从机通过明文的方式将 LL_START_ENC_REQ 开始加密请求发送给主机,并将自己接收数据包方式设置为加密接收;第 2 次,当主机接收到从机的开始加密请求的明文后,主机发送加密的开始加密请求应答包LL_START_ENC_RSP 给从机,并将自己的接收设置为加密接收;第3次,因为从机已经将接收设置为了加密模式,所以应该能成功接收到主机 发 送 的 密 文 LL_START_ENC_RSP , 之后从机发送加密的LL_START_ENC_RSP包给主机从而完成 3 次加密握手过程。

2.3第3阶段

    第3阶段为设备绑定阶段,该阶段从机会计算产生LTK,并将LTK和计算LTK所用的EDIV和RAND两个值发给主机。主机将这三个值进行保存,这样两个设备就绑定成功了。

    第3阶段传输的数据包都是加密的密文。

    已匹配和绑定过的两个设备进行二次连接时,双方先进行SKD和VI的交换,然后主机将EDIV和RAND发送给从机,从机利用EDIV和RAND和本身保存的ER和IR种子数据计算出LTK,然后双方进行加密3次握手,如果3次握手成功,则建立连接成功,否则建立连接失败,重新进行匹配。

PS:EDIV 和 Rand 参数就是决定STK作为LTK计算SK 的评判标准,当EDIV和Rand都为0时,表示这个加密请求是两设备的第一次配对绑定,所以要用STK作为LTK 使用;当EDIV和Rand不为0时,表示之前这两个设备已经配对过,这个值是在第一次配对时从机发送给主机的,可以知道只有第一次配对绑定过程才有安全管理协议参与,之后的连接只需链路层进行控制。

3.漏洞分析

  • 中间人攻击:蓝牙设备的ER和IR种子数据是从硬件读取,固定的。当通信完成之后,那么B显然知道A所使用的链路密钥,那么B通过修改自身的地址,把自己的地址改成A的地址后,伪装成A和C通信,那么C此时就以为自己在和A通信。B也可以伪装成C和A去通信,因为B知道A的链路密钥,B是能够通过A的认证从而和A进行连接。这样A和C之间并没有进行实质的通信,都是B分别伪装和A,C通信。
  • 加密关键数据泄漏:第二阶段3次加密握手之前所有的数据都是明文传输,其中包括用与计算LTK的EDIV和RAND值和用于链路加密的SKD和VI值。
  • 鉴权DOS攻击:鉴权时的DOS攻击是从上一次鉴权失败到下一次可以发起鉴权期间,第三方通过伪装发起故意使鉴权失败,从而使间隔时间继续上升,直到达到允许的最大值,在此期间双方不能进行正常的鉴权。还有一种形式的DOS攻击,快速不断的给远端蓝牙发送文件,而远端设备被大量的是否要接收该文件的命令冲击直到瘫痪。

PS:鉴权是指主从双方得到相同的临时密钥(TK)的过程

参考资料

BLE4.0配对绑定通讯过程解析:BLE4.0配对绑定通讯过程解析_红-萝-卜的博客-CSDN博客

BLE配对绑定总结---总结来自低功耗蓝牙协议总结:BLE配对绑定总结---总结来自低功耗蓝牙协议总结_irk ltk_binger-csdn的博客-CSDN博客

LE legacy Pairing过程和后续连接过程简介:https://www.cnblogs.com/unrulife/p/10876795.html

猜你喜欢

转载自blog.csdn.net/UFOfuck/article/details/102708853
今日推荐