【BLE系列-第八篇】SMP完全解析——从配对流程到秘钥交换

目录

引言

一、SMP概述

1.1 安全目标

1.2 安全实现流程

1.3 核心概念和属性

二、报文格式

三、重要概念详解

3.1 MITM

3.2 配对方式

3.3 连接方式

3.3.1 传统连接

3.3.2 安全连接

3.4 临时密钥TK

3.5 配对方式和连接方式

四、配对方式

4.1 配对的发起

4.2 配对阶段一:特性交换与配对方法选择

4.3 配对阶段二(Phase 2):临时密钥生成

4.3.1 基于传统连接的配对流程

4.3.2 基于安全连接的配对流程

4.4 配对阶段三(Phase 3):加密启用与链路安全建立

4.5 章节回顾


引言

由于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名称用途发起方对应交互报文
0x01Pairing Request发起配对,交换配对参数主机/从机0x02 Pairing Response
0x02Pairing Response响应配对请求,确认配对参数主机/从机0x01 Pairing Request
0x03Pairing Confirm配对阶段1确认值交换主机/从机0x04 Pairing Random
0x04Pairing Random配对阶段1随机数交换,用于确认值验证主机/从机0x03 Pairing Confirm
0x05Pairing Failed配对失败通知主机/从机-
0x06Encrypt Info分发长期密钥(LTK)主机/从机0x07 Master Identification / 0x08 Identity Information
0x07Master Identification

分发 LTK 的标识信息(EDIV、Rand)

主机/从机0x06 Encrypt Info
0x08Identity Information分发设备标识密钥(IRK)主机/从机0x06 Encrypt Info
0x09Identity Address Information分发设备地址信息主机/从机-
0x0ASigning Info分发签名密钥(CSRK)主机/从机-
0x0BSecurity Request通知对方需要加密或MITM保护从机(唯一的单向报文)触发 0x01 Pairing Request
0x0CEncrypt Info (Additional)扩展密钥分发主机/从机-
0x0DMaster Identification (Additional)扩展主机密钥信息主机/从机-
0x0EIdentity 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
OOBOOB 通道传递通过 NFC/其他安全通道安全传递 TK

3.5 配对方式和连接方式

每种配对方法可选的连接方式如下:

配对方法可选连接方式说明
Just Works传统/安全连接传统配对模式下 TK=0,安全连接模式下通过 ECDH 生成共享密钥
Numeric Comparison安全连接仅 SC 支持,依赖公钥交换和数字比较确认身份
Passkey Entry传统/安全连接用户输入密码生成 TK,可用于传统配对或安全连接模式
OOB传统/安全连接通过 OOB 安全通道传递 TK,可用于传统配对或安全连接模式

注意:

前面说了传统连接的STK依赖于TK生成,但是配对方式Just WorksNumeric 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协议的意义在于:提供了标准提供框架,厂商可灵活适配,以平衡安全性、用户体验和设备性能。


想了解更多嵌入式技术知识,请点击阅读我的其他文章

烟花的文章链接集合-CSDN博客

如果你觉得内容对您有帮助,别忘了点赞、收藏和分享支持下哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值