协议发布时间 协议版本
2016/12 Bluetooth 5
2014/12 Bluetooth 4.2
2013/12 Bluetooth 4.1
2010/6 Bluetooth 4.0

Bluetooth 5 新功能

新增功能 协议层 描述
Slot Availability Mask (SAM) 物理层 标记设备的收发时间块。其他蓝牙设备获取该信息即可避免在该设备忙碌时争抢信道资源,这有利于在信道资源有限的情况下维持多设备同时工作,这个特性仅适用于经典蓝牙。
2 Mbit/s PHY for LE 物理层 2Mbit/s比特率的物理层。以前的物理层都是1Mbit/s比特率,这个特性从物理层提升了传输速率。
LE Long Range 物理层 该特性由多个方面共同实现。最高20dBm的发射功率(以前是10dBm),编码型物理层最低-82dBm接收灵敏度(以前是-70dBm),8位前向纠错编码FEC(以前没有),这些新特性共同实现了更远的通信距离,官方宣称能比过去提高4倍传输距离,实际测试高达750米。
High Duty Cycle Non-Connectable Advertising 链路层 在协议文档中未找到针对该特性的描述,从网络上也未获取有用信息。根据一个已有的类似概念“High Duty Cycle Connectable Advertising”,可以推测这个广播事件类型就是广播间隔更短,并且限制广播总时间,超时后将停止广播。
LE Advertising Extensions 链路层 扩展广播。以前广播仅仅使用37/38/39三个广播信道,现在可以使用扩展广播包,在0-36数据信道上传输,以前广播数据最大为31字节,现在扩展广播的数据长度最大可达255字节,所以官方宣称广播数据容量扩展8倍。
LE Channel Selection Algorithm #2 物理层 一种新的跳频算法。以前的算法仅用于连接数据的跳频,现在数据信道支持传输广播数据,以前的跳频算会产生性能问题,新的跳频算法可以用于连接数据通信的跳频和周期广播数据的跳频。

Bluetooth 4.2 新功能

新增功能 协议层 描述
LE Data Packet Length Extension 链路层 扩展链路层PDU长度。以前LL PDU的Payload最大长度是27字节,对应着L2CAP的MTU最大值23,该功能将LL Payload长度扩展到251字节,最大L2CAP MTU可达512,此时一个512资字节的L2CAP数据包需要分段传给链路层。这个功能显著的提升了传输速率,理论上最大可提升3倍(270kbps -> 800kbps)。
LE Secure Connections 安全管理器层 采用椭圆曲线加密算法加密配对过程中生成的密钥,确保密钥在配对过程中不被窃听,这个特性产生一种新的配对方法:LE安全连接配对。这个特性扩展了传统的配对方法和模式,配对过程能够防护窃听和MITM威胁。
Link Layer Privacy 链路层 采用可解析的私有地址来解决隐私问题。这种地址是一种随机地址,并且定时自动更新。
Link Layer Extended Scanner Filter Policies 链路层 在协议文档中未找到针对该特性的描述。

Bluetooth 4.1 新功能

这个版本有以下新功能:

  • Mobile Wireless Service Coexistence Signaling
  • Train Nudging and Generalized Interlaced Scanning
  • Low Duty Cycle Directed Advertising
  • L2CAP Connection Oriented and Dedicated Channels with Credit Based Flow Control
  • Dual Mode and Topology
  • LE Link Layer Topology
  • 802.11n PAL
  • Audio Architecture Updates for Wide Band Speech
  • Fast Data Advertising Interval
  • Limited Discovery Time

这些更新与BLE关系不大。

(完)

通用访问规范GAP(Generic Access Profile)是BLE设备内部功能对外的接口层,它规定了三个方面:GAP角色、模式和规程、安全问题。

GAP层将设备分为四种角色,分别是外围设备,中央设备,播报设备和观察设备。这些设备围绕着广播和连接的差异性而区分,外围设备和播报设备对外发出广播数据,中央设备和观察设备扫描外部广播数据,播报设备和观察设备通常不建立连接,而外围设备和中央设备可以建立连接。

围绕着广播和连接,GAP层定义了许多不同的广播模式和连接模式,在不同模式下的操作称为“规程”。

对于安全问题,GAP层提供了BLE安全管理器的一些列参数设置接口,包括:设备的安全模式、IO能力、安全级别和密钥长度等参数。设备需要根据实际能力设置GAP的安全管理器参数,从而使用合适的配对方法。

GAP层可以与L2CAP建立联系,设置自定义的MTU值。

1. GAP角色

GAP层定义了四种角色:

  • 外围设备(Peripheral)
  • 中央设备(Central)
  • 播报设备(Broadcaster)
  • 观察设备(Observer)

外围设备可以发送广播数据和接收连接请求,进而建立连接,对应着链路层的广播状态。

中央设备扫描广播数据和发送连接请求,进而建立连接,对应着链路层的扫描状态或发起状态。

播报设备可以发送广播和接收扫描请求,通常不建立连接,对应着链路层的广播状态。

观察设备可以扫描广播和发起扫描请求,通常不建立连接,对应着链路层的扫描状态。

由于链路层支持同时拥有多个状态机,GAP层也支持一个设备同时具有多个GAP角色,比如在一个连接中充当中央设备,同时对外发出广播充当外围设备。

2.用户接口

GAP定义了几个与用户操作密切相关的参数:设备地址,设备名,PIN码和设备外观。

2.1 设备地址

设备地址在协议栈内部指BD_ADDR,在用户界面显示为“Bluetooth Device Address”。

设备地址为一个6字节的整形数组成,可以用冒号作为分隔符,比如00:0C:3E:3A:4B:69。

在用户界面,设备地址以自然顺序显示,而内部的BD_ADDR则以逆序保存,对于上述地址,BD_ADDR[0]等于0x69而不是0x00。

设备地址分为共有地址和随机地址,随机地址分为静态随机地址和私有地址,私有地址进一步分为可解析的私有地址和不可解析的私有地址。常用的地址为共有地址和可解析的私有地址两种类型。

关于设备地址类型分析,参见链路层的文章介绍。

2.2 设备名

设备名称仅起识别设备的作用,在用户界面显示为“Bluetooth Device Name”。

设备名最长可达248个字节,但是对端设备可能并不能显示这么长的名称。

设备名支持UTF-8编码,因此设备名可以使用中文。

2.3 PIN码

PIN码指两个设备配对时使用的passkey密码,在用户界面显示为“Bluetooth Passkey”。

PIN码为6位十进制整形数,因此它的有效范围为000000-999999(0x00000000 – 0x000F423F)。使用时必须显示全部6位数字,包括前导0。

2.4 设备外观

设备外观仅起识辅助别设备的作用,在用户界面显示为一个图标或一个字符串。

设备外观为一个2字节数,扫描设备可以通过设备外观值为设备分配一个合适的图标或描述。

3. 模式和规程

模式表示一种工作状态,规程是针对模式实现的一套操作方法。模式和规程成对出现,GAP规定了五种模式和规程,如下:

模式 规程
Broadcast Mode Observer Procedure
Discovery Mode Discovery Procedure
Connection Mode Connection Procedure
Bonding Mode Bonding Procedure
Periodic Advertising Mode Periodic Advertising Procedure

3.1 播报模式和观察规程

播报模式并不等同于普通的广播状态。

在播报模式下,设备在广播事件中发送不可连接的广播数据,播报设备可以响应外部的扫描请求。

播报设备的广播数据格式与普通的广播数据相同,但是它不设置LE Limited Discoverable Mode和LE General Discoverable Mode这两个标志位,即播报设备是Non-discovery设备,这意味着中央设备扫描到该广播数据,应该选择忽略。

观察规程用于监听播报设备的广播数据和扫描响应数据,也可以监听普通广播设备。

3.2 可发现模式和发现规程

可发现模式分为三种,如下:

可发现模式 描述
Non-Discoverable mode 不可发现模式,扫描设备应该选择忽略这类广播数据。
Limited Discoverable mode 有限发现模式,广播数据仅工作有限时间内是可被发现的。
General Discoverable mode 普通发现模式,没有额外限制。

有限发现模式将广播数据的LE Limited Discoverable Mode位置为1,普通发现模式将广播数据的LE General Discoverable Mode位置为1,如果这两个标志位均不设置,就是不可发现模式。

不可发现模式的广播数据与其他两种模式相同,所以其广播数据仍然能够被扫描设备正确读取,但由于没有设置相应的标志位,扫描设备在解析广播数据时应该尊重其不愿意被发现的意图,主动忽略该广播数据。

使用观察规程的观察设备,则不会忽略不可发现模式的广播数据。

有限发现模式通常用于用户指定的行为让设备临时进入可发现状态,可发现状态持续时间为T_GAP[lim_adv_timeout]。

普通发现模式是默认模式,它没有时间限制。

发现规程分为两种,如下:

发现规程 描述
Limited Discovery Procedure 有限发现规程,仅能发现有限发现模式的广播数据。
General Discovery Procedure 普通发现规程,没有额外限制。

有限发现规程,仅处理有限发现模式下的广播数据,包括设备地址和广播数据,忽略其他发现模式下的广播设备。

常规发现规程,能普通发现模式和有限发现模式下的广播数据。

此外还有一种发现规程,专用于发现设备名称,如下:

发现规程 描述
Name Discovery Procedure 设备名发现规程,用于发现广播设备的设备名称。

设备名发现规程,可以发现普通发现模式和有限发现模式下的广播设备名称。

发现设备名称的步骤如下:

  1. 建立连接
  2. 读取GATT中的名字特征值

3.3 可连接模式和连接规程

可连接模式分三种,如下:

可连接模式 描述
Non-Connectable Mode 不可连接模式,无法与其他设备建立连接。
Directed Connectable Mode 定向可连接模式,可以与指定的中央设备建立连接。
Undirected Connectable Mode 非定向可连接模式,可以与任何中央设备建立连接,这是默认的可连接模式。

而相关的连接规程则由四种,如下:

连接规程 描述
Auto Connection Establishment Procedure 自动连接建立规程,利用中央设备的设备地址白名单,一旦地址匹配就自动建立连接。
General Connection Establishment Procedure 普通连接建立规程,这是默认的连接规程,没有额外条件。
Selective Connection Establishment Procedure 可选连接建立规程,利用中央设备的设备地址白名单,只有地址匹配的设备才能建立连接。
Direct Connection Establishment Procedure 定向连接建立规程,与指定地址的外围设备建立连接。

此外,还有两个与连接相关的规程,如下:

规程 描述
Connection Parameter Update Procedure 连接参数更新规程,更新连接参数信息。
Terminate Connection Procedure 终止连接规程,终止当前连接。

3.4 可绑定模式和绑定规程

可绑定模式分为:

可绑定模式 描述
Non-Bondable mode 不可绑定模式,设备不支持配对操作,在配对请求命令中清除Bonding_Flags标志位。
Bondable mode 可绑定模式,设备将设置认证请求命令中的Bonding_Flags标志位,并且保存绑定信息。

两个未绑定的设备,在访问需要绑定权限的数据时,执行绑定规程。

3.5 周期广播模式和周期广播规程

周期广播模式分为:

模式 描述
Periodic Advertising Synchronizability mode 周期广播同步模式,发送周期广播事件的同步信息,适用于播报设备,
Periodic Advertising mode 周期广播模式,发送周期广播数据,适用于播报设备

周期广播规程为:

规程 描述
Periodic Advertising Synchronization Establishment procedure 周期广播同步建立规程,接收周期广播事件的同步信息并同步周期广播事件,适用于观察设备。

3.6 安全模式和认证规程

共有两种安全模式:

安全模式 描述
LE Security mode 1 安全模式1,使用认证信息保证安全。
LE Security mode 2 安全模式2,使用数字签名保证安全。

安全模式1下有四种安全级别:

  1. No security (No authentication and no encryption)
  2. Unauthenticated pairing with encryption
  3. Authenticated pairing with encryption
  4. Authenticated LE Secure Connections

四种安全级别围绕着认证和加密进行,安全级别依次增加,第1种安全级别没有认证和加密, 第2种安全基本提供未认证的加密,第3、4种安全级别能够提供认证和加密。

安全模式2下有两种安全级别:

  1. Unauthenticated pairing with data signing
  2. Authenticated pairing with data signing

假如设备同时要求加密和数字签名,将视认证需求选择合适的安全模式,比如需要认证则选择模式1.3,不需要认证则选择模式1.2,如果需要安全连接则选择模式1.4。

共有四种安全规程,如下:

规程 描述 适用安全模式
Authentication procedure 认证规程,执行认证和加密操作。 安全模式1
Authorization procedure 授权规程,用户行为确认是否为某个操作提供授权。 安全模式1
Connection data signing procedure 连接数据签名规程,在未加密的连接中传输认证的数据。 安全模式2
Authenticate signed data procedure 认证已签名的数据规程,校验带有前面的数据是否有效。 安全模式2
Encryption procedure 加密规程,对连接和数据进行加密。 安全模式1

3.7 隐私规程

隐私与私有地址有密切关系,跟私有地址相关的规程如下:

规程 描述
Non-resolvable private address generation procedure 不可解析私有地址生成规程
Resolvable private address generation procedure 可解析私有地址生成规程
Resolvable private address resolution procedure 可解析私有地址解析规程

4. 广播包

广播包和扫描响应使用相同的数据格式,如下:

GAP_Adv_Packet_Format

一个广播包由多个AD Structure组成,传统广播包的最大长度为31字节,扩展广播包的最大长度为255字节,未占用的数据则补零。

一个AD Structure中包含三个元素:长度、广播数据类型和广播数据。

其中长度指广播数据类型加上广播数据的总长度,广播数据类型决定了广播数据的属性,可以代表设备名、设备地址或服务的UUID。完整的广播数据类型可以在官方网站检索(链接)。

动态的广播数据适合放在广播包中发送,静态的广播数据适合放在扫描响应包中发送。

7. GAP特征项

每个BLE设备的GATT均包含必要的GAP服务项,GAP服务项包含以下特征项:

特征项 UUID 描述
Device Name 0x2A00 读取设备名称
Appearance 0x2A01 读取设备外观
Peripheral Preferred Connection Parameters 0x2A04 读取期望的连接参数
Central Address Resolution 0x2AA6 中央设备支持解析地址,供外围设备读取以确定中央设备能否使用地址解析,仅在使能了隐私功能时使用,否则应删除
Resolvable Private Address Only 0x2AC9 设备仅使用可解析的随机地址,供对端设备读取以确定该设备在绑定后是否仅使用可解析的随机地址,仅在使能了隐私功能时使用,否则应删除

(完)

安全管理(Security Manager)定义了设备间的配对过程。

配对过程包括了配对信息交换、生成密钥和交换密钥三个步骤。具有不同的输入输出能力的设备将采用不同的配对方式,两个设备完成配对将加密连接,产生LTK、IRK、CSRK等密钥,这些密钥将支持加密、隐私、签名等安全特性。

安全管理协议定义了配对相关的数据结构。

安全管理数据都通过L2CAP的安全管理信道传输,安全管理协议通过GAP层暴露用户接口,由用户设置设备的输入输出能力和配对参数。

1. 配对概述

BLE 4.2协议新增了一种配对方法,称为“LE安全连接配对”,新的配对方法增加了安全性,为了与BLE 4.1及以前的配对方法做区别,之前的配对方法统称为“传统配对”。

传统配对和LE安全连接配对过程基本一致,都分为三个步骤,仅第二步骤生成密钥上有所不同。

三个步骤为:

  1. 交换配对信息,确定配对模式
  2. 执行配对模式,生成密钥
  3. 分发密钥,保存密钥

三个步骤具有明确的时序关系,并且前一个步骤将显著影响下一个步骤,如下所示:

SM_Pairing

两端设备先建立连接,然后才能进行配对操作。配对无需在连接后立即执行,可以在任何需要时候进行。

2. 配对信息

配对信息包括:

  • 认证需求
  • IO 能力
  • OOB
  • 密钥长度
  • 是否绑定

2.1 安全特性

安全特性取决于设备的认证需求,可选的安全特性如下:

安全特性 MITM保护 所属配对方法
LE Secure Connections pairing Yes LE安全连接配对
Authenticated MITM protection Yes 传统配对
Unauthenticated no MITM protection No 传统配对
No security requirements No 传统配对

MITM(Man in the Middle)指中间人攻击,假如第三方设备攻破了BLE连接,A设备发送的消息被C设备接收,C设备再转发给B设备,A与B设备相互以为建立了连接,而实际上所有的数据通信都经过了C设备转发。

前两种安全特性可以实现MITM保护,后两种则无法防护MITM攻击。

四种安全等级从上至下安全性依次降低。

安全特性信息会持久保存在设备的安全数据库中。

2.2 IO能力

一个设备具有的输入输出能力分为以下几种情况:

输入能力 描述 输出能力 描述
No input 无输入 No ouput 无输出
Yes/No 仅能输入是或否 Numeric output 能显示数字
Keyboard 输入数字以及确认

不同的输入输出能力,将组合出不同的IO能力,如下:

No output Numeric output
No input NoInputNoOutput DisplayOnly
Yes/No NoInputNoOutput DisplayYesNo
Keyboard KeyboardOnly KeyboardDisplay

2.3 OOB能力

OOB(Out of Band)指利用NFC或Wifi等非BLE通信方式传递密钥,它要求设备具有OOB接口能力。

传统配对方式中,要求两端设备都设定了OOB标志位,在LE安全连接配对方式中,只需一个设备设定了OOB标志位即可。

2.4 密钥长度

密钥长度决定了加密强度,越长的密钥其加密强度越高,但加解密所消耗资源和时间也越多。

密钥长度有效值为:7-16字节。

当两端设备的密钥长度值不同,取较小值为有效值。

3. 配对模式

可选的配对模式包括:

  • Just Works
  • Numeric Comparison
  • Passkey Entry
  • Out Of Band (OOB)

3.1 选择模式

如果两端设备均选择No-MITM protection安全特性,则使用Just Works配对模式;如果两端设备(对于LE安全连接配对,仅需要一个设备)均选择OOB,则使用OOB配对模式;否则根据两端设备的IO能力选择配对模式。

两端设备的IO能力中,如果有一端设备是NoInputNoOutput,则只能使用Just Works配对方式,其他的IO能力组合所对应的配对方式如下:

DisplayOnly DisplayYesNo KeyboardOnly KeyboardDisplay
DisplayOnly Just Works Just Works Passkey Entry Passkey Entry
DisplayYesNo Just Works Just Works, Numeric Comparison Passkey Entry Passkey Entry, Numeric Comparison
KeyboardOnly Passkey Entry Passkey Entry Passkey Entry Passkey Entry
KeyboardDisplay Passkey Entry Just Works, Numeric Comparison Passkey Entry Passkey Entry, Numeric Comparison

如果采用了Just Works方式,一定是未认证的,Passkey Entry和Numeric Comparison方式则是认证的。

3.2 Just Works

Just Works配对模式不能够防护窃听和MITM威胁。如果设备的配对过程不被窃听,配对结束后连接被加密并且保证安全。

所以Just Works虽然不如其他配对方式安全,仍然比不配对的连接要安全。

Just Works通常用于一端设备完全没有输入输出能力的场景,所以它将临时密钥TK设置为固定值0,这样两端设备可以根据这个TK值进行后续的加密操作。

3.3 Passkey Entry

Passkey Entry配对模式可以防护MITM威胁,有限的防护窃听。如果设备的配对过程不被窃听,配对结束后连接被加密并且保证安全。

Passkey Entry方法在一端设备上显示一个随机的6位十进制数作为密码,另一端设备输入该密码。passkey作为TK的初值进行后续加密运算,进而可以通过比较加密运算的中间值来判断输入的密码与显示的密码是否一致。比如passkey=001024(400h),则TK=0x00000000000000000000000000000400。

3.4 OOB

OOB(Out of Band)配对模式使用非BLE协议传输TK。用户通过键盘输入Passkey Entry,也属于一种OOB传输TK。

OOB传输通道的安全性决定了配对过程的安全性。

3.5 Numeric Comparison

数值比较仅能用于LE安全连接配对方法,它能够防护MITM和窃听威胁。

数值比较配对模式在两端设备分别显示一串数字,用户比较数字是否相等并通过输入Yes/No来确认,从而实现认证。

这种模式仅需要两个按键即可完成输入,适合用在小型设备上。

3.6 安全性

BLE通信面临的外部威胁有两类:被动威胁和主动威胁。

被动威胁指第三方设备监听配对过程中的密钥数据,有了密钥即可解密后续的连接数据。

主动威胁指MITM,通过伪造身份参与到通信连接中。

一旦BLE的连接经过了认证,即可抵挡MITM威胁,经过认证的设备,就意味着对端设备不是一个伪造偷听设备。

传统的配对方法使用临时密钥TK作为加密运算的初值,而交换TK时可以被窃听设备获取,从而破解后续的加密措施。

不同的配对方法,其安全防护能力如下:

安全性 传统配对 LE安全连接配对
MITM防护 Passkey Entry, OOB Numeric Comparison, Passkey Entry, OOB
窃听防护 OOB 全部

4. 生成密钥

4.1 传统配对

传统配对可以使用Just Works,Passkey Entry和OOB三种算法,配对成功后生成短期密钥STK(Short Term Key)。

生成STK的算法如下:

STK = s1(TK, Srand, Mrand)

其中s1算法是专门用于生成STK的加密算法,TK值可以通过不同的配对模式获得(Just Works模式下TK=0,Passkey Entry模式下TK=passkey,OOB模式下TK=oob input),Mrand和Srand分别为主机和从机生成的128位的随机数。

在两端设备生成STK之前,还需要确认对端设备的安全性,称为“认证”。

配对发起端设备生成一个Mrand随机数,然后根据TK值以及设备配对信息和地址信息等,生成一个确认值Mconfirm。配对响应端设备也按照相同的步骤生成一个Srand和Sconfirm。

然后两端设备交换各自的随机数和确认值。

响应端根据发起端的随机数Mrand按照相同的算法计算出一个新的Mconfirm_new,比较Mconfirm和Mconfirm_new,如果二者匹配,说明发起端设备是安全的。

发起端根据发起端的随机数Srand计算出新的Sconfirm_new,比较Sconfirm和Sconfirm_new,如果二者匹配,说明响应端设备是安全的。

然后两端设备命令控制器加密连接,并根据Srand和Mrand生成STK值。

一旦产生了STK,即说明两端设备之间的连接已经加密和认证。

4.2 LE安全连接配对

安全连接配对可以使用全部四种配对模式,配对成功后生成长期密钥LTK(Long Term Key)。

安全连接配对模式使用椭圆曲线加密算法ECDH( Elliptic Curve Diffie-Hellman)来解决TK被窃听的威胁。

ECDH算法具有数学不可逆的特点。对于一个ECDH运算Q=Pk,如果P和k是已知,计算出Q很容易,但是反过来如果P和Q是已知,计算出k则很难。在密钥交换时,设置一对“公钥-私钥”对,私钥是上式子中的k,公钥是Q,加密算法为P,交换密钥时仅交换公钥Q,私钥永远不对外暴露,攻击者即使获得了公钥也无法反推出私钥。(参考

引入ECDH算法是安全连接配对与传统配对最大的区别。

生成LTK需要三个步骤:

  1. 交换公钥,生成ECDH密钥
  2. 认证设备
  3. 利用私钥生成LTK

在配对开始前,每个设备先准备自己的公钥和私钥对,公钥可以对外传输,私钥不对外传输。

第一步交换攻击,并利用公钥和私钥生成ECDH密钥,这个ECDH密钥将用来生成LTK,由于私钥和ECDH密钥不对外传输,因此可以保证不被窃听。

第二步认证对端设备,具体过程与传统配对基本一致,即在设备内根据随机数生成一个确认值,再将随机数和确认值穿给对端设备,对端设备根据随机数重新生成一个确认值,并与收到的确认值作比较,符合则认证通过,不符合则认证失败。

如果使用Just Works配对模式,无需用户输入,两端设备自动完成随机数和确认值的交换和校验过程,完成认证。

如果使用Numeric Comparison配对模式,无需用户输入,两端设备自动完成随机数和确认值的交换过程,并将最终确认值显示出来等待用户确认,如果确认通过则完成认证。

如果使用Passkey Entry配对模式,需要用户输入passkey作为初值,然后两端设备自动完成随机数和确认值的交换和校验过程,完成认证。

如果使用OOB配对模式,不强制要求双向OOB通信,仅单向OOB通信即可完成认证。利用OOB通道传输随机数,保证随机数不被窃听。

第三步生成LTK,仍然要执行一次确认值校验操作。

5. 分发密钥

BLE工作时可能用到以下几种密钥:

密钥 描述 适用范围
IRK (Identity Resolving Key) 身份识别密钥,用于解析私有地址 传统配对、LE安全连接配对
CSRK (Connection Signature Resolving Key) 连接签名解析密钥,用于解析签名数据 传统配对、LE安全连接配对
LTK (Long Term Key) 长期密钥,用于解析加密连接。传统配对中,LTK是由STK进一步生成;LE安全连接配对中,LTK是配对结束后生成。 传统配对
EDIV (Encrypted Diversifier) 在传统配对中,用于生成LTK。它是绑定信息的一部分。 传统配对
Rand (Random Number) 在传统配对中,用于生成LTK。它是绑定信息的一部分。 传统配对

其中Rand用以生成EDIV,EDIV用以生成LTK。传统配对的第二步骤结束时,连接被STK加密以传输各种密钥,此时将STK临时当做LTK使用,配对成功以后,需要使用Rand、EDIV和LTK作为密钥来加密和解析连接。

加密过程在链路层进行,通过执行链路层的加密规程进行加密。查看LL_ENC_REQ命令,其输入参数包括Rand和EDIV。

密钥生成以后,两端设备将交换各自的密钥信息。传统配对设备可以交换以上全部五种密钥,LE安全连接配对仅交换IRK和CSRK。交换密钥时会保存对端设的设备地址,使设备地址与LTK关联在一起。

至此,配对过程全部结束。

6. 安全管理协议

安全管理协议定义配对过程中用到的各种数据格式和协议接口。

安全管理操作数据使用L2CAP的Security Manager信道,传统的配对方法使用默认的L2CAP MTU值23,LE安全连接配对方法将L2CAP MTU值扩大到65。

安全管理协议的操作以命令的形式进行,命令的格式如下:

字段 Code Data
长度 1 octets 0 – 22 or 64 octets

命令码Code代表了不同的命令类型,全部命令码如下:

Code Command
0x01 Pairing Request
0x02 Pairing Response
0x03 Pairing Confirm
0x04 Pairing Random
0x05 Pairing Failed
0x06 Encryption Information
0x07 Master Identification
0x08 Identity Information
0x09 Identity Address Information
0x0A Signing Information
0x0B Security Request
0x0C Pairing Public Key
0x0D Pairing DHKey Check
0x0E Pairing Keypress Notification

下面介绍配对请求的命令格式,配对响应与之完全相同。

发起端设备发起配对请求,执行配对信息交换(Pairing Feature Exchange)。

配对请求命令的结构如下:

SM_Pair_Request

  • IO Capability表示不同的IO能力
  • OOB data flag表示是否具有OOB能力
  • AuthReq表示认证请求,它的结构如下:
字段 Bonding_Flags MITM SC Keypress CT2 RFU
长度 2 bits 1 bit 1 bit 1 bit 1 bit 2 bits

其中Bonding_Flags表示是否保存绑定信息,MITM是否要求MITM防护能力,即是否需要认证,SC(Secure Connection)表示是否使用LE安全连接配对,Keypress为KeyboardOnly设备提供一些必要的输入状态信息,CT2与经典蓝牙有关。

  • Max Encryption Key Size表示最大密钥长度,有效范围为7-16字节。
  • Initiator Key Distribution表示发起者需要分发的密钥。
  • Responder Key Distribution表示响应者需要分发的密钥。

(完)