3、蓝牙配对机制详解:传统配对(Legacy Pairing)、安全简单配对(SSP)、LE Secure Connections
蓝牙配对,说白了就是两个设备互相确认身份、协商密钥的过程。我做了这么多年蓝牙驱动,见过太多因为配对机制没选对而翻车的案例。今天咱们就把三种主流配对方式掰开揉碎了讲清楚。
3.1 传统配对(Legacy Pairing)—— 老古董但还在用
传统配对是蓝牙 2.0/2.1 时代的产物。你想想看,那时候手机还只能打电话发短信,安全需求没那么高。它的核心思路就是:双方输入同一个 PIN 码,然后基于这个 PIN 生成链路密钥。
具体流程是这样的:
- 第一步:设备 A 发起配对请求,设备 B 响应。
- 第二步:双方协商输入 PIN 码(通常是 1-16 位数字)。
- 第三步:各自用 PIN 码、设备地址、随机数,通过 E21/E22 算法生成初始化密钥 Kinit。
- 第四步:再用 Kinit 生成最终的链路密钥 Kab。
嗯,这里要注意一个致命问题:PIN 码太短。很多设备默认 PIN 是 0000 或 1234,我曾在项目中遇到过客户用蓝牙耳机,PIN 码固定为 0000,结果被隔壁工位的同事用手机轻松连上,直接播放了一首《最炫民族风》…… 尴尬不?
3.2 安全简单配对(SSP)—— 蓝牙 2.1 的救星
传统配对的问题太明显了,于是蓝牙 2.1 引入了 SSP(Secure Simple Pairing)。我个人习惯叫它「安全简单配对」,其实它一点都不简单,只是对用户来说操作简单了。
SSP 引入了 椭圆曲线 Diffie-Hellman(ECDH) 密钥交换,这才是真正的安全基础。它提供了四种关联模型:
| 关联模型 | 适用场景 | 安全级别 |
|---|---|---|
| Numeric Comparison | 两个设备都有显示屏和确认按钮 | 高(防中间人攻击) |
| Passkey Entry | 一个设备有输入能力,另一个有显示 | 中 |
| Just Works | 至少一个设备无显示无输入 | 低(无用户验证) |
| Out of Band (OOB) | 通过 NFC 等带外方式交换信息 | 高(依赖带外信道安全) |
我重点说说 Numeric Comparison,这是我最常用的模型。流程大致是:
- 双方通过 ECDH 生成共享密钥。
- 各自计算一个 6 位数字的确认值。
- 两个设备都显示这个数字,用户确认是否一致。
- 如果一致,继续完成配对;否则终止。
你可能会问:「如果中间人篡改了数字怎么办?」 嗯,这里的关键在于:确认值是通过 ECDH 共享密钥和随机数计算出来的,中间人没有共享密钥,无法伪造匹配的确认值。我在项目中测试过,用蓝牙抓包工具尝试中间人攻击,只要用户认真比对数字,攻击就一定会失败。
3.3 LE Secure Connections —— 蓝牙 4.2 的安全升级
到了蓝牙 4.2,LE 引入了 Secure Connections。说白了,就是把 SSP 那套 ECDH 密钥交换搬到了低功耗蓝牙上,并且做了强化。
LE Secure Connections 的核心变化有两点:
- 使用 P-256 椭圆曲线(而不是 SSP 的 P-192),密钥强度更高。
- 引入 LE Secure Connections 配对流程,包括阶段 1(配对特性交换)、阶段 2(密钥生成)、阶段 3(传输特定密钥)。
我画个简化的流程图给你看:
阶段 1: 配对请求/响应
→ 交换 IO 能力、认证要求、密钥大小等
阶段 2: 密钥生成
→ ECDH 公钥交换
→ 根据关联模型生成 LTK(长期密钥)
阶段 3: 密钥分发
→ 传输加密信息(EDIV、RAND)
→ 可选传输身份密钥(IRK、CSRK)
这里有个容易踩的坑:阶段 2 中的关联模型选择。LE Secure Connections 支持 Numeric Comparison、Passkey Entry、Just Works 和 OOB,但实现时要注意:
- 如果两个设备都支持 Secure Connections,必须使用 P-256 曲线。
- 如果一方不支持,会降级到 LE Legacy Pairing(使用 AES-128 和 STK)。
- 降级过程中存在安全风险,我建议在代码中强制要求双方都支持 Secure Connections。
3.4 三种配对方式的对比总结
| 特性 | 传统配对 | SSP | LE Secure Connections |
|---|---|---|---|
| 蓝牙版本 | 2.0/2.1 | 2.1+ | 4.2+ |
| 密钥交换 | PIN 码 + E21/E22 | ECDH (P-192) | ECDH (P-256) |
| 防中间人攻击 | ❌ 无 | ✅ 有(Numeric Comparison/OOB) | ✅ 有(更强) |
| 适用场景 | 老设备兼容 | 经典蓝牙设备 | 低功耗蓝牙设备 |
| 用户交互 | 输入 PIN | 比对数字/输入密码 | 同 SSP |
最后说一句:新项目请直接上 LE Secure Connections。传统配对和 SSP 的 Just Works 模式,能不用就别用。安全这东西,你永远不知道攻击者会从哪个角度钻进来。我在蓝牙安全领域摸爬滚打这么多年,最大的体会就是:别给攻击者留任何机会。