蓝牙 BLE + BT 双模设备配网
本文所论述的 BLE 双模设备特指 BLE + BT 的蓝牙设备,非 BLE + WiFi 设备,请注意区分。
即一颗蓝牙芯片同时支持经典蓝牙(BT)和 BLE 通讯。
1. 介绍
BT(经典蓝牙)泛指支持蓝牙协议在4.0以下的模块,一般用于数据量比较大的传输,如:语音、音乐等较高数据量的传输。经典蓝牙模块又可细分为:传统蓝牙和高速蓝牙模块。
传统蓝牙模块在2004年推出,主要代表是支持蓝牙2.1协议的模块,在智能手机爆发的时期得到了广泛的使用。高速蓝牙模块在2009年推出,速率提高到约24Mbps,传输速率是经典蓝牙的八倍,可以轻松的应用于录像机到电视、PC到PMP、UMPC到打印机之间的资料传输。
BLE是指支持蓝牙协议4.0或者以上的模块,最大的特点就是成本和功耗的降低,可以应用于实时性要求较高的产品当中,比如:智能家居类(蓝牙锁、蓝牙灯)、传感设备的数据发送(血压计、温度传感器)、消费类电子(电子烟、遥控玩具)等。
低功耗蓝牙和传统蓝牙其实是有很大的区别的,低功耗蓝牙是nokia的wibree标准上发展起来的。在功耗上,传统蓝牙有三个级别的功耗,class1、class2、class3分别支持100m、10m、1m的传输距离;低功耗蓝牙却没有功耗级别,一般发送功率在7dbm左右。
蓝牙双模设备如果想要正常使用,分为 BT 配网 + BT 配对 两个步骤,流程有以下三种:
- BLE 单独配对,引导用户去系统蓝牙设置页面手动搜索配对
- 一次配网,通过 BLE 传输 BT mac,Android 可以直接发起连接,iOS 需要设备发起或者手动连接
- 一次配网,通过 CTKD 认证方式
第二种方案中设备在BLE配网过程中会将BT地址传给APP,安卓端APP可以直接调用BT配对接口配对设备,但是IOS端不能直接调用BT配对,只能在面板引导用户去进行BT配对。
蓝牙CTKD能力,通过CTKD能力可以将BLE配对产生的LTK转化为BT配对需要的LinkKey,从而实现一次性完成BLE和BT的配对,从而提升蓝牙耳机、手表等蓝牙双模产品的产品体验。
本文将介绍 CTKD 方式。
2. CTKD
蓝牙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 ... blurtooth/, 所以在蓝牙5.1版本中加入了对CTKD的限制,解决了该问题,所以建议在蓝牙5.1版本后使用CTKD特性。
【设备要求】
1.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地址需要保持一致。
2.设备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以上
3. 使用流程
1. 设备发送BLE广播
将BT和BLE的MAC地址设置一样后, 设备就可以通过BLE发送可连接广播了。 CTKD特性要求蓝牙设备需要开双模模式,所以设备的BLE广播要按照蓝牙双模的类型进行广播,即BLE广播中的Flag类型字段中不支持BR/EDR的bit需要置0,如下图:
所以支持CTKD功能的BLE广播前缀不应该使用单模的 02 01 06,而应该使用 02 01 02 。如下图:
2. BLE 配对
- 建立 gatt 连接
- 手机或者设备端发起 Security_Request
- 手机端发起 Pairing_Request,完成数据交换
SC: 表示是否支持Secure Connection 即上面说的安全配对,支持CTKD特性需要将SC该标志位置1。
CT2:该标志位决定了双方使用什么算法来生成BT的LinkKey。
SC标志位是生成LinkKey的前提, CT2标志位决定了生成LinkKey的算法
3. 密钥下发
配对阶段一中的配对信息交换后,配对阶段二会选择Secure Pairing作为配对方式,BLE配对完成后会生成LTK, 流程如下图所示,LTK的生成会依赖于设备双方的MAC地址。
在生成LTK后,会根据阶段一中交换的配对信息中的CT2标志位,决定使用什么算法来生成LinkKey。
Code: Select all
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的配对。