目录
4.4 配对阶段三(Phase 3):加密启用与链路安全建立
引言
由于SMP本身比较复杂,准备多花几篇来写,本文是SMP协议的第一篇,主要是SMP概述和配对流程详解,作为第一篇主要是打基础。
一、SMP概述
1.1 安全目标
SMP(Security Manager Protocol)是BLE安全机制的核心,用于在主机(central)与从机(peripheral)之间建立安全通信,保障以下三个安全目标:
- 机密性:防止未授权设备获取通信内容
- 真实性:确认通信双方身份可信
- 完整性:确保通信内容未被篡改
1.2 安全实现流程
SMP主要通过两步实现安全:
配对(Pairing):配对的意义在于建立临时信任。主机发起配对请求,从机响应。根据主机和从机的输入/输出能力(I/O能力)选择配对方法。生成临时密钥(STK,Short Term Key)用于当前连接加密
绑定(Bonding):绑定的意义在于实现长期安全,它将长期密钥(LTK,Long Term Key以及其他身份密钥(IRK, CSRK)安全地分发给对方并存储,以便在下次重连时快速恢复加密。
1.3 核心概念和属性
输入/输出能力(I/O能力):决定配对方法选择,如显示、键盘或无显示输入
安全属性:是否需要防中间人攻击(MITM),是否启用链路加密
安全模式:决定加密和签名策略
二、报文格式
SMP(Security Manager Protocol)运行在L2CAP信道CID=0x0006上(可参考《L2CAP详解》),用于主机(central)与从机(peripheral)之间安全信息交换。首先我们再来看一眼LL的帧格式:
对照上图讲解,其实就是在将 Info(至多247字节)字段拆分成了以下两个部分:
- Code:1字节字段,用来标识不同的指令
- Info:至多246字节字节,不同的Code对应的Info格式不一致,具体以协议规定为准
1)SMP Code定义如下
其中LE-U代表此逻辑链路适用于BLE。
2)各报文类型概述如下
Code | 名称 | 用途 | 发起方 | 对应交互报文 |
---|---|---|---|---|
0x01 | Pairing Request | 发起配对,交换配对参数 | 主机/从机 | 0x02 Pairing Response |
0x02 | Pairing Response | 响应配对请求,确认配对参数 | 主机/从机 | 0x01 Pairing Request |
0x03 | Pairing Confirm | 配对阶段1确认值交换 | 主机/从机 | 0x04 Pairing Random |
0x04 | Pairing Random | 配对阶段1随机数交换,用于确认值验证 | 主机/从机 | 0x03 Pairing Confirm |
0x05 | Pairing Failed | 配对失败通知 | 主机/从机 | - |
0x06 | Encrypt Info | 分发长期密钥(LTK) | 主机/从机 | 0x07 Master Identification / 0x08 Identity Information |
0x07 | Master Identification | 分发 LTK 的标识信息(EDIV、Rand) | 主机/从机 | 0x06 Encrypt Info |
0x08 | Identity Information | 分发设备标识密钥(IRK) | 主机/从机 | 0x06 Encrypt Info |
0x09 | Identity Address Information | 分发设备地址信息 | 主机/从机 | - |
0x0A | Signing Info | 分发签名密钥(CSRK) | 主机/从机 | - |
0x0B | Security Request | 通知对方需要加密或MITM保护 | 从机(唯一的单向报文) | 触发 0x01 Pairing Request |
0x0C | Encrypt Info (Additional) | 扩展密钥分发 | 主机/从机 | - |
0x0D | Master Identification (Additional) | 扩展主机密钥信息 | 主机/从机 | - |
0x0E | Identity Information (Additional) | 扩展身份信息 | 主机/从机 | - |
注意:
由于SMP报文类型的定义分类多且繁杂,详细定义还请自行参考协议。以下根据Ver 6.0版本给出参考路径及协议参考章节:
下载链接: Bluetooth Core Specification
参考章节:Vol 3: Host > Part H:SECURITY MANAGER SPECIFICATION > 3.5 Pairing methods;Vol 3: Host > Part H:SECURITY MANAGER SPECIFICATION > 3.6 Security in Bluetooth Low Energy
三、重要概念详解
3.1 MITM
MITM(即Man In The Middle),很形象的比喻,即站在通信双方中间的人,MITM可能会伪造发送方的信息。防MITM的关键在于加密通信且安全的交换密钥。
3.2 配对方式
配对方式使用场景介绍如下:
字段 | 说明 |
---|---|
Just Works | 无需用户交互。当使用传统连接时无法提供防MITM,适用于显示或输入能力受限的设备(如音箱、传感器)。 |
Numeric Comparison | 双方设备会显示一个6位数字,用户需要确认两边的数字是否一致。确认后即可完成配对。 |
Passkey Entry | 要求用户输入一个6位数字,需要在有键盘的设备(如手机)上输入对端设备(如手表)屏幕上显示的6位密码 |
Out-of-Band (OOB) | 使用另一种通信方式(如NFC)来交换配对所需的安全信息,安全性取决于该OOB通道本身的安全性 |
3.3 连接方式
3.3.1 传统连接
安全性依赖于临时密钥(TK)的强度。使用临时密钥TK生成短期密钥STK,再通过密钥分发获得LTK。当使用配对模式为Just Works或者Numeric Comparison时需要注意:
- Just Works:TK=0,若使用传统连接,几乎无法防MITM,安全性较弱。
- Numeric Comparison:TK = 0,但不支持传统连接。
3.3.2 安全连接
安全性基于ECDH公钥密码学,不依赖TK的强度。基于ECDH公钥交换生成共享DHKey,直接派生 LTK。即使 TK=0,也能保证唯一的会话密钥,大幅提升安全性。同时支持Numeric Comparison等更强的MITM防护手段,是 BLE 4.2 之后的推荐方式。
3.4 临时密钥TK
1)TK的作用
TK(即Temp Key),TK主要在传统配对中用于生成 STK。在安全连接的Passkey Entry方式中,用户输入的密码在流程中也扮演着类似TK的角色,用于身份认证,但不参与最终密钥的生成。
2)TK的来源
不同配对方式下,TK的来源如下:
配对方法 | TK 来源 | 说明 |
---|---|---|
Just Works | 固定为 0 | 由于主机和从机没有共同外部输入方式,因此没有办法生成共同的随机TK,只能使用默认TK 0 |
Numeric Comparison | 固定为 0(Numeric Comparison使用安全连接方式,TK为0也没有关系) | 由于主机和从机没有共同外部输入方式,因此没有办法生成共同的随机TK,只能使用默认TK 0 |
Passkey Entry | 用户输入的6位密码扩展为 128为TK | 用户输入 6 位数字,双方可以推导出相同 TK |
OOB | OOB 通道传递 | 通过 NFC/其他安全通道安全传递 TK |
3.5 配对方式和连接方式
每种配对方法可选的连接方式如下:
配对方法 | 可选连接方式 | 说明 |
---|---|---|
Just Works | 传统/安全连接 | 传统配对模式下 TK=0,安全连接模式下通过 ECDH 生成共享密钥 |
Numeric Comparison | 安全连接 | 仅 SC 支持,依赖公钥交换和数字比较确认身份 |
Passkey Entry | 传统/安全连接 | 用户输入密码生成 TK,可用于传统配对或安全连接模式 |
OOB | 传统/安全连接 | 通过 OOB 安全通道传递 TK,可用于传统配对或安全连接模式 |
注意:
前面说了传统连接的STK依赖于TK生成,但是配对方式Just Works和Numeric Comparison又无法生成有效的非零LTK。那为什么Just Works可以支持传统连接而Numeric Comparison?因为Just Works就是给不需要加密的直连用的!Just Works方式建立的加密连接,因其临时密钥(TK)固定为0,导致生成的加密密钥可以被任何窃听者计算出来,因此无法提供任何防中间人攻击(MITM)的保护。它仅能防止被动窃听,适用于对安全要求不高的场景。
四、配对方式
配对是两个BLE设备相互验证身份并创建共享密钥(临时密钥STK)的过程,其目的是为了建立一个加密的链路,以便安全地进行后续的通信(如分发长期密钥)。SMP协议定义了三个清晰的阶段来完成一次配对。
4.1 配对的发起
配对通常由由主机或从机加密需求触发::
- 主机:主机可能出于自身策略,主动希望加密链路。它会直接向从机发送Pairing Request(Code:0x01)命令来发起配对。
- 从机:当其持有的某些属性被主机访问,且这些特性的权限(如读、写需要加密)要求安全连接时,从机会向主机发送Security Request(0x0B)命令。主机收到后,会向从机发送Pairing Request(Code:0x01)命令来发起配对。
注意:
- Pairing Request和紧随其后的Pairing Response是配对过程中最重要的两个报文,它们包含了决定后续流程的所有信息。
- Security Request(0x0B) 是唯一一个只能由从机单向发送的报文,用于邀请主机发起发起配对请求Pairing Request(Code:0x01)。
4.2 配对阶段一:特性交换与配对方法选择
这个阶段的核心目标就是确认配对方法以及秘钥类型,这个过程依赖于Pairing Request(0x01)和Pairing Response(0x02)报文,这两个报文的字段结构完全相同。以下报文内容进行说明:
1)报文字段
由图可知共六个配置字段:
字段 | 说明 |
---|---|
IO Capability | |
OOB Data Flag | ![]() |
AuthReq | bit0~1:是否需要绑定,1代表需要,0代表不需要,其他值保留不使用。 bit2:是否要求中间人攻击保护(MITM),如果置1,配对过程需要验证双方身份。 bit3:指示本设备是否支持安全连接(LE Secure Connections)。置1代表支持,0代表不支持。最终是否使用安全连接,取决于发起方和响应方是否都支持。 bit4:代表是否支持按键通知(KyPress,KP),置1代表支持 bit5:表示是否支持h7功能 bit6~7:预留 |
Max Encryption Key Size | 协商的最大加密密钥长度 |
Initiator Key Dist | 加密连接发起者的秘钥类型 bit0:置1代表使用LTK(Short Term Key) bit1:置1代表使用IRK(Identity Resolving Key) bit2:置1代表使用CSRK(Connection Signature Resolving Key) bit3~7:保留 |
Responder Key Dist | 加密连接应答方的秘钥类型 bit0:置1代表使用LTK(Short Term Key) bit1:置1代表使用IRK(Identity Resolving Key) bit2:置1代表使用CSRK(Connection Signature Resolving Key) bit3~7:保留 |
2)规则矩阵
配对方法和密钥生成方法都是由主机和从机根据双方的IO Capability、OOB Data Flag和AuthReq字段,通过一定规则(规则 矩阵)自动协商得出。规则请参考协议:
参考章节:Vol 3: Host > Part H:SECURITY MANAGER SPECIFICATION > 2 SECURITY MANAGER > 2.3.5 Pairing algorithms > 2.3.5.1 Selecting key generation method
4.3 配对阶段二(Phase 2):临时密钥生成
第二阶段的目标是生成用于加密当前连接的短期密钥STK(Short Term Key)。且此阶段的流程根据前一阶段协商的安全连接方式(Secure Connection)而截然不同。
4.3.1 基于传统连接的配对流程
1)生成临时密钥TK
从机和主机基于共同输入值来生成临时密钥TK。
注意:
共同输入值基于主机或者从机的键盘输入,所以对于配对方法Numeric Comparison,由于双方都没有键盘,共同值无法输入,因此不能使用传统配对。至于Just Work,这个支持传统连接实际上是一种妥协(具体见3.4章节)。
2)交换确认值和随机数
双方使用TK、自身和对方的随机数等参数进行计算,生成一个确认值,如下。
- 主机计算:Mconfirm = f(TK, Mrand)
- 从机计算:Sconfirm = f(TK, Srand)
主机给从机发送Mconfirm和Mrand,从机给主机发送Sconfirm和Srand。
3)验证TK
主机和从机交换随机数和确认值后,相互验证对方之前发送的确认值是否正确。即:
- 主机计算:Sconfirm = f(TK, Srand)
- 从机计算:Mconfirm = f(TK, Mrand)
两者各自判断计算结构是否成立,如果均成立则验证成功。如果验证失败,配对过程终止。
4)生成STK
验证通过后,双方使用TK和交换的随机数作为输入,通过加密函数生成相同的128位STK。
STK = f(TK, Mrand, Srand)
4.3.2 基于安全连接的配对流程
1)交换公钥并生成共享密钥
双方生成各自的ECDH公钥-私钥对,并交换公钥。双方使用自己的私钥和对方的公钥,计算出相同的共享密钥共享密钥DHKey。生成共享密钥的流程请参考:【密码学-第三篇】椭圆曲线密码学(ECC)核心原理:从加法器到密钥交换
2)认证与确认
使用第一阶段选择的配对方法来认证交换的公钥,这个过程会生成确认值并进行交换验证。
3)生成LTK
在安全连接中,不再生成STK。验证通过后,双方直接使用共享密钥DHKey和其他参数派生生成长期密钥(LTK)。此LTK将立即被用于加密当前的连接,因此安全连接将配对和绑定合并到了一个流程中
4.4 配对阶段三(Phase 3):加密启用与链路安全建立
无论使用哪种配对方式,在第三阶段结束时,双方都已拥有了一个共享的密钥。
1)加密链路
主机会使用上一阶段生成的密钥、以及一个随机数和其他参数生成一个加密参数,并发送给从机(Slave)。
2)启动加密
双方控制器使用这些参数开始对链路层的数据包进行AES-CCM加密/解密。后续传输的所有数据都将被加密。
3)密钥分发(可选)
在加密通道建立后,双方可以根据之前在Pairing Request(0x01)和Pairing Response(0x02)中协商的密钥类型,安全地交换LTK。
4.5 章节回顾
BLE 标准设计提供了多种配对方法(Just Works、Passkey Entry、Numeric Comparison、OOB)和连接方式,作为安全密钥交换和加密通信的示例分支。实际上各家厂商通常会根据产品需求进行“魔改”或增强,包括修改密钥生成流程、增加身份验证步骤或自定义加密算法。
但是BLE SMP协议的意义在于:提供了标准提供框架,厂商可灵活适配,以平衡安全性、用户体验和设备性能。
想了解更多嵌入式技术知识,请点击阅读我的其他文章
如果你觉得内容对您有帮助,别忘了点赞、收藏和分享支持下哦