蓝牙配对之——配对特性交换
蓝牙(Bluetooth®)核心规格中有三大主要架构层:控制器、主机和应用。主机层中有一个为配对和密钥分配定义方法和协议的安全管理器模块、相应的安全工具箱、以及定义配对指令框架形式、框架架构和超时限制的安全管理器协议。安全管理器采用密钥分配的方式执行无线电通讯中的身份和加密功能。
配对以建立密钥,然后就能用密钥来加密链路。然后执行传输特定的(transport specific)密钥分配来分享密钥。密钥可用来加密日后的重新连接、验证签名数据、或执行随机地址解析。总的来说配对有三个阶段:
第一阶段:配对特性交换
第二阶段(低功耗传统配对):生成短期密钥(Short Term Key,简称STK)
(低功耗安全连结):生成长期密钥(Long Term Key,简称LTK)
第三阶段:传输特定的密钥分配
大多数读者可能未必了解低功耗传统配对和低功耗安全连接。低功耗(Low Energy,简称LE)是蓝牙规格中蓝牙4.0及以上版本的主要特性之一。蓝牙4.2规格为低功耗物理传输添加了安全连接特性,升级了配对功能,在蓝牙低功耗物理传输中采用美国联邦信息处理(FIPS)许可的算法(AES-CMAC和P-256 椭圆曲线)。为了区别安全连接与蓝牙4.0和4.1规格中定义的低功耗配对,我们将后者成为低功耗传统配对。图1是传统配对和安全连接都适用的配对流程图。
图1:配对流程图
在这一篇中,我们主要讨论第一阶段,即配对特性交换。配对就是安全特性的交换,包括输入/输出(IO)功能、对于中间人保护的要求等。两台设备间配对信息的交换是通过配对请求(PairingRequest)和配对响应(PairingResponse)数据包实现的。这两种信息的内容请参考表1:配对请求/响应。
表1 配对请求/响应
"代码"
IO 功能
IO 即为输入/输出,IO功能结合在一起可生成这一字段的值。
对于输入功能来说,可能为"无输入"、"是/否"或"键盘",详情如下:
对于输出功能来说,可能为"无输出"或"数字输出",详情如下:
将输入输出功能结合在一起之后,就有了以下矩阵,定义了蓝牙设备应有的IO功能。
1 没有配对算法可以使用"是/否"的输入和"无输出",因此其IO功能结果为"NoInputNoOutput"。
从以上矩阵中能大致了解相应的IO功能,并从下表中选择合适的值,置入配对请求/响应数据包。
OOBDF(OOBData Flag)
OOB即 Out-of-Band的缩写,意为"带外",采用外部通信方法交换一些配对过程中使用的信息。OOB媒体可能是任何一种能够传输相应信息的其他无线通信标准,如NFC或二维码。
BF(Bonding Flags)
绑定(Bonding)是配对发生之后的长期密钥交换,并将这些密钥储存起来以供日后使用——即在设备间创建永久的安全连结。配对机制是绑定的前提。
"MITM"
MITM是"Man-In-The-Middle(中间人)"。这一字段是1比特位的标识,如果设备需要MITM保护,则设置为1。本文主要着重于配对特性交换,如果您对MITM感兴趣,请参考蓝牙核心规范4.2版本第一卷中A部分的5.2.3。
"SC"
SC 字段是1比特位的标识,设置为1,以请求低功耗安全连接配对。可能的配对机制结果是:如果两台设备均支持低功耗安全连接,则采用低功耗安全连接;否则采用低功耗传统连接。因此这一标识是决定第二阶段配对方法的一项指标。
"KC"
按键字段是1比特位的标识,只用于万能钥匙进入协议,在其他协议中可忽略。万能钥匙进入是传统配对和安全连接的典型配对方法。这部分在下一篇博文中会进行讨论。
"最大加密密钥规模"
最大密钥规模范围为7-16个八位字节。
"发起者密钥分配"& "响应者密钥分配"
这两个字段的定义如下,具体在后续的系列博文中会展开讨论。
当配对特性的交换开始之后,发起者和响应者会通过配对请求和响应来交换彼此的配对特性信息。有了这些信息,发起者和响应者就能确认对方的I/O功能(这是传统配对和安全连结的配对机制所需的),然后选择配对方法——直接运行、万能钥匙进入、数值比较或带外,然后进入第二阶段。
《蓝牙配对之——密钥生成方法》
- 蓝牙配对之——密钥生成方法(05-29)
- 蓝牙配对之——低功耗传统配对,万能钥匙进入(07-30)
- ULP蓝牙技术的安全设计(08-29)
- 英飞凌MD8710:多样化应用程序医疗平台(11-20)
- ORIGOsafe智能电子产品强制汽车安全驾驶(02-19)
- 体验蓝牙4.0灯控LED趣味:智能手机“掌”控一屋子照明(07-16)