蓝牙的安全管理分为control端也就是LL层的安全管理和host端的安全管理, LL层的安全机制主要包括白名单管理,私有可解析地址管理,以及SM管理中的链路加解密等。host端的安全管理主要是SM层的管理,包括配对、绑定、鉴权、加密等流程的管理。本章主要介绍host端的SM管理
SM层是为了在两个蓝牙设备之间建立一个安全可靠的数据传输通道, 主要的流程包括配对,绑定、鉴权、加密、消息完整性校验。
配对:在两个设备之间创建一个或多个共享密钥的过程
绑定:每一端保存配对中创建的密钥的行为,用于后续的连接,形成一个信任的设备对,绑定后的设备可以直接回连,而不用再走配对的流程。
设备鉴权:根据两端设备的输入、输出能力和鉴权需求,选择不同的鉴权方式,验证两个设备有相同的密钥
加密:对设备之间交换的数据进行加密的过程,用来保证数据链路的安全。
消息完整性:对数据进行签名,并在另一端验证签名的过程。
配对是为了建立密钥,密钥用来加密连接,发布密钥是为了共享密钥,用于加密重新连接、验证签名和随机地址解析,上图是蓝牙配对的整个流程图。
配对有三个阶段,两个阶段是必须使用的,第三阶段可选:
阶段一:Pairing Feature Exchange 交换配对特性
阶段二:(LE legacy pairing): Short Term Key (STK) Generation 传统配对方式,生成STK
阶段二:(LE Secure Connections): Long Term Key (LTK) Generation 安全配对方式, 生成LTK
阶段三:Transport Specific Key Distribution 发布密钥
上图中左边的initiator代表发起配对的一端,通常代表手机, 右边的responder代表响应配对请求的一端,通常代表设备端。
在双方建立连接之后,设备端可能会发起security request请求,这个数据包是可选的,主机端收到这个数据后,如果密钥已经存在则加密或刷新密钥,如果没有密钥初始化配对流程,当然也可能拒绝,这个在后面会详细讲解。
Master端会发送配对请求 Pairing_Request命令,Slaver端收到后会回复配对响应包Pairing_Response的命令,当然如果设备不支持配对,则会返回“Pairing Not Supported”错误码 。这两条命令是让双方会交换自身的IO能力和鉴权需求,以及需要传输的密钥,例如是否支持输入,是否支持显示,是否需要防止中间人攻击,是否支持安全配对,是否支持OOB,是否需要下发LTK等等,通过这些来决定在配对阶段二的时候选择哪种配对和鉴权方法,以及配对阶段三下发和生成哪些密钥。本章节主要来剖析阶段一中配对请求数据包中的每个字段的含义以及使用。
下面看下Pairing_Request数据包的内容
绑定是在配对发生后交换长期密钥,并存储这些密钥以供以后使用——它是在设备之间创建永久安全性。配对是允许发生结合的机制。该字段为0x00表示不支持绑定,0x01表示支持绑定。
- **MITM** 是“中间人”的缩写。如果设备请求 MITM 保护,则该标志设置为1,否则置0。
- **SC** 字段是secure connect的缩写,表示安全配对,设置为 1 以请求 LE 安全连接配对。可能产生的配对机制是,如果两个设备都支持 LE 安全连接,则使用 LE 安全连接,否则使用 LE 传统配对。所以这个标志是确定第 2 阶段配对方法的指标。
- **KP**字段是keypress,仅在 Passkey Entry 协议中使用,在其他协议中被忽略。Passkey Entry 协议是 Legacy Pairing 和 Secure Connection 的典型配对方法。
BLE的SM常用密钥介绍 常用的密钥定义简单介绍下,具体的使用会在后面章节详细介绍。
**Encrypted Diversifier (EDIV)**:在LE legacy pairing过程中,用于识别LTK分发;**Random Number (Rand)**:在LE legacy pairing过程中,用于识别LTK分发。
以上就是配对请求包Piaring Request请求包内容的分析,配对响应包pairing Responses数据包与请求包内容几乎一样,就不另行分析了。
Initiator和Responder双方交换完自己的IO能力后,接下来就是根据上面交换的配对信息,选择不同的配对方式和鉴权方式,这些就是配对阶段二需要做的工作。
在详细剖析阶段二流程之前,先介绍下配对和鉴权的常用方式。
配对方式主要有传统配对legacy pairing,和安全配对secure pairing。安全配对方式是蓝牙4.2后支持的配对方式,上面的Numeric Comparison鉴权方式也必须依赖于安全配对。
传统配对legacy pairing和安全配对secure pairing的比较:
legacy pairing(传统配对) | secure pairing(安全配对) | |
---|---|---|
生成密钥不同 | 生成两个密钥TK和STK | 生成一个密钥LTK |
鉴权模式 | 不支持Numeric Comparison模式 | 支持Numeric Comparison模式 |
窃听者攻击 | 配对过程不能防止窃听者攻击 | 配对过程可以防止窃听者攻击 |
OOB模式 | 双方都支持获取到对方的OOB信息后,才可以使用OOB模式 | 至少有一方获取到对方的OOB信息后,就可以使用OOB模式 |
传统配对方式中主要生成TK和STK:Temporary Key (TK):一个 128-bit的临时密钥,用来生成STK, 例如在Passkey Entry模式中,输入的数字即可近似认为是TK。STK:一个 128-bit的临时密钥,用来加密接下来的配对流
安全配对生成LTK:Long Term Key (LTK):一个128_bit的密钥用来加密配对数据流和后续的连接。
传统配对不能防止窃听者攻击,因为他使用的是AES对称加密算法。对称加密算法AES的介绍可以看下我另一篇博客对称加密算法。安全配对可以防止窃听者攻击,因为它使用的是ECDH非对称加密算法。非对称加密算法ECDH的介绍可以看下我另一篇博客非对称加密算法。
鉴权模式的选择就是根据配对阶段一中设备双方交换了各自的配对信息来决定的,优先级为OOB > MITM > IO能力 如果支持OOB则使用OOB模式,否则会检查MITM标志位,看是否需要防止中间人攻击,最后才会看双方的IO能力。如下图:
通过上面两图的差异,也可以看出传统配对是双方都支持OOB才可以使用OOB模式,安全配对模式则是只要其中的一方支持OOB,就可以使用OOB模式。
上图便是蓝牙双方能力映射图,通过这个双方就可以协商使用合适的配对方法来完成配对。
在选择好了合适的配对和鉴权方式后,接下来就是BLE配对的阶段二 ,在该阶段会通过配对流程生成STK或者LTK,该阶段不同的配对和鉴权方式导致情况较多,会专门在下章节详细介绍。