蓝牙CTKD是蓝牙4.2版本引入的一种交叉传输密钥派生的安全机制,全称 Cross-transport key derivation,主要用在蓝牙双模设备上,它可以跨越BLE和BT的边界,通过将BLE配对生成的LTK转化成BT配对的LinkKey,从而直接实现BT的配对,当然也可以通过BT配对生成的LinnkKey转化成BLE的LTK来实现BLE的配对,目前我们主要研究和使用前者。通过CTKD可以通过一次配对将BT和BLE两个链路都配对上,从而提升蓝牙双模设备的配对体验。
PS: 虽然蓝牙4.2就支持CTKD特性,但是在引入CTKD特性的时候,有一些安全风险https://www.bluetooth.com/learn-about-bluetooth/key-attributes/bluetooth-security/blurtooth/, 所以在蓝牙5.1版本中加入了对CTKD的限制,解决了该问题,所以建议在蓝牙5.1版本后使用CTKD特性。
应用场景
主要应用在蓝牙双模设备上,如蓝牙耳机、蓝牙手表上,通过手机APP连接BLE,并通过BLE的配对转化生成BT的配对密钥,从而实现一次配对完成BT和BLE的配对,提升双模产品的配对体验。
蓝牙设备端要求
- BT和BLE的MAC地址必须保持一致。
在蓝牙核心规范中CTKD的介绍中并没有直接说明BT和BLE的MAC地址要保持一致,但是在分析蓝牙配对绑定的流程中发现双方只在BLE配对的时候交换了一次MAC地址,并没有发现有交互BT MAC的流程。
但核心规范中的Controller层规范中读MAC地址的命令中有这样的描述:On a BR/EDR/LE Controller, the public address shall be the same as the BD_ADDR。
所以通过理论和实践结合可以得出结论:支持CTKD特性的蓝牙双模式设备,BT和BLE的MAC地址需要保持一致。
- 设备BLE配对需要支持安全配对 Secure Pairing
Secure Pairing是蓝牙4.2支持的一种安全配对方式。与legacy Pairing配对方式使用AES对称加密算法来加密链路不同的是,Secure Pairing使用椭圆曲线ECDH的公钥算法来进行配对和鉴权流程,从而可以做到防窃听攻击,增强了链路的安全性。
手机端要求
IOS
版本要求在 IOS13以上: https://developer.apple.com/videos/play/wwdc2019/901
安卓
网上说要求版本在Android 11以上,但是未找到Android官方的资料说明。
技术实现流程
1. 设备发送BLE广播
将BT和BLE的MAC地址设置一样后, 设备就可以通过BLE发送可连接广播了。 CTKD特性要求蓝牙设备需要开双模模式,所以设备的BLE广播要按照蓝牙双模的类型进行广播,即BLE广播中的Flag类型字段中不支持BR/EDR的bit需要置0,如下图:
所以支持CTKD功能的BLE广播前缀不应该使用单模的 02 01 06,而应该使用 02 01 02 。adv数据如下图
2. BLE配对流程
- 双方建立GATT连接后,接下来就进行配对绑定流程,配对可以由主机端直接发起Pairing_Request,也可以由设备端先发送Security_Request, 然后主机再发起Pairing_Request,在配对的阶段一的Pairing_Request和Pair_Response数据包中,双方会交换配对信息。
鉴权信息如下图:
- SC: 表示是否支持Secure Connection 即上面说的安全配对,支持CTKD特性需要将SC该标志位置1。
- CT2:该标志位决定了双方使用什么算法来生成BT的LinkKey。
SC标志位是生成LinkKey的前提, CT2标志位决定了生成LinkKey的算法,但最终是否要生成LinkKey,还是由上图Key Distribution中的LinkKey flag来决定的。主机和从机双方的该标志位都设置为1,才会生成LinkKey。
下面是通过抓包看到的主机端和设备端的Pairing Feature Exchange配对信息:
主机端的Pairing request信息如上图
从机端的Pairing Response信息如上图
可以看到 主机和从机双方都支持Secure Pairing, 并且都支持生成LinkKey。 CT2标志位为0和为1都可以,则用来选择不同的LinkKey生成算法。
3. 密钥下发流程
配对阶段一中的配对信息交换后,配对阶段二会选择Secure Pairing作为配对方式,BLE配对完成后会生成LTK, 流程如下图所示,LTK的生成会依赖于设备双方的MAC地址。
在生成LTK后,会根据阶段一中交换的配对信息中的CT2标志位,决定使用什么算法来生成LinkKey,生成算法如下图:
If at least one device sets CT2 = 0 then
1. ILK = h6(LTK, “tmp1”)
2. BR/EDR link key = h6(ILK, “lebr”)
If both devices set CT2 = 1 then
1. ILK = h7(SALT, LTK)
2. BR/EDR link key = h6(ILK, “lebr”)
经过该流程后, 最终生成了BT配对的LinkKey,实现了在BLE配对的同时完成了BT的配对。
应用场景
通过CTKD技术,可以让蓝牙双模设备比如耳机,可以实现打开对应的APP,就可以直接完成耳机的配对,而不需要再从手机设置-》蓝牙里面搜索设备,然后再一个一个找对应名称的蓝牙设备来点击配对。这极大的提高耳机的配对体验,并且可以将耳机与IOT很好结合起来,例如通过耳机的BLE完成与其他蓝牙设备的智能交互和联动。
对应的APP,就可以直接完成耳机的配对,而不需要再从手机设置-》蓝牙里面搜索设备,然后再一个一个找对应名称的蓝牙设备来点击配对。这极大的提高耳机的配对体验,并且可以将耳机与IOT很好结合起来,例如通过耳机的BLE完成与其他蓝牙设备的智能交互和联动。