目录
1)IO Capability:IO能力,决定了双方设备根据相应的配对特性找到合适的连接方法(例:手表显示PIN码,手机输入PIN码 手表IO=DispayOnly )
2)OOB:带外设备,使用外部通信手段来交换配对过程中使用的一些信息。
①Bonding Flags:是否需要配对之后储存一个长期的LTK,这样之后的每次连接就不需要重新配对了(legacy和SC都有效)
②MITM:决定阶段二是否使用IO Capabilitites(参考章节:2.3.5.1)
③SC:决定阶段二的配对方法。置1是支持LE Secure Connections的配对方式,双方都支持则使用SC,否则使用legacy
④kerpress:仅在Passkey输入协议中使用,在其他协议中被忽略。
⑤CT2:在传输时应设置为1,以指示对h7功能的支持。根据core 2.4.2.4 章节,好像是决定了 LE/BR 之间互相通过LTK派生秘钥的过程。
4)Maximum Encryption Key Size:7~16byte,一般都是16byte啦。
5)Initiator Key Distribution:发起者秘钥分发
6)Responder Key Distribution:响应者秘钥分发
一、基本概念
1、配对
在蓝牙核心规范中,有三个主要的架构层:Controller、Host和Application。 在Host层,有一个名为Security Manager (SM)的模块,它定义了配对和密钥分发的方法和协议、相应的安全toolbox,以及定义了配对命令帧格式、帧结构和超时限制的Security Manager协议(SMP) ble的配对其实就是一个加密的过程,目的是提高蓝牙链路传输的安全性,不配对也能连接进行通信。 在ble的配对中根据蓝牙版本又分为 legacy pairing 和 secure Connections 。 ble是蓝牙4.0及之后版本才有的功能,而在4.2蓝牙规范中,升级了LE的配对; 所以区分如下: v4.0/4.1: LE legacy pairing v4.2及以上:LE Secure Connections note:高版本也是可以支持 legacy pairing 一般来说,配对有三 个阶段。 阶段1: Pairing Feature Exchange |
---|
1.1 阶段一:配对特性交换
配对请求包格式如下:
1)IO Capability:IO能力,决定了双方设备根据相应的配对特性找到合适的连接方法(例:手表显示PIN码,手机输入PIN码 手表IO=DispayOnly )
note:没有一种配对算法可以使用 IO(Yes/No + No), 所以规定此项也是 NoInputNoOutput | |
---|---|
2)OOB:带外设备,使用外部通信手段来交换配对过程中使用的一些信息。
3)Auth Req
①Bonding Flags:是否需要配对之后储存一个长期的LTK,这样之后的每次连接就不需要重新配对了(legacy和SC都有效)
②MITM:决定阶段二是否使用IO Capabilitites(参考章节:2.3.5.1)
③SC:决定阶段二的配对方法。置1是支持LE Secure Connections的配对方式,双方都支持则使用SC,否则使用legacy
④kerpress:仅在Passkey输入协议中使用,在其他协议中被忽略。
双方设备都设为1时有效,Keypress Notification。
⑤CT2:在传输时应设置为1,以指示对h7功能的支持。根据core 2.4.2.4 章节,好像是决定了 LE/BR 之间互相通过LTK派生秘钥的过程。
⑥RFU:Reserved,没有使用
4)Maximum Encryption Key Size:7~16byte,一般都是16byte啦。
该值定义了设备的最大加密密钥大小(以字节为单位)可以支持。最大的密钥大小应该在7到16字节的范围内。
5)Initiator Key Distribution:发起者秘钥分发
6)Responder Key Distribution:响应者秘钥分发
1.2 阶段二:密钥的生成
阶段一的特性交换(sdk参数配置)决定了阶段二的配对方式,也就是使用哪个密钥生成方式;
密钥生成方式如下:
- Just Works
- Passkey
- OOB
- Numeric Comparison(SC配对特有的新方法)
涉及特性:OOB,MITM,IO Capability,SC
先看双方OOB, 再看MITM, 再核对 IO Capability,SC配置参数;就知道使用哪种密钥生成方式了
1.3 阶段三:密钥的分发
配对和绑定区别:
1)连接:通讯的基础,通讯数据为明文;
2)配对:配对仅仅是为了在连接的基础上加密(通讯数据经过加密为密文),提高蓝牙链路传输的安全性。不配对也能连接进行通信。
3)绑定:绑定是配对发起时的一个可选配置。把配对信息记录下来, 下次不用配对自动进入加密的连接;所以没在bonding列表里的设备不影响连接,照连不误
二、手表实际应用
1、nordic平台实现手表显示PIN码,手机输入PIN码方式
1)配置手表配对特性
参数配置函数:
ret_code_t pm_sec_params_set(ble_gap_sec_params_t * p_sec_params);
2)触发配对
方法一:
方法二:
添加HID服务,大部分手机都会触发加密;可能会有兼容性问题
方法三:
APP主动发起加密(理论可行,未验证)
方法四:
手表主动发起,但是会因为这个request命令,手机会先弹一次配对,再弹一次输入PIN码(附视频)