蓝牙学习笔记之SMP协议(十四)

目录

写在前面

SM规范简述

安全管理器

加密工具

配对流程

安全属性

IO功能

加密密钥大小

配对算法

低功耗蓝牙安全

密钥和值的定义

分发密钥的生成

密钥分配

安全管理器会话协议

介绍

命令格式


写在前面

安全规范协议,主要是描述LE控制器设备配对、认证、加密等过程进行规定,同时也对相关算法进行了说明。

低功耗蓝牙的安全管理经历了几个阶段,LE传统配对方式和安全连接。

这篇协议基本上是参考蓝牙核心协v5.0议进行的翻译,并且只选取了我认为重要的部分,如果需要深入详细的了解,请自行参考核心协议。如有不当的地方欢迎指正。

SM规范简述

安全管理器(Security Manager,SM)定义了一种协议和行为,用于管理LE-only或BR/EDR/LE设备之间的配对、身份验证和加密。

安全管理器(SM)使用密钥分发方法在无线通信中执行身份验证和加密功能。这意味着每个设备都会生成并控制它分发的密钥,而其他任何设备都不会影响这些密钥的生成。

执行配对以建立可以用于加密链接的密钥。然后执行传输特定密钥分发以共享密钥,该密钥可用于在将来重新连接中加密链路,验证签名数据和随机地址解析。

配对是一个三阶段的过程。前两个阶段始终使用,然后可以选择传输特定的密钥分发阶段

•阶段1:配对功能交换

•阶段2(LE传统配对):短期密钥(Short Term Key,STK)生成

•阶段2(LE安全连接):长期密钥(Long Term Key,LTK)生成

•阶段3:传输特定密钥分发

蓝牙学习笔记之SMP协议(十四)_第1张图片

设备应首先在配对功能交换中交换认证要求和IO功能,以确定在阶段2中应使用以下哪种方法:

  • Just Works
  • Numeric Comparison(仅适用于LE安全连接)
  • Passkey Entry
  • Out Of Band(OOB)

从配对功能交换中还确定是使用LE安全连接还是LE传统配对。

然后可以执行阶段3以分发传输特定密钥,例如身份解析密钥(IRK)值和身份地址信息,这一阶段是可选的。无论阶段2中使用的方法如何,阶段1和阶段3都是相同的。

第3阶段只能在通过使用以下方法加密的链接上执行:

  • 使用LE传统配对时,第2阶段时生成的STK
  • 使用LE安全连接时,在阶段2中生成LTK
  • 使用BR / EDR配对生成的共享链接密钥

安全管理器

加密工具

为了支持随机寻址,配对和其他操作,安全管理规范引入了一些加密功能的工具。

定义了以下加密函数:

  • ah用于创建在随机地址创建和解析中使用的24位哈希值。

定义以下加密函数以支持LE遗留配对过程:

  • c1用于生成配对过程中使用的确认值。
  • s1用于在配对过程中生成STK。

定义以下加密函数以支持LE安全连接配对过程:

  • f4用于在配对过程中生成确认值。
  • f5用于在配对过程中生成LTK和MacKey。
  • f6用于在配对过程中的身份验证阶段2期间生成校验值。
  • g2用于在配对过程中的身份验证阶段1期间生成6位数字比较值。
  • h6用于从安全连接派生的BR / EDR链路密钥生成LE LTK,用于从安全连接派生的LE LTK生成BR / EDR链路密钥。
  • h7用于生成中间密钥,同时从安全连接派生的BR / EDR链路密钥生成LE LTK,从安全连接派生的LE LTK生成BR / EDR链路密钥。

加密函数ah,c1和s1构建是根据安全函数e(参考FIPS-197)。

加密函数f4,f5,f6,g2, h6和h7的构建是根据安全功能AES-CMAC(参考RFC-4493)。

配对流程

当配对开始时,配对功能交换应由发起设备启动。如果响应设备不支持配对或无法执行配对,则响应设备将使用配对失败消息进行响应,错误代码为“不支持配对”。

配对功能交换用于交换IO功能,OOB身份验证数据可用性,身份验证要求,密钥大小要求以及传输要分发的特定密钥。IO功能,OOB身份验证数据可用性和身份验证要求用于确定阶段2中使用的密钥生成方法。

所有LE经典配对方法都会生成2个密钥:

  • 临时密钥(TK):配对过程中使用的128位临时密钥,用于生成STK
  • 短期密钥(STK):用于加密配对后的连接的128位临时密钥。

LE Secure Connections配对方法会生成1个密钥:

  • 长期密钥(LTK):128位密钥,用于在配对和后续连接之后加密连接。

安全属性

SM提供的安全属性分为以下几类:

  • LE安全连接配对
  • 经过身份验证的MITM保护
  • 未经身份验证的MITM保护
  • 无安全要求

IO功能

组合设备的输入和输出功能组成其IO功能,定义的输入/输出功能如下表:

蓝牙学习笔记之SMP协议(十四)_第2张图片

蓝牙学习笔记之SMP协议(十四)_第3张图片

各个输入和输出功能映射到该设备的单个IO功能,该功能用于配对功能交换。IO功能映射如下表:

蓝牙学习笔记之SMP协议(十四)_第4张图片

 

加密密钥大小

每个设备应具有最大和最小加密密钥长度参数,这些参数定义了八位字节中允许的加密密钥的最大和最小大小。最大和最小加密密钥长度参数应在7个八位位组(56位)和16个八位位组(128位)之间

配对算法

在阶段1中交换的信息用于选择在阶段2中使用哪种密钥生成方法。

1) 密钥生成方法选择

在LE遗留配对中,如果两个设备都具有带外认证数据,则在选择配对方法时优先使用带外配对方法。否则,应使用设备的IO功能来确定配对方法。

在LE安全连接配对中,如果一个或两个设备具有带外认证数据,则在选择配对方法时优先使用带外配对方法。否则,应使用设备的IO功能来确定配对方法。

如果两个设备都未设置MITM选项,则应忽略IO功能并使用Just Works关联模型。

当有至少有一方不支持安全连接时,即使用LE经典配对时,STK的生成方法参考下图。当双方都支持安全连接时,与经典配对生成方法不同点在于,当有至少有一方支持OOB时,就优先使用OOB。

蓝牙学习笔记之SMP协议(十四)_第5张图片

当双方都不支持OBB时,应使用IO功能确定配对方法,对照表如下:

蓝牙学习笔记之SMP协议(十四)_第6张图片

蓝牙学习笔记之SMP协议(十四)_第7张图片

 

 

2) LE 传统配对的阶段2

在经典配对的第二阶段,双方的设备都会用c1函数生成confirm值,并将confirm和rand(用于生成confirm)发给对端设备,双方收到对方rand之后利用c1重新生成confirm并于对方发过来的confirm对比,匹配则通过认证。认证通过则用s1函数生成STK

3)​​​​​​​ ​​​​​​​LE 安全连接配对的阶段2

1.公钥交换

最初,每个设备生成其自己的椭圆曲线Diffie-Hellman(ECDH)公钥 - 私钥对。通过发起设备将其公钥发送到接收设备来启动配对。响应设备用自己的公钥回复这个公钥。

2.认证阶段1

认证阶段1可以使用just work,数字比较,密钥输入和带外的方式,其过程分别如下图所示

  • just work或数字比较

蓝牙学习笔记之SMP协议(十四)_第8张图片

  • 密钥输入

蓝牙学习笔记之SMP协议(十四)_第9张图片

  • 带外​​​​​​​

    蓝牙学习笔记之SMP协议(十四)_第10张图片

3.认证阶段2

在认证的阶段1完成之后,利用阶段1交换的数据和计算出的LTK生成认证值,具体流程如下图:

蓝牙学习笔记之SMP协议(十四)_第11张图片

 

低功耗蓝牙安全

安全性应由设备中master方的安全管理器发起。从设备可以请求主设备启动配对或其他安全过程。

密钥分发阶段中的从设备为主设备提供密钥,因此可以加密重新连接,可以解析其随机地址,或者主设备可以验证来自从设备的签名数据。

主设备还可以向从设备提供密钥,因此如果角色被反转,主机的随机地址可以被解析,或者从设备可以验证来自主设备的签名数据,则可以加密重新连接。

​​​​​​​密钥和值的定义

LE安全性使用以下密钥和值进行加密,签名和随机寻址:

1.  身份解析密钥(IRK)是用于生成和解析随机地址的128位密钥。

2.  连接签名解析密钥(CSRK)是一个128位密钥,用于在接收设备上签名数据和验证签名。

3.  长期密钥(LTK)是128位密钥,用于为加密连接而生成的会话密钥。

4.  加密分集器(EDIV)是16位存储值,用于识别在LE遗留配对期间分配的LTK。每次分配唯一的LTK时都会生成一个新的EDIV。

5.  随机数(Rand)是64位存储值,用于标识在LE遗留配对期间分配的LTK。每次分配唯一的LTK时都会生成一个新的Rand。

​​​​​​​分发密钥的生成

可以使用任何生成正在分发的密钥的方法,这些密钥导致密钥具有128位熵,因为生成方法在从属设备外部是不可见的。密钥不应仅从分发给主设备的信息生成,也不应仅从从设备外部可见的信息生成。

这些密钥包括IRK,CSRK,LTK,EDIV,Rand,BR/EDR Link Key

密钥分配

在LE传统配对中,从设备可以向主站分配以密钥:

  • LTK,EDIV和Rand
  •  IRK
  • CSRK

主设备可以向从设备分配以下密钥:

  • LTK,EDIV和Rand
  • IRK
  • CSRK

在LE安全连接中,主设备和从设备可以分发以下密钥:

•  IRK

•  CSRK

安全管理器会话协议

介绍

安全管理器协议(SMP)用于配对和传输特定密钥分发。

所有SMP命令都通过安全管理器通道发送,该通道是L2CAP固定通道,BR/EDR是0x0007,LE是0x0006。

​​​​​​​命令格式

所有SMP命令的一般格式如下图所示:

蓝牙学习笔记之SMP协议(十四)_第12张图片

Data字段的长度可变。code字段确定data字段的格式。Code字段长度为一个字节,用于标识命令的类型。下表列出了蓝牙规范定义的代码:

蓝牙学习笔记之SMP协议(十四)_第13张图片

上面每一个定义规范中都有详细的描述,具体参考核心协议,Vol 3,Part H,第3.5和3.6节,下面我举两个例子简单的说一下,作为参考:

1)Pairing Request

发起方通过向回应设备发送配对请求命令来启动配对功能交换。配对请求命令如下图所示:

蓝牙学习笔记之SMP协议(十四)_第14张图片

其各个字段的意义如下:

  • IO Capability:定义了交换IO功能时使用的值

蓝牙学习笔记之SMP协议(十四)_第15张图片

  • OOB data flag:指示OOB认证数据是否可用

蓝牙学习笔记之SMP协议(十四)_第16张图片

  • AuthReq:表示STK和LTK以及GAP绑定信息的请求安全属性

蓝牙学习笔记之SMP协议(十四)_第17张图片

 

MITM:如果设备正在请求MITM保护,则设置为1,否则应设置为0

SC:如果设备支持LE安全连接配对,则应设置为1,否则应设置为0

Keypress:仅在Passkey Entry协议中使用。当双方将该字段设置为1时,应使用Keypress Notification命令发送Keypress通知。

CT2:设置为1以指示支持h7功能

RFU:未使用

  • Maximum Encryption Key Size:最大加密密钥大小
  • Initiator Key Distribution / Generation:发起者密钥分配/生成

指示发起方请求在传输特定密钥分发阶段,分配/生成或使用哪些密钥

  • Responder Key Distribution / Generation:响应者密钥分配/生成

指示发起方在传输特定密钥分发阶段期间,请求响应者分发/生成或使用哪些密钥

2)Pairing Respone

如果响应设备允许配对,则响应设备使用该命令在从发起设备接收到配对请求命令之后完成配对功能交换。配对响应命令如下图:

蓝牙学习笔记之SMP协议(十四)_第18张图片

       字段定义基本与request包类似,下面两个描述略有不同:

  • Initiator Key Distribution / Generation:发起者密钥分配/生成

定义了发起者在传输特定密钥分发阶段应分配和使用的密钥

  • Responder Key Distribution / Generation:响应者密钥分配/生成

定义了响应者在传输特定密钥分发阶段应分配和使用的密钥

其他的指令类似,请自行参考核心规范。

规范的附录中也有完成的配对流程图,在附录C中,有兴趣的可以自行了解。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值