【BLE】 BLE安全管理 - SM层剖析(2)

简介: 上一章介绍了配对流程的第一阶段,剖析了配对第一阶段的配对请求包和配对响应包的各个字段的含义和使用。接下来就进入了ble配对的阶段二,在该阶段双方会根据阶段一中的配对信息选择合适的配对和认证方式,并且生成会后续链接加密的密钥。

  上一章介绍了配对流程的第一阶段,剖析了配对第一阶段的配对请求包和配对响应包的各个字段的含义和使用。接下来就进入了ble配对的阶段二,在该阶段双方会根据阶段一中的配对信息选择合适的配对和认证方式,并且生成会后续链接加密的密钥。

1. 配对整体流程

下面再回顾下整个配对流程框架:

在这里插入图片描述

配对是为了建立密钥,密钥用来加密连接,发布密钥是为了共享密钥,用于加密重新连接、验证签名和随机地址解析,上图是蓝牙配对的整个流程图。

配对有三个阶段,两个阶段是必须使用的,第三阶段可选:

阶段一: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 发布密钥

本章我们主要来讲解配对的阶段二
首先双方会配对阶段一中的配对信息选择配对方式,配对方式主要有两种legacy pairing 和 secure pairing。如果双方都支持secure pairing则选择secure pairing,否则选择legacy pairing配对方式。

2. legacy pairing

legacy pariing会在该阶段生成STK,这个是后续绑定和加密的关键。而STK则是通过TK来生成。
legacy pairing的认证方式有:Just_Work, Passkey Entry, OOB这三种方式。

配对流程分析:

  1. 机端和设备端分别生成一个随机数,LP_RAND_I 和 LP_RAND_R
  2. 双方协商TK值

    • Just Work 模式TK值默认为0,
    • Passkey Entry模式TK值即为输入的数值,
    • OOB模式TK值即为OOB交互的数值。
  3. 双方通过下面公式计算分别计算各自confirm值
LP_CONFIRM_I = c1(TK, LP_RAND_I, Pairing Request command, Pairing Response command, initiating device address type, initiating device address, responding device address type, responding device address)
LP_CONFIRM_R = c1(TK, LP_RAND_R, Pairing Request command, Pairing Response command, initiating device address type, initiating device address, responding device address type, responding device address)

​ c1可以近似的认为就是AES算法

  1. 主机将LP_CONFIRM_I发送给设备端, 设备端将LP_CONFIRM_R值发送给主机端
  2. 主机端收到后将自身的随机数LP_RAND_I 发送给设备端,设备端根据该随机数重新计算confirm值,如果计算结果和LP_CONFIRM_I不一致,则返回配对失败。如果结果一致,则将自身的LP_RAND_R值发送给主机端
  3. 主机端收到后,根据随机数LP_RAND_R 重新计算confirm值,如果计算结果和LP_CONFIRM_R不一致,则返回配对失败,否则返回配对成功,并计算STK,加密链路。

STK的计算公式如下:

STK = s1(TK, LP_RAND_R, LP_RAND_I)

下面分别是Just Works, passkey entry 和 OOB模式的配对流程图
在这里插入图片描述
Just Works 配对流程图, TK设置为0


passkey entry 配对流程图,TK为输入的pin code值

在这里插入图片描述
OOB配对流程图,TK为外部OOB数值

由上面三个流程图可以看出,上面三个流程最大的区别就是TK值的生成方式不同,其他没什么差异。

3. secure pairing配对流程

secure pairing与legacy paring不同, secure pairing在该阶段是直接生成LTK,而不是生成STK。 secure pairing在该阶段使用的算法是公钥算法ECDH算法,而不是对称加密算法AES算法,是具备防窃听攻击的。关于ECDH的介绍可以参考我之前的博客。
https://blog.csdn.net/hesuping/article/details/125760901?spm=1001.2014.3001.5501

3.1 交换公钥

  1. 主机端和设备端双方各自生成一个公钥和私钥,并将各自的公钥发给对方。
  2. 双方收到对方公钥后,分别验证收到的公钥是否是合法的,双方根据ECDH算法可以计算出相同的共享密钥DHKey。
DHKey = P256(SKa, PKb) = P256(SKb, PKa)

3.2 鉴权阶段1

进入配对验证阶段,该阶段有三种方式,分别是Just Works模式,passkey entry模式,Numeric Comparison 模式和OOB模式。

  1. 双方分别生成一个随机数Na和Nb
  2. 双方设置ra值和rb值,这个值很类似于legacy paring中的TK值

    • Just Works模式 和Numeric Comparison 模式的ra值和rb值分别设置为0,
    • passkey entry模式的ra值和rb值即为输入的数值
    • OOB模式的ra值和rb值为外部OOB传输的数值
  3. 双方根据算法计算confirm值,交换Na和Nb值, 设备端将计算的confirm值发送给主机端
  4. 主机端根据收到的Nb值重新计算confirm值,检查是否跟设备端的一致,如果不一致则返回失败,如果一致则配对成功。
  5. 如果是Numeric Comparison 模式还会弹出6个数字的配对码,并且有用户点击确认后,则配对成功,否则配对失败。

在这里插入图片描述
secure pairing配对 Just Works模式配对流程图
在这里插入图片描述
secure pairing配对 Passkey Entry模式配对流程图
在这里插入图片描述
secure pairing配对OOB模式配对流程图

由上面三个流程图可以看出,上面三个流程最大的区别就是ra和rb的值生成规则不同。

3.3 鉴权阶段2

该阶段主要是用来生成LTK,当然也会生成MACKey, LTK的生成和计算是依赖于上面生成的DHKey的, 流程如下:

在这里插入图片描述
在该阶段会互相交换MAC地址,生成LTK和MacKey,并且会生成Ea 和 Eb。
LTK就是用来生成后续加密链路的session key的

CTKD特性

额外补充一点,蓝牙支持一种交叉密钥派生的特性,简称CTKD,这种特性可以使用ble配对生成的LTK转化为BT配对的LinkKey,从而实现通过BLE的配对将其转化成BT的配对,这个特性用在蓝牙耳机、智能手表等产品上可以大幅提升产品的配对体验。当然也可以反过来,通过BT配对生成的LinkKey可以转化为BLE的LTK。 这个特性后面会专门写一篇来介绍。

T配对的LinkKey,从而实现通过BLE的配对将其转化成BT的配对,这个特性用在蓝牙耳机、智能手表等产品上可以大幅提升产品的配对体验。当然也可以反过来,通过BT配对生成的LinkKey可以转化为BLE的LTK。 这个特性后面会专门写一篇来介绍。

以上就是BLE配对流程的阶段二,在该阶段根据设备的配对特性,选择了不同的配对和鉴权方式,并且生成了对应的STK或者LTK,会后续链路的加密打下基础。

那后续的链路是如何加密的? 我们会在下个章节来剖析。

目录
相关文章
|
存储 安全 算法
【BLE】 BLE配对绑定保姆级介绍
实现蓝牙通信安全,除了paring/bonding这种底层方式,用户也可以在应用层去实现相同功能,两者从功能上和安全性上没有本质区别,只不过应用层自己实现的话,需要自己选择密码算法,密钥生成,密钥交换等,如果你不是这方面的专家,你的应用就有可能会存在安全漏洞。设备跟手机绑定成功后,手机再次重连这个设备时,就会自动跳过service discovery过程,换句话说,配对的时候手机会把设备所有服务和characteristic的handle保存下来,二次重连的时候,直接用以前保存的handle值去操作设备。
4589 1
【BLE】 BLE配对绑定保姆级介绍
蓝牙核心规范(V5.3)-深入详解之SCO和eSCO的异同
蓝牙核心规范(V5.3)-深入详解之SCO和eSCO的异同
2569 0
蓝牙核心规范(V5.3)-深入详解之SCO和eSCO的异同
|
编解码 安全 Android开发
低功耗蓝牙LE Audio Profile 详细介绍
2019年底,蓝牙官方组织SIG发布了蓝牙5.2版本的核心协议,其中增加了一个重要的特性---LE Audio。蓝牙的应用协议都是从应用层到物理层完整包含的协议,LE Audio也不例外。但蓝牙5.2核心协议仅仅定义了蓝牙LE的链路层传输Audio的方式,上层协议以及完整的LE Audio规范迟迟未出,近日,蓝牙官方组织释放了LE Audio较为完整的规范文档。
低功耗蓝牙LE Audio Profile 详细介绍
|
算法 网络协议 物联网
|
编解码 物联网
【BLE】蓝牙5.2 新特性 - LE Audio
连接同步通道是基于蓝牙连接的,首先要先建立ble连接基于时间同步的音频传输机制,可以实现多个设备的数据同步一个master可以建立多个CIG每个CIG可以最多31个CIS每个CIS里面最多有31个subevent链路层有LL_CIS_REQ 和 LL_CIS_RSP来创建CIS无连接的单向的,无应答机制广播通道,对接收者的数量没有限制不仅可以广播数据包还可以广播控制包每个big里面最多可以包含31个bis。
2708 1
【BLE】蓝牙5.2 新特性 - LE Audio
|
物联网 API 数据库
一文带你认识蓝牙 GATT 协议
正所谓磨刀不误砍柴工,我们有必要先深入的学习一下 GATT 以及 GATT 相关的一些知识。 本文我们就来了解一下 蓝牙 GATT 到底是什么?同时了解下我们使用的 ESP32-C3 GATT示例的工程的代码结构。
7679 4
一文带你认识蓝牙 GATT 协议
|
存储 安全 算法
【BLE】 BLE安全管理 - SM层剖析(3)
上一章介绍了配对流程的第二阶段,剖析了配对第二阶段的配对算法的选择和鉴权方式的选择。接下来就进入了ble配对的阶段三,在该阶段双方会根据生成的STK或LTK来生成其他的密钥,就是配对的密钥分配阶段。
636 0
【BLE】 BLE安全管理 - SM层剖析(3)
|
存储 安全 物联网
【BLE】 BLE安全管理 - SM层剖析(1)
SM层是为了在两个蓝牙设备之间建立一个安全可靠的数据传输通道, 主要的流程包括配对,绑定、鉴权、加密、消息完整性校验。配对:在两个设备之间创建一个或多个共享密钥的过程绑定:每一端保存配对中创建的密钥的行为,用于后续的连接,形成一个信任的设备对,绑定后的设备可以直接回连,而不用再走配对的流程。设备鉴权:根据两端设备的输入、输出能力和鉴权需求,选择不同的鉴权方式,验证两个设备有相同的密钥加密:对设备之间交换的数据进行加密的过程,用来保证数据链路的安全。消息完整性:对数据进行签名,并在另一端验证签名的过程。
1334 0
【BLE】 BLE安全管理 - SM层剖析(1)
|
算法 安全 物联网
一种更优雅的蓝牙配对技术 - Cross-transport key derivation (CTKD)
蓝牙CTKD是蓝牙4.2版本引入的一种交叉传输密钥派生的安全机制,全称 Cross-transport key derivation,主要用在蓝牙双模设备上,它可以跨越BLE和BT的边界,通过将BLE配对生成的LTK转化成BT配对的LinkKey,从而直接实现BT的配对,当然也可以通过BT配对生成的LinnkKey转化成BLE的LTK来实现BLE的配对,目前我们主要研究和使用前者。通过CTKD可以通过一次配对将BT和BLE两个链路都配对上,从而提升蓝牙双模设备的配对体验。
1780 0
一种更优雅的蓝牙配对技术 -  Cross-transport key derivation (CTKD)
|
物联网 开发工具 芯片
BLE蓝牙连接不稳定以及突然断开的原因和解决方法
在开发BLE的时候经常会遇到连接突然断开的情况,比如刚连接上就断开、连接成功之后传输数据随机断开(有时候连接很稳定不断开)。以上这些断开连接的情况或多或少都遇到过,很是让人头疼。当然咸鱼也不例外,也碰到过BLE突然断开的问题。咸鱼根据自己的经验做一些这方面的总结,希望能对大家有所帮助。
2141 0
BLE蓝牙连接不稳定以及突然断开的原因和解决方法