BLE 配对流程

BLE配对是一个三阶段的过程。


前两个阶段总是使用,可能跟随着一个可选的传输特定秘钥分配的阶段。

阶段1:配对特征交换

阶段2:短期秘钥(STK)生成

阶段3:传输特定秘钥分配




STK 生成规则:
1: Just work 没有加密 TK=0x00
2:   passkey entry 密码输入如果 passkey 是 ‘019655’ then TK shall be 0x00000000000000000000000000004CC7. 
3: OOB The TK value shall be a 128-bit random number using the requirements for random generation

STK = s1(TK, Srand, Mrand)

1. 配对交换特征
设备首先在配对特征交换阶段交换IO能力来决定在第二阶段使用下面哪种方法:
 JustWorks:只工作、 PasskeyEntry:输入密码 、OutOfBand(OOB):带外



LE Legacy Pairing - Just Works
Just Works方式不能抵抗窃听者和中间人攻击,只有在配对过程时没有遭受攻击,后面加密的链路的数据传输才是可信的。安全级别很低。

LE Legacy Pairing - Passkey Entry
这种方式通过输入6位数字的方式来进行配对,生成STK。6位数是随机产生的在000000到999999之间的数值,这个数值相当于一个TK,比如远端显示这个数字,需要在本地端输入这个数字给本地设备与远端配对。如输入019655,那此时的临时Key–TK是:0x00000000000000000000000000004CC7。

Out of Band 带外
这种方式是通过BLE之外的,设备上的其他方式来获取这个OOB data,比如通过IR红外,或其余的方式,因此对于蓝牙窃听者/攻击者而言这个data的传输是不可见的了,因此会显得要安全些。


1.1 配对请求报文格式


a. IO capabilities
表明输入,输出的能力。输入是按键、键盘,输出是显示数字用的界面。
0x 00 DisplayOnly 只能是显示000000 ~ 999999的数字
0x01  DisplayYesNo 显示Yes/No 的按钮
0x02 KeyboardOnly 只能是输入000000 ~ 999999的数字
0x03 NoinputNoOutput 没有输入也没有显示,只能用Just  work工作方式
0x04 KeyboardDisplay 能输入000000 ~ 999999的数字和输出

b. OOB data flag
 0x00 OOB Authentication data not present,OOB 数据没有发送
 0x01 OOB Authentication data from remote device present OOB 数据通过远端设备发送(如IR)
 0x02-0xFF Reserved 

c. AuthReq

1:Bonding_Flags b1b0 Bonding Type
00 No Bonding
01 Bonding 
10 Reserved 
11 Reserved

2:MITM域设置为1为请求MITM(中间人介入)保护,否则设置为0. 设备将标志设置为1为STK请求认证的安全属性。
选择Key生成的方法
如果auth Req中MITM没有,则说明不需要人参与中间,所以IO capabilities会被忽略,只用Just Works就OK了。 
如果有OOB data,auth Req将可直接忽略,会直接选择OOB的方式了。

3:SC:双方设置为1,用LE安全连接进行匹配,否则为LE遗留方式配对
The SC field is a 1-bit flag that is set to one to request LE Secure Connection pairing, otherwise it shall be set to 0 based on the supported features of the initiator and responder, the possible resulting pairing mechanisms are: if both devices support LE Secure Connections, use LE Secure Connections; otherwise use LE legacy pairing. 

4:Keypress:只有在输入密码形式配对时起作用,当双方都设置为1时,配对时按key会发送notify PDU。
The keypress field is a 1-bit flag that is used only in the Passkey Entry protocol and is ignored in other protocols. When both sides set that field to one, Keypress notifications shall be generated and sent using SMP Pairing Keypress Notification PDUs.

5:MaximumEncryptionKeySize:7到16字节之间

6:InitiatorKeyDistribution:该域表明秘钥初始化设备请求分配使用。

7:The Initiator Key Distribution / Generation field in the Pairing Request command is used by the master to request which keys are distributed or generated by the initiator to the responder

8:ResponderKeyDistribution:该字段表明秘钥初始化设备请求响应设备来分配秘钥分配使用。




1.1.1 配对请求报文实例

a:主设备向从设备发送配对请求报文。


1: Code (1 octet)                               
0x01 Pairing Request

2: IO Capability (1 octet) 
 0x03 NoInputNoOutput
用于just work 认证方式

3: OOB data 
 0x00 OOB(out of band) Authentication data not present
没有带外认证,Out of Band 带外这种方式是通过BLE之外的,设备上的其他方式来获取这个OOB data,比如通过IR红外,或其余的方式,因此对于蓝牙窃听者/攻击者而言这个data的传输是不可见的了,因此会显得要安全些。

4: AuthReq (1 octet) The AuthReq field is a bit field that indicates the requested security properties  for the STK and LTK and GAP bonding information
0x01 :表示绑定

5:MaxEncKeySize
0x10 表示最大认证key大小是0x10个字节

6:InitiatorKeyDistribution:该域表明秘钥初始化设备请求分配秘钥分配使用。
The Initiator Key Distribution / Generation field in the Pairing Request command is used by the master to request which keys are distributed or generated by the initiator to the responder

7:ResponderKeyDistribution::001 该字段表明秘钥初始化设备请求响应设备来分配秘钥分配使用。

b:从设备向主设备向发送配对回复报文。

具体字段含义参考 配对请求报文。


1.2  配对确认

配对确认用来在成功的配对特征交换之后启动STK生成。

该命令被两个对等设备使用来向对等设备发送确认值。

初始化设备通过向响应设备发送配对确认命令启动STK生成。


报文格式


启动STK的生成,这一部分可简述为以下步骤的实现: 
1. Initiator生成一128-bit随机数Mrand,并使用这个Mrand结合一些其他的输入,使用密码工具箱中c1计算出一个128-bit的Mconfirm值:
Mconfirm = c1(TK, Mrand,
Pairing Request command, Pairing Response command,
initiating device address type, initiating device address,
responding device address type, responding device address)

Responder也生成一128-bit随机数Srand,并使用这个Srand结合一些其他的输入,使用密码工具箱中c1计算出一个128-bit的Sconfirm值:
Sconfirm = c1(TK, Srand,
Pairing Request command, Pairing Response command,
initiating device address type, initiating device address,
responding device address type, responding device address)

然后Initiator将其计算的Mconfirm值通过Pairing Confirm包发送给Responder,而Responder也将其计算的Sconfirm值通过Pairing Confirm包发送给Initiator;
Initiator收到Sconfirm后,再将Mrand值通过Pairing Random包发送给Responder;
Responder收到Mrand值后计算它的Mconfirm值,再跟前面那个Initiator送过来的Mconfirm值进行比较,若不同说明配对失败了。若相同,则Responder也会将它的Srand值通过Pairing Random包发送给Initiator;
而Initiator也会计算收到的Srand值的Sconfirm值,并跟前面那个Responder送过来的Sconfirm值进行比较,若不同说明配对失败了,若相同,继续。


报文实例

主设备向从设备发送配对确认报文,从设备也向主设备发送配对确认报文。





1.3 配对随机

该命令用来由初始化和响应设备发送用来计算在配对确认命令中的确认值的随机数。


报文格式



报文实例

主设备向从设备发送配对随机值报文,从设备也向主设备发送配对随机值报文。




1.4 配对特定key 分发


BLE的SMP的一些Key相关定义

Long Term Key (LTK):加密链路用,128-bit;

Encrypted Diversifier (EDIV):在LE legacy pairing过程中,用于识别LTK分发,16-bit;

Random Number (Rand):在LE legacy pairing过程中,用于识别LTK分发,64-bit。

Identity Resolving Key (IRK):用于生成和解析random address用的,128-bit;

 AddrType  (1 octet) 
If BD_ADDR is a public device address, then AddrType shall be set to 0x00. 
If BD_ADDR is a static random device address then AddrType shall be set to 0x01. 
 BD_ADDR (6 octets) This field is set to the distributing device’s public device address or static random address.

Connection Signature Resolving Key (CSRK):用于对数据进行签名已经验证签名数据,128-bit;

1.4.1  特定key分发原因

在秘钥分配阶段slave把秘钥给master所有重连能够被加密,它的随机地址能够被解析或者master设备能校验来自slave签名数据。
Master也向slave提供数据所以如果角色交换重连能够被加密,master的随机地址能够被解析或者slave能够校验来自master的签名数据。

如下是蓝牙SPEC的描述:



1.5 绑定

就是将配对阶段产生的一系列key 保持到flash中,以便后续使用。


附录:

以上这个过程的报文交互如下图,



  • 16
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 微信小程序在蓝牙BLE配对方面,依赖于微信小程序提供的蓝牙API实现。在进行BLE配对的过程中,需要首先搜索附近的BLE设备,以便获取待配对设备的唯一标示符MAC地址。 然后在小程序端启动配对操作,此时被配对设备需要回复一条连接请求。接着需要开启被配对设备的可配对模式,并将BLE设备MAC地址发送给小程序端,以便小程序端进行配对确认。 若确定进行BLE配对,小程序端向被配对设备发送连接请求,并等待被配对设备响应。在连接响应后,双方会进行一系列加密协商和验证操作,以确保安全连接。 之后,双方即可进行数据通信,例如读写消息等。 在BLE配对过程中,需要注意设备名和UUID等连接参数的设置,以保证连接的稳定性和安全性。此外,小程序端和被配对设备都需要进行相应的权限申请和权限设置,确保BLE通信的正常进行。 总之,在进行BLE配对时,需要进行多重验证和加密协商,并注意相关的连接参数和权限设置。只有这样,才能保证BLE通信的稳定安全。 ### 回答2: 微信小程序具有与蓝牙设备进行BLE配对操作的功能。BLE是一种低功耗蓝牙技术,广泛应用于智能穿戴设备、智能家居、健康监测等领域。 在微信小程序中,用户需要进入“我”的界面,然后点击“添加设备”按钮。接着,用户需要扫描可用的蓝牙设备,然后选择要配对的设备。 配对过程中,需要输入设备的密码或者确认号码。如果配对成功,蓝牙设备将被添加到微信小程序的设备列表中。 在设备列表中,用户可以查看已配对的设备的状态、电量、信号强度等信息。用户可以通过微信小程序来控制设备的功能,例如打开灯光、放音乐、发送消息等。 需要注意的是,BLE配对需要蓝牙设备的支持。如果蓝牙设备不支持BLE功能,将无法进行BLE配对操作。同时,不同的蓝牙设备的配对方式和操作流程也可能会有一些不同,因此用户在进行BLE配对时需要仔细阅读设备配对的说明文档。 ### 回答3: 微信小程序通过BLE(蓝牙低功耗)技术,实现了设备的配对功能,可以直接在小程序中与设备进行通信。 首先,设备需要支持BLE功能,并且在小程序中进行了注册。同时,设备需要处于广播模式,等待小程序扫描并连接。在小程序中,可以通过wx.startBluetoothDevicesDiscovery函数进行设备的搜索,并通过wx.onBluetoothDeviceFound监听搜索到的设备并进行筛选。 当小程序搜索到匹配的设备后,可以调用wx.createBLEConnection函数建立设备连接。此时,设备会提示用户进行配对,用户需要确认配对请求,并输入相应的配对码。小程序可以通过wx.getBLEDeviceServices和wx.getBLEDeviceCharacteristics获取设备提供的服务和特征值,并通过wx.writeBLECharacteristicValue和wx.readBLECharacteristicValue进行数据的传输和读取。 从配对的角度来看,小程序BLE配对流程与一般的BLE设备配对流程相似。小程序通过蓝牙与设备进行配对,建立安全连接,以实现数据的安全传输和保障用户隐私。在这个过程中,小程序应该提供友好的界面提示,引导用户完成配对流程,确保用户能够顺利地完成配对操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值