一种更优雅的蓝牙配对技术 - Cross-transport key derivation (CTKD)
一种更优雅的蓝牙配对技术 - Cross-transport key derivation (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/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 then1. ILK = h6(LTK, “tmp1”)2. BR/EDR link key = h6(ILK, “lebr”)
If both devices set CT2 = 1 then1. ILK = h7(SALT, LTK)2. BR/EDR link key = h6(ILK, “lebr”)
经过该流程后, 最终生成了BT配对的LinkKey,实现了在BLE配对的同时完成了BT的配对。
应用场景
通过CTKD技术,可以让蓝牙双模设备比如耳机,可以实现打开对应的APP,就可以直接完成耳机的配对,而不需要再从手机设置-》蓝牙里面搜索设备,然后再一个一个找对应名称的蓝牙设备来点击配对。这极大的提高耳机的配对体验,并且可以将耳机与IOT很好结合起来,例如通过耳机的BLE完成与其他蓝牙设备的智能交互和联动。
对应的APP,就可以直接完成耳机的配对,而不需要再从手机设置-》蓝牙里面搜索设备,然后再一个一个找对应名称的蓝牙设备来点击配对。这极大的提高耳机的配对体验,并且可以将耳机与IOT很好结合起来,例如通过耳机的BLE完成与其他蓝牙设备的智能交互和联动。
一种更优雅的蓝牙配对技术 - Cross-transport key derivation (CTKD)相关推荐
- c语言c2182是什么错误,C语言中一种更优雅的异常处理机制
上一篇文章对C语言中的goto语句进行了较深入的阐述,实际上goto语句是面向过程与面向结构化程序语言中,进行异常处理编程的最原始的支持形式.后来为了更好地.更方便地支持异常处理编程机制,使得程序员在 ...
- 6种更优雅书写Python代码!
1 简介 一些比较熟悉pandas的读者朋友应该经常会使用query().eval().pipe().assign()等pandas的常用方法,书写可读性很高的「链式」数据分析处理代码,从而更加丝滑流 ...
- 蓝牙配对机制基础知识
蓝牙配对机制 为了统一规范,蓝牙在2.1版本引入了安全简单的配对机制,从尔加强了蓝牙通讯安全方面性能.以下总结了蓝牙配对机制: 一.遗留配对(Lagacy pairing){密码配对(PIN Code ...
- 教你如何更优雅的设计Java异常
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:lrwinx https://lrwinx.github.i ...
- 蓝牙配对码配置错误_安卓系统蓝牙配对流程分析
安卓系统蓝牙配对流程分析 配对流程基本上始于首次连接一个蓝牙设备的过程中,本端的搜索流程结束获取到该设备的BluetoothDevice信息,就可以开启配对流程. 配对,顾名思义就是将两个设备通过相关 ...
- 蓝牙配对不弹配对框_配对编程在工作场所的好处和陷阱
蓝牙配对不弹配对框 Pair programming is two programmers working together at one workstation. 结对编程是指两个程序员在一个工作站 ...
- 安卓application_安卓系统蓝牙配对流程分析
安卓系统蓝牙配对流程分析 配对流程基本上始于首次连接一个蓝牙设备的过程中,本端的搜索流程结束获取到该设备的BluetoothDevice信息,就可以开启配对流程. 配对,顾名思义就是将两个设备通过相关 ...
- 如何写出更优雅的代码——编程范式简述
<如何写出更优雅的代码--编程范式简述>源站链接,阅读体检更佳! 什么是程序? 1976年,瑞士计算机科学家,Algol W,Modula,Oberon 和 Pascal 语言的设计师 N ...
- android蓝牙配对 自动联接,Android系统下蓝牙自动配对连接方法
Android系统下蓝牙自动配对连接方法 [专利摘要]本发明涉及一种Android系统下蓝牙自动配对连接方法,其包括如下步骤:步骤1.在Android设备端内存储上次进行蓝牙连接蓝牙外设的蓝牙地址,并 ...
最新文章
- UVA1327 King‘s Quest(强连通分量、给王子们匹配公主系列 - 1 )
- 简单几步解决企业USB端口隐患
- php sql注入 替换,通过替换单引号来防止SQL注入
- 大数据WEB 部署项目到linux中
- java restful中文乱码_restful服务接口访问乱码 和 505错误
- 自然语言处理与中文分词的难点总结--学习笔记
- py thon 多线程(转一篇好文章)
- “大数据”有哪些具体的成功应用?
- python surprise库_Python推荐系统库--Surprise实战
- 十大排序算法——选择排序法
- 程序员Java代码不会写,菜鸡程序员都是怎样写代码的?
- C语言每日一练——第88天:汉诺塔问题(河内塔)
- 打印机出现另存为xps_共享打印机打印出现另存为*.xps,现把打印机驱动改成打印机的型号,可客户机还是打...
- cc直播怎么显示服务器,CC直播像素杯四大服务器严阵以待 MC精彩赛事即刻开启...
- LLVM 系统入门¶
- 怎么给input插入一个图片
- 微信小程序剪切图片的功能
- python 某文书网JS逆向 登录加密算法还原
- mac,macbook 连接蓝牙耳机播放音乐断断续续
- 计算机学院运动会海报,运动会海报评比 | 第三十五届田径运动会,咱们燥起来...