内容来自蓝牙核心规范V5.1 Vol3 PartH,若有错误之处,希望指出来
SM定义了管理配对、鉴权和加密的协议和行为,适用于LE-only单模设备或BR/EDR/LE双模设备。
0、蓝牙安全概述
蓝牙安全模型包括五个不同的安全特性:配对,绑定,设备鉴权,加密和消息完整性。
配对:创建一个或多个共享**的过程
绑定:保存配对中创建的**的行为,用于后续的连接,形成一个信任的设备对
设备鉴权:验证两个设备有相同的**
加密:消息保密性
消息完整性:防止消息伪造
随着时间的推移,蓝牙核心安全体系结构不断发展。最初,配对使用基于SAFER+的E21或E22算法,此版本的配对称为BR/EDR传统配对。设备鉴权最初是基于SAFER+的e1算法,加密使用派生自Massey-Rueppel算法的E0算法,而消息完整性没有相关规定。
2.1+EDR版本引入了安全简易配对(Secure Simple Pairing,SSP),它使用SHA-256、HMAC-SHA-256和P-192椭圆曲线等算法,并引入四个相关模型:Just Works,Numeric Comparison, Passkey Entry 和 Out-Of-Band ,设备鉴权和加密保持不变。
3.0 + HS版本支持了AMPs
4.0版本添加了LE的整个安全模型,BR/EDR和AMP安全不变
4.1版本添加了BR/EDR Secure Connections特性,SSP更新算法P-256椭圆曲线,设备鉴权使用算法HMAC-SHA-256和AES-CTR,Secure Connections添加了消息完整性
4.2版本添加了LE Secure Connections特性,LE配对更新算法AES-CMAC和P-256 elliptic curve,并改变数值比较关联模型,包括了使用Secure Connections生成**的规定
SSP的主要目的是为了简化配对过程,次要目的是保证和提高蓝牙无线技术安全性,SSP从用户的角度最大限度的提高安全性,同时最大限度的降低复杂性。
SSP有两个安全目标:防止被动偷听和中间人攻击,man-in-the-middle (MITM) attack(主动偷听),SSP使用四个关联模型,由两个设备的IO能力确定
BR/EDR SSP和LE SSP名字相同,但是提供的保护质量不同,LE设备**生成是Host执行的,BR/EDR设备是Controller执行的
一、介绍
SM定义了配对和发布**的方法,这些方法的协议和安全工具等,只适用于LE-only单模设备或BR/EDR/LE双模设备。
二、SM
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 **发布
图2.1中Initiator是配对请求发起者,Responder是响应者,第一阶段会交换鉴权要求,IO能力,用来确定第二阶段使用的下面哪种方法:
1、Just Works 直接连接
2、Numeric Comparison 数值比较(仅用于LE Secure Connections)
3、Passkey Entry 输入**
4、Out of Band(OOB) 带外(很少用到)
这四种方法、IO能力,鉴权要求、OOB鉴权数据等,会决定第二阶段中Legacy pairing和Secure Connections中生成**的算法
交换鉴权要求也会确定第二阶段是使用LE legacy pairing或者LE Secure Connections,作为一个可选项,第三阶段发布**,例如用于IRK(Identity Resolving Key)和身份地址信息等,不管第二阶段使用什么方法,第一阶段和第三阶段是完全相同的。
第三阶段的执行时,连接已经是加密的,加密方法可能是STK,LTK或者BR/EDR配对中的共享**,第一,二阶段执行时,连接可能是加密的也可能没有加密。
为了支持随机地址、配对和其他操作,SM定义了一个加密工具箱toolbox,如ah、c1、s1、f4、f5等,这里不做介绍,详情可以参考Core_V5.1 page2425
2、配对方法
配对开始后,如果Responder不支持配对或不能执行配对,会返回错误码是Pairing Not Supported的失败消息,配对特性交换用来交换IO能力,OOB鉴权数据可用性,鉴权要求,**大小要求和发布哪个**;其中IO能力,OOB鉴权数据可用性,鉴权要求决定第二阶段生成**的方法。
LE legacy pairing使用和产生两种个**:
1、Temporary Key (TK) 临时**,128位,用来生成STK
2、Short Term Key (STK) 一个128位的临时**,用来加密配对后的连接
LE Secure Connections使用和产生一个**:
Long Term Key (LTK) 一个128位的**,用来加密配对后的连接和随后的连接
鉴权要求是GAP设置的,包括绑定类型和中间人保护要求man-in-the-middle protection (MITM)
Initiator告诉Responder自己发送什么**和期望接收什么**,Responder回复Initiator发送的**和被期望的**
设备输入输出能力:
3、安全管理协议
Security Manager Protocol(SMP)用于配对和**发布
所有的SMP命令在SM信道上发送,是一个L2CAP固定信道,命令格式如下:
LSB:Least Significant Bit 最低有效位
MSB:Most Significant Bit 最高有效位
其中Code字段是一个字节,8位,表示命令的类型,data字段长度是变化的,取决于Code字段:
为了保证SMP正常运行,使用安全管理定时器,当一个L2CAP SMP命令插入发送队列,定时器重置,当配对过程完成,定时器停止,当定时器达到30秒,会认为失败,并通知本地高层。Initiator发送一个配对请求开启配对特性交换,Responder收到配对请求后,返回一个配对响应:
Pairing Confirm命令在配对特性交换成功之后发送,用于启动STK和LTE生成
Pairing Random命令用来发送一个随机数,用来计算Confirm Value,Confirm Value是在Pairing Confirm命令中发送的
表示配对失败,失败原因:
除了上述常用SMP数据包,其他未列出
LE设备可以从Slave发布**到Master,和从Master发布**到Slave,使用LE legacy和使用LE Secure Connections,发送的**种类和数量是不同的,具体发送哪些**参看蓝牙核心规范,这些在第三阶段发布的**用Pairing Request命令和Pairing Response命令的Key Distribution字段表示
下面列出一些常用场景的顺序图
更多场景顺序图参考蓝牙核心规范5.1