4、配对阶段二:传统配对 vs LE Secure Connections

好,咱们接着聊配对阶段二。

如果说阶段一是「握手认识」,那阶段二就是「正式谈合作」了。这个阶段的核心任务只有一个:生成一个双方共享的密钥(LTK)。没有这个密钥,后续的加密通信就是空谈。

BLE 5.0 里,阶段二有两种走法:传统配对(Legacy Pairing)LE Secure Connections。我当年刚接触蓝牙时,也搞不清这俩到底差在哪。后来踩了几个坑,才算真正理解。

4.1 传统配对:老路子,但还在用

传统配对是 4.0/4.1 时代的产物。它的核心机制是 TK(Temporary Key),一个临时密钥。

说白了,双方先约定好一个 TK,然后用这个 TK 去加密后续的交换过程,最终生成 STK(Short Term Key),再导出 LTK。

这里有个关键点:TK 怎么来的?

  • Just Works:TK 直接设为 0。你没看错,就是全零。安全性?基本为零。
  • Passkey Entry:一方显示一个 6 位数字,另一方输入。TK 就是这个数字。
  • OOB(Out of Band):通过 NFC 或其他带外方式交换 TK。
⚠️ 注意: 传统配对下,Just Works 的 TK 是 0。这意味着任何监听者都能算出你的 STK。我在一个早期项目中就吃过这个亏——产品用 Just Works 配对,结果被人在空中抓包,直接破解了通信。从那以后,我对 Just Works 就格外警惕。

4.2 LE Secure Connections:新方案,更安全

到了 BLE 4.2,蓝牙 SIG 终于看不下去了,推出了 LE Secure Connections。到了 5.0,这已经是标配。

它的核心变化是:用 ECDH(椭圆曲线 Diffie-Hellman)密钥交换代替了 TK 机制

具体流程是这样的:

  1. 双方各自生成一对 ECDH 公私钥。
  2. 交换公钥。
  3. 用各自的私钥和对方的公钥,计算出共享的 DHKey。
  4. 再用 DHKey 派生出 LTK。

你想想看,即使攻击者能监听所有通信,没有私钥他也算不出 DHKey。这就是非对称加密的魅力。

💡 核心区别一句话总结:
传统配对靠「临时密钥 TK」保护,TK 可能很弱(甚至是 0)。
LE Secure Connections 靠「非对称加密 ECDH」保护,私钥从不泄露。

4.3 两种方式的对比

我整理了一个表格,方便你对照着看:

对比项 传统配对 LE Secure Connections
密钥交换方式 TK → STK → LTK ECDH → DHKey → LTK
抗被动窃听 弱(Just Works 下为 0) 强(私钥不泄露)
抗中间人攻击 仅 Passkey/OOB 可防 支持 Numeric Comparison
IO 能力要求 Just Works 无需显示 Numeric Comparison 需显示
兼容性 所有 BLE 4.0+ 设备 BLE 4.2+ 设备

4.4 Numeric Comparison:LE Secure Connections 的杀手锏

LE Secure Connections 引入了一个新玩法叫 Numeric Comparison。这玩意儿在传统配对里是没有的。

流程是这样的:

  • 双方各自计算一个 6 位数字的确认值。
  • 显示在屏幕上。
  • 用户比对两个数字是否一致。
  • 如果一致,确认;否则取消。

为什么这能防中间人攻击?因为攻击者虽然能转发数据,但他无法伪造确认值——他没有私钥。用户只要看到两边数字一样,就说明通信没有被篡改。

💡 我的经验: 如果你的设备有显示屏和确认按钮,优先用 Numeric Comparison。用户体验好,安全性也高。我曾经在一个智能门锁项目里,从 Passkey Entry 切换到 Numeric Comparison,用户反馈「配对快多了」。

4.5 实际开发中的选择建议

嗯,这里要注意,不是所有场景都能用 LE Secure Connections。你得看实际情况:

  • 如果设备只支持 BLE 4.0/4.1:没得选,只能用传统配对。
  • 如果设备支持 BLE 4.2+:优先用 LE Secure Connections。
  • 如果设备没有显示屏:LE Secure Connections 下只能用 Just Works(虽然它也用 ECDH,但缺少用户确认环节,抗中间人能力有限)。
  • 如果设备有显示屏和按钮:上 Numeric Comparison,这是目前最安全的方案。
⚠️ 避坑指南: 我曾经遇到过一个坑——两个设备都支持 LE Secure Connections,但配对时却回退到了传统配对。查了半天发现,是其中一端的蓝牙协议栈版本太老,虽然硬件支持 4.2,但固件没开 Secure Connections 功能。所以,不要只看芯片型号,要确认协议栈实际支持的特性

4.6 小结

传统配对和 LE Secure Connections,说白了就是「老办法」和「新办法」的区别。老办法简单但漏洞多,新办法安全但要求高。

我个人习惯是:只要条件允许,一律上 LE Secure Connections + Numeric Comparison。如果设备实在没有显示能力,那就用 Just Works,但一定要在应用层做额外的安全加固(比如加一层应用层加密)。

下一节,咱们会深入讲讲 密钥派生的具体算法,看看 LTK 到底是怎么从 DHKey 里算出来的。到时候我会带你看一段实际的代码实现。