蓝牙配对系列第四篇:低功耗安全连接(LE Secure Connections) – 数值比较(Numeric Comparison)

作者:任凯,蓝牙亚太区技术项目经理

《【蓝牙配对系列】第三篇:低功耗传统配对,万能钥匙进入》中,我们概述了采用PassKey Entry的低功耗传统配对。除了低功耗传统配对(Legacy Pairing),低功耗安全连接也是配对的一种选择。低功耗安全连接是在蓝牙4.2版本中引入的经强化的安全功能。它采用符合联邦信息处理标准(FIPS)的椭圆曲线Diffie-Hellman(ECDH)算法来生成密钥。低功耗安全连接支持四种关联模型:

  • Just Works
  • Numeric Comparison(数值比较)
  • Passkey Entry
  • Out-of-Band, 简称OOB

数值比较仅适用于低功耗安全连接,而不适用于传统配对。因此这是一个较新的关联模型,今天就让我们来深入一览。

1. 第1阶段 – 配对特性交换
在本系列的第一篇中,我和大家讨论了配对特性交换,在这里我想再回顾一下。表1是配对请求/响应分组定义。在“AuthReq”字段中,有一个名为“SC”的位。如果设备支持低功耗安全连接配对,则SC字段应设置为1,否则设置为0。如果两个设备都支持低功耗安全连接配对,则应使用低功耗安全连接配对,否则应使用低功耗传统配对。

表 1 配对请求/响应

表 1 配对请求/响应

*位顺序为由LSB至MSB。

因此,如果两个设备要通过低功耗安全连接配对,则必须将“SC”设置为1,以告知对等设备“我具备安全连接的能力“。

2. 第2阶段 -密钥生成方法选择
完成配对特征交换之后,发起设备和响应设备应确定使用何种密钥生成方法。这里是密钥生成方法的C语法编码示例:

密钥生成方法的C语法编码

表2列出了数值比较发起设备和响应设备的I/O功能。当发起设备和响应设备都具有显示屏和“是/否”的I/O功能、或显示屏和键盘I/O功能时,则使用数值比较关联模型。

表2 数值比较的I/O能力映射

表2 数值比较的I/O能力映射

* - 表示适用其它密钥生成方法,而非数值比较

3. 第2阶段 – 验证
密钥生成后,配对将进入阶段2,即身份认证阶段,目的是保护连接不受中间人攻击(Man-In-The-Middle, MITM),同时生成即将用于加密连接链路的密钥。

在公钥交换中,每个设备生成自己的椭圆曲线Diffie-Hellman(ECDH)公私密钥对,其中包含私钥和公钥。

  • SKa,发起设备的私钥
  • PKa,发起设备的公钥
  • SKb,响应设备的私钥
  • PKb,响应设备的公钥

图1 数值比较的认证过程

图1 数值比较的认证过程

通过发起设备将其PKa发送到响应设备来启动配对。随后响应设备回复自己的PKb。交换公共密钥之后,设备即可开始计算Diffie-Hellman密钥。在图1可以看到Diffie-Hellman密钥计算是在1b的结束后开始。

随后,每个设备选择一个128位随机数,此值将用于防止重放攻击。

  • Na,发起设备的128位随机数
  • Nb,响应设备的128位随机数

下一步响应设备计算提交Cb,其通过Nb、PKa、PKb和0计算得出。请看图1中的步骤3。
步骤4,响应设备必须在接收到发起设备的Na之前共享Cb。
步骤5,发起设备必须在接收到响应设备的Nb之前共享其Na。
步骤6,发起设备接收到响应设备的Nb之后,必须检查来自响应设备的Cb。

此时,发起设备或响应设备已经知晓对等设备的公共密钥和随机数。发起设备可以确认来自响应设备的提交(Cb)。在这一节点上的失败将意味着存在攻击者或其他传输错误,且会导致配对过程中止,如步骤6a.

假设提交检查成功,则设备双方计算各自向用户显示的6位数确认值。用户需要检查这些6位数值,确认其是否匹配。如不匹配,则配对中止。

4. 第3阶段 – 长期密钥(Long Term Key,简称LTK)
验证成功后,两个设备会开始计算将用于链路加密的LTK。这是配对和重新连接的最后一部分:在不同的关联模型中,通过不同的方法来验证对等设备并防止中间人(MITM)攻击。

由于LTK计算对于任何低功耗安全连接关联模型都是十分常见的,因此在下一篇博文中,我将就此话题和大家做更详细的探讨。

5. 结论
根据用户体验和便利性的考量,与第三篇相比,数值比较只需要两个按钮:YES和NO,以指示两台设备之间的6位确认值是否匹配,而不需要从'0'到'9'数字键盘,因此可谓一项简化硬件I/O能力的改进。 同时,由于数值比较仅适用于低功耗安全连接,可针对窃听和MITM提供更高一层的保护。因此,如果你正在着手开发一款非常注重隐私、需要对蓝牙低功耗链路提供高度保护的产品,这将是一个不错的选择。

Baidu
map