BLE配对绑定总结

一.配对绑定的简介
配对是找到并确定需要和自己通信的设备,也就是身份确定,而这一过程仅仅是由启动加密到得到短期秘钥(STK)为止; 而绑定是将长期秘钥(LTK)、 身份解析秘钥(IRK)和连接签名解析秘钥(CSRK)这 3 个密钥中的某个或者组合进行交换后,将交换的这些密钥存储到数据库中的过程。配对绑定过程只会发生在两个设备之间第一次连接,因为在第一次配对绑定过程中已经进行了密钥存储,如果这个存储的数据库没有人为的清空,那么之后的连接就不会再出现配对过程

二.配对绑定过程


1、配对特征交换得到临时密钥TK
2、身份确认以及短期密钥STK的产生
3、传输特定密钥

 

PS:第一、第二阶段为配对过程。第三阶段时绑定过程,此阶段传输的数据是通过第一、二阶段的短期密钥进行加密传输的

配对特征交换:

配对特征交换的是输入输出(IO)功能、认证需求(需不需要绑定以及防止MITM )、密钥大小(固定为128bit)。在BLE4.0协议中根据保护程度,协议中将安全分为3种特性:

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

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

 

 

 

配对特征交换时, 各自将自己的综合能力发送给对方设备,最后根据两个设备的能力最终选择那种方式实现 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的随机数要小

身份确认以及短期密钥STK的产生:

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

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

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

特定密钥的计算:

在配对绑定的第3个阶段传输就是两个设备商量好了的特定的密钥。

(1) 长期密钥的计算公式LTK = d1(ER,DIV,0) = e(ER,0 || DIV),ER是一个128bit的伪随机数,DIV=EDIV XOR Y 或 EDIV=DIV XOR Y,Y 也是通过计算得到的,EDIV即为加密分散器,这个值是在配对绑定过程中是由从机发送给主机, 而配对绑定完之后的连接是由主机发送给从机,从而计算出长期密钥 LTK。一方面在未来的连接过程 LTK 不通过明文发送保证 LTK的安全性;另一方面从机不存储配对过程中交换的某些密钥信息,可以减少对从机硬件要求

(2) 设备地址类型和身份解析密钥 IRK:设备地址共分为两类:公共地址和随机地址,而随机地址中的私有地址中的可解析私有随机地址的最高两bit为10,最高 bit为0,可解析私有随机地址的生产和解析都需要知道设备的身份解析密钥(IRK), 如果知道对方的IRK就能解析出对方的身份, 本地设备通过IRK也能计算出一个可解析的随机地址, 这就是身份解析密钥的功能

 

连接签名解析密钥CSRK:

在数据签名认证时需要使用到 CSRK 密钥,计算公式:CSRK = d1(ER,DIV,1)  = e(ER,1||DIV)

签名计算:

(1) 签名认证所有计算其实在数据PDU中就是信息完整性检查(MIC)这4个字节。公式MAC = CMAC(K, M, Tlen),其中 MIC 就是 MAC,其参数 k 即为连接签名解析密钥CSRK; Tlen 为固定的 64bits 也就是 8 字节长度;而 M 是一个可变长的数,它包括包计数器和具体数据这两个部分拼接而成,计数如下:M = data || SignCounter

(2) 例如,假设需要签名的数据是7字节的数据3456789ABCDEF1,而计数器SignCounter为 67653874 (0x040850F2),那么 M 的值为3456789ABCDEF1F2500804。前文提到的数据包中包含有一个包计数值,实际上并不是直接发送一个包计数值,而是通过计算包含在 MAC 即MIC 中的

三.加密完整过程图


加密过程不仅仅是 SM 层单独完成的,还有一些参数是由 LL 层进行传输的,像启动和停止加密都是有LL层进行控制的。

 

第1阶段的交换特征值并得到TK值
第2阶段交换确认值以及计算确认值所用到的随机数, 首先主机发送确认值给从机,从机也发送确认值给主机,之后主机发送随机数给从机,当从机接到随机数后,开始计算确认值,当计数的确认值和主机发过来的确认值一样,则从机也发送随机数给主机,否则就不发送随机数给主机,因为有可能受到攻击。 如果主从都交换了计算确认值的随机数后,各自会计算出短期密钥STK
第3阶段计算出STK后主机通过链路层使用 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 次加密握手过程
PS:EDIV 和 Rand 参数就是决定STK作为LTK计算SK 的评判标准,当EDIV和Rand都为0时,表示这个加密请求是两设备的第
一次配对绑定,所以要用STK作为LTK 使用;当EDIV和Rand不为0时,表示之前这两个设备已经配对过,这个值是在第一次配对时从机发送给主机的,可以知道只有第一次配对绑定过程才有安全管理协议参与,之后的连接只需链路层进行控制
 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值