【BLE】 BLE安全管理 - SM层剖析(1)

本文涉及的产品
云解析 DNS,旗舰版 1个月
密钥管理服务KMS,1000个密钥,100个凭据,1个月
全局流量管理 GTM,标准版 1个月
简介: SM层是为了在两个蓝牙设备之间建立一个安全可靠的数据传输通道, 主要的流程包括配对,绑定、鉴权、加密、消息完整性校验。配对:在两个设备之间创建一个或多个共享密钥的过程绑定:每一端保存配对中创建的密钥的行为,用于后续的连接,形成一个信任的设备对,绑定后的设备可以直接回连,而不用再走配对的流程。设备鉴权:根据两端设备的输入、输出能力和鉴权需求,选择不同的鉴权方式,验证两个设备有相同的密钥加密:对设备之间交换的数据进行加密的过程,用来保证数据链路的安全。消息完整性:对数据进行签名,并在另一端验证签名的过程。

  蓝牙的安全管理分为control端也就是LL层的安全管理和host端的安全管理, LL层的安全机制主要包括白名单管理,私有可解析地址管理,以及SM管理中的链路加解密等。host端的安全管理主要是SM层的管理,包括配对、绑定、鉴权、加密等流程的管理。本章主要介绍host端的SM管理

SM层

SM层简介

SM层是为了在两个蓝牙设备之间建立一个安全可靠的数据传输通道, 主要的流程包括配对,绑定、鉴权、加密、消息完整性校验。

配对:在两个设备之间创建一个或多个共享密钥的过程

绑定:每一端保存配对中创建的密钥的行为,用于后续的连接,形成一个信任的设备对,绑定后的设备可以直接回连,而不用再走配对的流程。

设备鉴权:根据两端设备的输入、输出能力和鉴权需求,选择不同的鉴权方式,验证两个设备有相同的密钥

加密:对设备之间交换的数据进行加密的过程,用来保证数据链路的安全。

消息完整性:对数据进行签名,并在另一端验证签名的过程。

配对流程简介

LE配对流程.

配对是为了建立密钥,密钥用来加密连接,发布密钥是为了共享密钥,用于加密重新连接、验证签名和随机地址解析,上图是蓝牙配对的整个流程图。

配对有三个阶段,两个阶段是必须使用的,第三阶段可选:

阶段一: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 发布密钥

上图中左边的initiator代表发起配对的一端,通常代表手机, 右边的responder代表响应配对请求的一端,通常代表设备端。

配对阶段一

  在双方建立连接之后,设备端可能会发起security request请求,这个数据包是可选的,主机端收到这个数据后,如果密钥已经存在则加密或刷新密钥,如果没有密钥初始化配对流程,当然也可能拒绝,这个在后面会详细讲解。

  Master端会发送配对请求 Pairing_Request命令,Slaver端收到后会回复配对响应包Pairing_Response的命令,当然如果设备不支持配对,则会返回“Pairing Not Supported”错误码 。这两条命令是让双方会交换自身的IO能力和鉴权需求,以及需要传输的密钥,例如是否支持输入,是否支持显示,是否需要防止中间人攻击,是否支持安全配对,是否支持OOB,是否需要下发LTK等等,通过这些来决定在配对阶段二的时候选择哪种配对和鉴权方法,以及配对阶段三下发和生成哪些密钥。
本章节主要来剖析阶段一中配对请求数据包中的每个字段的含义以及使用。

下面看下Pairing_Request数据包的内容
pair_request

  • Code: 数据包命令字, 0x01代表配对请求,0x02代表配对响应包
  • IO能力:表示设备的输入和输出能力,具体数值如下图:

IO能力

  • OOB数据标志位:表示是否支持使用外部通信方式来交换配对过程中使用的一些信息。0x00表示不支持OOB,0x01表示支持OOB

OOB_data_flag

  • AuthReq:鉴权请求 表示设备是否需要绑定,是否需要支持防止中间人攻击,是否支持安全配对等

鉴权Flag

- **BF**字段是binding flag的缩写,表示设备是否支持绑定

绑定是在配对发生后交换长期密钥,并存储这些密钥以供以后使用——它是在设备之间创建永久安全性。配对是允许发生结合的机制。该字段为0x00表示不支持绑定,0x01表示支持绑定。

- **MITM** 是“中间人”的缩写。如果设备请求 MITM 保护,则该标志设置为1,否则置0。

- **SC** 字段是secure connect的缩写,表示安全配对,设置为 1 以请求 LE 安全连接配对。可能产生的配对机制是,如果两个设备都支持 LE 安全连接,则使用 LE 安全连接,否则使用 LE 传统配对。所以这个标志是确定第 2 阶段配对方法的指标。

- **KP**字段是keypress,仅在 Passkey Entry 协议中使用,在其他协议中被忽略。Passkey Entry 协议是 Legacy Pairing 和 Secure Connection 的典型配对方法。
  • Maximum Encryption Key Size 设备支持的最大加密密钥大小,大小在7 - 16个字节
  • Initiator Key Distribution 发起者密钥分配,该字段决定了在配对阶段三中需要下发的密钥有哪些,例如LTK,IRK,CSRK,EDIV and Rand等等,这些密钥的含义和使用会在下章节介绍。

LE_Key_Distribution

具体该字段的含义如下:

- **Enckey**: 该字段表示是否需要生成LTK。
  1. 在传统配对中,0x01表示会下发LTK用于链路的加密, 0x00表示不会下发LTK,
  2. 在安全配对LESC中,由于在配对阶段二就会生成LTK,所以该字段会被忽略。
  3. 而在传统蓝牙中,该字段表示是否需要通过经典蓝牙的Linkey来得到LTK。
- **idKey**: 表示是否下发IRK,IRK是用来解析私有可解析地址的。0x01表示需要下发IRK,0x00表示不需要下发IRK。
- **SignKey**: 表示是否需要下发CSRK,0x01表示需要下发CSRK,0x00表示不需要下发CSRK。
- **LinkKey**:表示是否需要通过LTK来生成经典蓝牙需要的LinkKey,这个能力需要支持安全配对LESC才可以,如果Initiator和Responder两端设备都支持LESC,并且该字段都置1,则会生成LinkKey。 如果设备不支持安全配对,则该字段需要置0,并且会被忽略。

  • Responder Key Distribution 响应者密钥分配,格式与上面发起者密钥分配相同,不再次介绍了。

BLE的SM常用密钥介绍

常用的密钥定义简单介绍下,具体的使用会在后面章节详细介绍。
  • Identity Resolving Key (IRK):用于生成和解析私有解析地址用的,IRK的生成有很多可选方式,并不固定,而且其Key Size也不规定为7-16 bytes。一个Master从Slave那里得到Slave的IRK,就可以解析Slave的random address;一个Slave从Master那里得到Master的IRK,就可以解析Master的random address了。
  • Connection Signature Resolving Key (CSRK):用于对数据进行签名已经验证签名数据,CSRK的生成也有很多可选方式,并不固定,而且其Key Size也不规定为7-16 bytes。一个设备得到另一个设备的CSRK后,就可以对从另一个设备那接收到的数据进行签名验证了。
  • Long Term Key (LTK):加密链路用,后面用来传输数据的session key就是通过LTK生成的,传统配对是在阶段三通过STK生成的LTK,安全配对是在阶段二生成的LTK。

Encrypted Diversifier (EDIV):在LE legacy pairing过程中,用于识别LTK分发;
Random Number (Rand):在LE legacy pairing过程中,用于识别LTK分发。

以上就是配对请求包Piaring Request请求包内容的分析,配对响应包pairing Responses数据包与请求包内容几乎一样,就不另行分析了。

Initiator和Responder双方交换完自己的IO能力后,接下来就是根据上面交换的配对信息,选择不同的配对方式和鉴权方式,这些就是配对阶段二需要做的工作。

配对鉴权简介

在详细剖析阶段二流程之前,先介绍下配对和鉴权的常用方式。

鉴权方式:

  • Just works 不鉴权 不需要用户来参与,这种方式不能防止中间人攻击。
  • Numeric Comparison 这种方式是需要两个设备格子生成6个数据,并显示出来,用户比较两个设备上的数字后,进行确认。这种鉴权方式是蓝牙4.2后才支持的,需要设备双方需要都支持安全配对(LESC),并且设备至少需要有显示6位数字的能力和输出yes or no的能力。
  • Passkey Entry 这种方式是由两端设备分别输入配对码的方式进行鉴权的,这种也是蓝牙最早最传统的一种鉴权方式,有两种操作方法:

    1. 两个设备都有输入能力,用户分别在两个设备上输入相同的6个数字,接下来的配对过程会分别校验对端设备的输入来鉴权设备。
    2. 一个设备随机生成并显示6位数字,用户记下这个数字后,在另一个设备上输入相同的数字,此时SMP协议会将输入的数字传输给对端,来校验数字是否正确,以达到鉴权的目的。
  • Out Of Band (OOB) OOB方式是通过外部的其他方式来进行鉴权,例如通过NFC,二维码或者WIFI之类的来鉴权。

配对方式:

配对方式主要有传统配对legacy pairing,和安全配对secure pairing。安全配对方式是蓝牙4.2后支持的配对方式,上面的Numeric Comparison鉴权方式也必须依赖于安全配对。

传统配对legacy pairing和安全配对secure pairing的比较:

legacy pairing(传统配对) secure pairing(安全配对)
生成密钥不同 生成两个密钥TK和STK 生成一个密钥LTK
鉴权模式 不支持Numeric Comparison模式 支持Numeric Comparison模式
窃听者攻击 配对过程不能防止窃听者攻击 配对过程可以防止窃听者攻击
OOB模式 双方都支持获取到对方的OOB信息后,才可以使用OOB模式 至少有一方获取到对方的OOB信息后,就可以使用OOB模式

传统配对方式中主要生成TK和STK
Temporary Key (TK):一个 128-bit的临时密钥,用来生成STK, 例如在Passkey Entry模式中,输入的数字即可近似认为是TK。
STK:一个 128-bit的临时密钥,用来加密接下来的配对流

安全配对生成LTK
Long Term Key (LTK):一个128_bit的密钥用来加密配对数据流和后续的连接。

传统配对不能防止窃听者攻击,因为他使用的是AES对称加密算法。对称加密算法AES的介绍可以看下我另一篇博客对称加密算法
安全配对可以防止窃听者攻击,因为它使用的是ECDH非对称加密算法。非对称加密算法ECDH的介绍可以看下我另一篇博客非对称加密算法

鉴权模式选择

鉴权模式的选择就是根据配对阶段一中设备双方交换了各自的配对信息来决定的,优先级为OOB > MITM > IO能力
如果支持OOB则使用OOB模式,否则会检查MITM标志位,看是否需要防止中间人攻击,最后才会看双方的IO能力。如下图:

legacy_pairing鉴权模式选择

secure_pairing鉴权模式选择

通过上面两图的差异,也可以看出传统配对是双方都支持OOB才可以使用OOB模式,安全配对模式则是只要其中的一方支持OOB,就可以使用OOB模式。

IO_map

上图便是蓝牙双方能力映射图,通过这个双方就可以协商使用合适的配对方法来完成配对。

  在选择好了合适的配对和鉴权方式后,接下来就是BLE配对的阶段二 ,在该阶段会通过配对流程生成STK或者LTK,该阶段不同的配对和鉴权方式导致情况较多,会专门在下章节详细介绍。

目录
相关文章
|
物联网
低功耗蓝牙(BLE)设备常用的4种角色
对于主从设备的其它说法,大家需要了解一下。对于Central和Peripheral有多种说法,上面我们说的是主从,还有客户端/服务端,中心设备/外围设备,我们这里简单介绍一下,客户端(Client)对应上面的Central,接收数据;服务端(Server)对应上面的额Peripheral,提供数据,这个需要和网站的服务器/客户端区别一下;中心设备(Central)和外围设备(Peripheral),其实上面叫中心设备和外围设备。上面主设备(Master)和从设备(Slave)应该对应主/从。这个根据个人习惯,主/从用的比较多,如果在蓝牙中提到这些知道就行了。
758 0
|
存储 安全 算法
【BLE】 BLE配对绑定保姆级介绍
实现蓝牙通信安全,除了paring/bonding这种底层方式,用户也可以在应用层去实现相同功能,两者从功能上和安全性上没有本质区别,只不过应用层自己实现的话,需要自己选择密码算法,密钥生成,密钥交换等,如果你不是这方面的专家,你的应用就有可能会存在安全漏洞。设备跟手机绑定成功后,手机再次重连这个设备时,就会自动跳过service discovery过程,换句话说,配对的时候手机会把设备所有服务和characteristic的handle保存下来,二次重连的时候,直接用以前保存的handle值去操作设备。
3063 1
【BLE】 BLE配对绑定保姆级介绍
|
6月前
|
物联网 Java 数据安全/隐私保护
App Inventor 2 低功耗蓝牙(BLE) 硬件接入、数据通信及IO控制
低功耗蓝牙(BLE)以低功耗、低成本、开发简便逐渐被广泛应用,本文主要介绍一款较为通用、价格低廉的BLE设备从零开始如何利用App Inventor 2开发一款自己专属的手机蓝牙App应用。 本文主要通过一款常见的BLE硬件接入控制,介绍硬件接入App Inventor 2 的通用方法,类似的硬件接入都是大同小异的。
361 1
|
算法 安全 物联网
【BLE】 BLE安全管理 - SM层剖析(2)
上一章介绍了配对流程的第一阶段,剖析了配对第一阶段的配对请求包和配对响应包的各个字段的含义和使用。接下来就进入了ble配对的阶段二,在该阶段双方会根据阶段一中的配对信息选择合适的配对和认证方式,并且生成会后续链接加密的密钥。
345 1
【BLE】 BLE安全管理 - SM层剖析(2)
|
物联网 UED
【BLE】蓝牙BLE传输到底有多快?
我们在开发蓝牙产品的时候,经常会被问到,这个文件传输用蓝牙可以做吗?多长时间可以传完?蓝牙的传输速率是多大?很多人对蓝牙的传输速率可能只有一个大概的概念几KB?几十KB?下面就来看一下蓝牙的传输速率到底有多快?众所周知,对于无线连接,链路维护和数据包冗余会产生一定的传输成本,以保持蓝牙连接的健壮和高效。因此,连接的低功耗蓝牙数据吞吐量的公式为:使用这个公式,我们将在建立连接时计算从 4.0 到 5 的数据吞吐量。
888 0
【BLE】蓝牙BLE传输到底有多快?
|
存储 安全 算法
【BLE】 BLE安全管理 - SM层剖析(3)
上一章介绍了配对流程的第二阶段,剖析了配对第二阶段的配对算法的选择和鉴权方式的选择。接下来就进入了ble配对的阶段三,在该阶段双方会根据生成的STK或LTK来生成其他的密钥,就是配对的密钥分配阶段。
409 0
【BLE】 BLE安全管理 - SM层剖析(3)
|
物联网 芯片
|
物联网
ZigBee TI ZStack CC2530 4.16 绑定通信00-总
(配套源码、软件、开发板等资源,可移步博客同名QQ群/TB店铺:拿破仑940911) (配套源码、软件、开发板等资源,可移步博客同名QQ群/TB店铺:拿破仑940911)
1013 0