LE模式下,传统的配对方式是使用passkey的。除了这种方法,还有一种LE Secure Connections的配对方法。这种LE安全连接是蓝牙v4.2版本中引入的一个增强的安全功能。它生成密钥的方式,是一种兼容 Federal Information Processing Standards (FIPS)的算法,叫做Elliptic Curve Diffie Hellman (ECDH)。
两个蓝牙设备连接前要进行配对,或者叫做把两个蓝牙设备关联起来,所以配对方法可以叫做association model。
BLE的蓝牙配对支持四种模式:
* Just Works // 直接可用
* Numeric Comparison (Only for LE Secure Connections) // 数字比较
* Passkey Entry // 密钥输入的传统模式
* Out of Band (OOB) // 使用NFC等读取连接数据
在LE安全连接中才使用数字比较,其他传统的配对模式不使用。这是一种相对较新的配对模式。下面我们将详细介绍这种方法。
1. Phase 1 – Pairing Feature Exchange // 第一阶段,配对设置信息交换
表1是配对的请求/响应包的定义。在 "AuthReq "字段中,有一个名为 "SC "的位。如果设备支持LE安全连接配对,那么SC字段应设置为1,否则应设置为0。如果两个设备都支持LE安全连接配对,那么应使用LE安全连接配对,否则应使用LE传统配对。
因此,如果两个设备想通过LE安全连接进行配对,他们必须将 "SC "位设置为1,以指示对端设备(peer device) "我有安全连接的能力"。
2. Phase 2 – Key Generation Method Selection // 第二阶段,选择密钥生成方法
在配对设置信息交换后,发起方和响应方应确定要使用何种密钥生成方法。下面是密钥生成方法的C语言语法编码例子:
表2列出了使用数字比较法的发起设备和响应设备的IO能力。当发起设备和响应设备都有Display and Yes/No或Display and Keyboard的I/O能力,将使用数字比较配对模式。
3. Phase 2 – Authentication // 第二阶段,进行认证
密钥生成后,配对将进入第二阶段,即认证阶段。其目的是防止中间人(Man-In-The-Middle, MITM)攻击,并生成将用于加密数据链接的密钥。
在公钥交换中,每个设备生成自己的Elliptic Curve Diffie-Hellman(ECDH)公钥-私钥对。公钥-私钥对包含一个私钥和公钥。
SKa, 发起设备的私钥
PKa, 发起设备的公钥
SKb, 响应设备的私钥
PKb,应答设备的公钥
图1,数字对比(Numeric Comparison)的认证过程
配对是由发起设备向响应设备发送其PKa开始的。响应设备用它自己的PKb进行回复。公钥交换后,设备可以开始计算Diffie-Hellman密钥;你可以看到它从图1中1b结束时开始。
之后,每个设备选择一个随机的128位随机数。这个值是用来防止重放攻击(replay attack)的。
- Na, 发起设备的128位随机数。
- Nb, 响应设备的128位随机数。
在这之后,应答设备会计算出一个应答值(commitment),Cb,它是用Nb、PKa、PKb和0计算出来的,如图1所示的步骤3。
第4步,响应设备必须在收到发起设备的Na之前分享Cb。
第5步,发起设备必须在收到响应设备的Nb之前分享其Na。
第6步,发起设备必须在收到应答设备的Nb后检查来自应答设备的Cb。
此时,发起设备或响应设备已经知道对端设备的公钥和随机数。发起设备可以确认来自应答设备的应答值(Cb)。这时如果失败则表明存在攻击者或其他传输错误,应导致配对过程中止,步骤6.a。
假设应答值检查成功,两个设备各自计算出6个数字的确认值(confirmation values),在各自的设备上显示给用户。用户应检查两边的6位数的数字是否匹配,并确认是否匹配。如果不匹配,则配对中止。
4. Phase 3 – Long Term Key, LTK // 第三阶段 - 长期密钥,LTK
当认证成功后,两个设备开始计算LTK,这将用于链接加密。 这是配对和以后再重新连接的最后一块拼图:在不同的配对模式中,认证对端设备并防止中间人(MITM)攻击。而LTK的计算在LE的任何配对模式中都是通用的,这里暂不做介绍。
5. Conclusion // 总结
根据用户体验和便利性,相比于传统配对模式 "密钥输入"(Passkey Entry),"数字比较"(Numeric Comparison)只需要两个按钮,YES和NO,来表示这两个设备之间的6位数确认值是否匹配,它不需要一个从 "0 "到 "9"的数字键盘来输入密钥(passkey),所以这是一个简化硬件I/O能力的改进。同时,由于在于LE安全连接中使用了数字比较方法,它提供了更强的保护,避免了窃听和MITM等威胁。所以,伙计们,如果你开始开发一个对隐私敏感的产品,并且需要对蓝牙LE链接进行高度保护,这种数值匹配方法是你的一个好选择。
如果你平时多加注意,有时会发现,两个蓝牙设备连接时,是在各自设备上显示一串数字,如果两边数字一样,点击确认,这两个设备就连接到一起了。
参考: