蓝牙协议栈低功耗之安全管理协议层(SMP)

本文详细介绍了蓝牙协议栈中的安全管理协议(SMP),包括配对的三个阶段:特征交换、密钥生成和密钥分发,以及SecureConnections的加密机制。重点讲解了LTK、IRK和OOB数据在安全流程中的作用。
摘要由CSDN通过智能技术生成

Hello,我是无赖的猴子,一个蓝牙爱好者,分享蓝牙相关的知识,关注我,学习蓝牙:

蓝牙文章链接直达: 👇

1.profile层(待更新)

2.属性协议层(ATT)(待更新)

3.安全管理协议层(SMP)

4.通用访问协议层(GAP)(待更新)

5.通用属性协议层(GATT)(待更新)

6.逻辑链路控制和适配协议层(L2CAP)

7.主机控制器接口层(HCI)

8.链路层(LL)

9.低功耗蓝牙链路层数据格式汇总(一)

10.低功耗蓝牙链路层数据格式汇总(二)

11.蓝牙应用

SMP层

  • 今天我们要唠唠蓝牙协议栈的安全管理协议(Security Manage Protocol)。
    SMP层位于逻辑链路控制层之上(L2CAP),主要负责安全相关的工作,例如它定义了配对和密匙分发的过程,保证通信双方的隐私性。
  • 蓝牙的安全管理涉及到了Controller端和Host端的加密,如LL层中讲到了对蓝牙地址的安全管理:白名单、过滤、各种地址类型等,友友们可翻看这篇文章去温习一下。而SMP层则负责数据传输间的安全管理,包含配对、绑定、鉴权、加密等流程的管理。

在这里插入图片描述
SM层使用了密匙分发的方法来对每一设备进行安全管理,不同设备使用密匙区分,其中设备在分发密匙前需要进行配对的过程,所谓配对,即交换双方建立密匙的能力相关信息,我们知道,去银行
取钱时需要在键盘或屏幕上输入密码才能取钱,那么两个设备间是如何知道对方具有“键盘”或“屏幕”呢?这就是配对过程需要交换的信息,配对通常分为以下三个阶段:

阶段一:配对特征交换(即上面所说的交换信息。)
阶段二:STK(Short Term Key)或LTK(Long Term Key)的产生(根据配对模式而定)。
阶段三:相关密匙的分发(IRK、LTK、EDIV、SK)
以下是密匙分发图解:
在这里插入图片描述
接下来我们来仔细分析以下配对的过程:

阶段一

第一阶段,配对特征交换:
从图中看出,首先会发送Security_Request命令(可选),随后发送Pairing_Request请求,其中包含了设备的特征,PDU格式如下:

在这里插入图片描述
IO Capability
IO能力表示了自身设备支持哪些交换能力,包括显示屏和键盘输入。

valueDescription
0x00DisplayOnly
0x01DisplayYesNo
0x02KeyboardOnly
0x03NoInputNoOutput
0x04KeyboardDisplay

OOB data flag
OOB data flag是带外数据认证的标志,表示OOB数据的存在与否,而OOB数据是指除显示屏和键盘之外的认证方法,如NFC、指纹等。

valueDisplayOnly
0x00OOB Authentication data not present
0x01OOB Authentication data from remote device present

AuthReq
在这里插入图片描述
AuthReq的低2位表示配对时是否需要绑定。

Bonding_Flagsb1b0Bonding Type
00No Bonding
01Bonding

MITM则表示是否存在中间人加密保护,该字段设为1表明在加密时使用密码或数字比较,可防止第三方设备窃听信息。
SC是secure connect的缩写,表示配对使用哪种方法,为1时表示使用secure connect。否则使用传统安全配对。
Keypress在密码输入时使用,设置为一协议栈就会产生对应PDU并通知对方设备使用按键输入。
CT2表示是否支持h7加密功能函数,在传输中应设为1。
好了,关于AuthReq这个字节已经讲述完了,我们继续了解Security_Request相关数据包。

Maximum Encryption Key Size
此字段告知了对方设备密匙的长度大小,范围在7-16字节。
Initiator Key Distribution / Generation
此字段决定了在密匙分发阶段(即配对第三阶段)需要使用哪种密匙,定义如下:
在这里插入图片描述
在传统配对方法中,EncKey表示需要分发LTK;而在LE安全连接方法中此字段被忽略,EDIV和Rand也被设为0。IdKey是表明IRK密匙是否存在,IRK用于设别蓝牙地址类型和解析蓝牙地址。SignKey用于表示CSRK是否被分发,CSRK是签名信息密匙。LinkKey为一表明希望从LTK派生出Link Key,在低功耗蓝牙中应该表现此字段。
Responder Key Distribution
响应密匙的分发与上述初始密匙分发格式相同,此处不再重复描述。

而Secure Connections不同的是它在步骤1a和1b中包含了公共密匙的交换步骤:
在这里插入图片描述

阶段二

阶段一中的设备能力决定了阶段二中使用何种配对类型:
从图中可以看出,阶段二中提供了两种类型(Legacy paring)、(Secure connection),其中后者是蓝牙4.2以后的版本,这两者不同的是Legacy paring会生成STK(短期密匙)和TK(临时密匙),然后在最后阶段生成LTK,而Secure connection则直接生成LTK,Secure connection的加密算法使用椭圆加密算法,加密过程更加复杂,因此也更加安全。
且阶段一中的io能力交换决定了配对的方法:
• Just Works
• Numeric Comparison (Only for LE Secure Connections)(数字比较)
• Passkey Entry (密匙)
• Out Of Band (OOB)(带外,如NFC等)

Legacy paring

首先讲讲Legacy paring。如图所示,在just work 模式下,双方会各自生成一个随机数(LP_RAND_I、LP_RAND_R)和TK(TK即用户输入密码)随即使用c1加密函数生成LP_CONFIRM_和LP_CONFIRM_R,然后将confirm确认值发送至对方,经校验成功后使用s1函数加密生成短期密匙STK。
在这里插入图片描述

Pairing Confirm包的数据是为了产生传统配对(legacy pairing)的STK和安全配对(Secure
Connections)的LTK,
确认值数据包格式如下:
在这里插入图片描述

Pairing Random
随后便是配对随机数,在传统配对中,随机数和TK密匙通过加密函数c1生成LP_CONFIRM_I,也就是上述的确认值。
在这里插入图片描述
双方交换确认值后进行校对,校对完成则配对的第二阶段就结束了。

安全连接

Secure Connections较Legacy paring方式的不同点首先是加密算法的不同,传统配对采用AES-128加密,而安全连接配对采用非对称的椭圆曲线ECDH算法,加密过程更复杂,加密更安全。

交换公匙

在此之前,安全连接配对还会交换公匙PKa和PKb,用于生成DHKey,用于鉴权第二阶段。
在这里插入图片描述

鉴权阶段1

安全连接配对确认值(Pairing Confirm)的生成方式也与传统配对不同,Secure Connections使用Na和Nb计算出确认值。
在这里插入图片描述

鉴权阶段2

此阶段用到了上面交换公匙产生的DHKey,以及鉴权阶段的Na和Nb确认值,使用一个加密函数f5生成了MacKey和LTK
公式:MacKey || LTK = f5(DHKey,Na,Nb,A,B)。其中A,B是两设备的地址。

阶段三

经过阶段二的加密操作后,阶段三开始分配对应的密匙。
在这里插入图片描述
分配的密匙 IRK (Identity Resolving Key)用于给可解析地址解密,增加蓝牙传输安全性;
而CSRK(Connection Signature Resolving Key)用于对连接中的数据进行签名。
EDIV和Rand则用于生成LTK长期密匙。这里注意其实leagecy paring最后也是会生成LTK的,只不过在第二阶段leagecy使用STK短期密匙加密链路,在第三阶段才生成LTK用于后续的链路加密。
下面是两种配对方法生成密匙的步骤:

LE legacy pairing:

by the Peripheral
2. EDIV and Rand by the Peripheral
3. IRK by the Peripheral
4. BD_ADDR by the Peripheral
5. CSRK by the Peripheral
6. LTK by the Central
7. EDIV and Rand by the Central
8. IRK by the Central
9. BD_ADDR by the Central
10. CSRK by the Central

LE Secure Connections
  1. IRK by the Peripheral
  2. BD_ADDR by the Peripheral
  3. CSRK by the Peripheral
  4. IRK by the Central
  5. BD_ADDR by the Central
  6. CSRK by the Central
交叉密匙特性

顾名思义就是蓝牙协议提供了一种可以让低功耗蓝牙生成的LTK转化为BT蓝牙产生的LinkKey,实现低功耗蓝牙配对传华为传统蓝牙配对。

配对PDU类型

Pairing Public Key
.此PDU仅用于安全连接配对方法。
在这里插入图片描述
Pairing DHKey Check
此消息用于传输使用f6生成的128位DHKey检查值(Ea/Eb)。这些都是使用DHKey生成的确认值。发起者和响应者都会使用此消息。此PDU仅用于LE安全连接。
在这里插入图片描述
Keypress Notification
这个pdu是用于在配对时拥有键盘输入能力时,告知键盘输入的键值。
在这里插入图片描述

Pairing Failed
当然,当双方发生意外导致配对失败时,也应该返回对应的错误码,定义如下:
在这里插入图片描述

在这里插入图片描述
最后这张图阐明了配对类型间的区别:
在这里插入图片描述

密码工具箱
密码工具箱则说明了在三个加密阶段中使用的加密函数,感兴趣的可以去core 5.4 p1549去详细了解一下。

  • 24
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值