背景
最近一直在调试耳机的BLE AUDIO功能,一次测试中把CTKD(Cross-transport key derivation)宏开关给关了,发现手机完全不会去连接耳机的LE AUDIO服务,甚至BLE连接都不会建立。说明手机连接双模蓝牙耳机的机制是:先去配对BR/EDR,然后通过CTKD的方式去建立BLE连接。带着好奇心去一探究竟:
1:通过CTKD配对的必要条件
1:耳机端的BR/EDR和BLE的地址必须一致。
2:耳机端需要打开Secure Connection(蓝牙4.2引入新的安全鉴权加密方式,采用椭圆曲线ECDH公钥算法进行配对鉴权,而legacy采用的是AES对称加密算法)。
查看耳机有没有支持Secure Connection,可以通过手机端的btsnoop HCI Log查看:HCI Read Remote extended feature complete event里有一个bit位,如下图:
2:BLE通过CTKD配对的流程
1:
手机和耳机先进行BR/EDR连接配对,如下图手机和耳机通过过simple pairing配对成功,生成了Link Key:
2:
手机和耳机利用Link Key,根据一定的算法(这个算法是另外一个topic),算出LE连接的IRK和CSRK。
IRK用来解析蓝牙Resolvble Random address 。
CSRK用来加密数据和验证数据的安全完整性。
手机和耳机利用BR/EDR的连接,直接交换以上的key和address, 如下图:
3:
上述BLE的key交换完成后,手机端会把耳机地址加入白名单,然后发起BLE连接,如下图:
总结:CTKD在蓝牙4.2版本引入,但后来爆出很多安全问题,在5.1版本又做了很多限制。网上很多介绍CTKD OVER BLE,但CTKD OVER BR/EDR基本没有人介绍,我在这里抛砖引玉,博君一笑。