一种更优雅的蓝牙配对技术 - 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的配对,提升双模产品的配对体验。

蓝牙设备端要求

  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地址需要保持一致。

  1. 设备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配对流程

  1. 双方建立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)相关推荐

  1. c语言c2182是什么错误,C语言中一种更优雅的异常处理机制

    上一篇文章对C语言中的goto语句进行了较深入的阐述,实际上goto语句是面向过程与面向结构化程序语言中,进行异常处理编程的最原始的支持形式.后来为了更好地.更方便地支持异常处理编程机制,使得程序员在 ...

  2. 6种更优雅书写Python代码!

    1 简介 一些比较熟悉pandas的读者朋友应该经常会使用query().eval().pipe().assign()等pandas的常用方法,书写可读性很高的「链式」数据分析处理代码,从而更加丝滑流 ...

  3. 蓝牙配对机制基础知识

    蓝牙配对机制 为了统一规范,蓝牙在2.1版本引入了安全简单的配对机制,从尔加强了蓝牙通讯安全方面性能.以下总结了蓝牙配对机制: 一.遗留配对(Lagacy pairing){密码配对(PIN Code ...

  4. 教你如何更优雅的设计Java异常

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:lrwinx https://lrwinx.github.i ...

  5. 蓝牙配对码配置错误_安卓系统蓝牙配对流程分析

    安卓系统蓝牙配对流程分析 配对流程基本上始于首次连接一个蓝牙设备的过程中,本端的搜索流程结束获取到该设备的BluetoothDevice信息,就可以开启配对流程. 配对,顾名思义就是将两个设备通过相关 ...

  6. 蓝牙配对不弹配对框_配对编程在工作场所的好处和陷阱

    蓝牙配对不弹配对框 Pair programming is two programmers working together at one workstation. 结对编程是指两个程序员在一个工作站 ...

  7. 安卓application_安卓系统蓝牙配对流程分析

    安卓系统蓝牙配对流程分析 配对流程基本上始于首次连接一个蓝牙设备的过程中,本端的搜索流程结束获取到该设备的BluetoothDevice信息,就可以开启配对流程. 配对,顾名思义就是将两个设备通过相关 ...

  8. 如何写出更优雅的代码——编程范式简述

    <如何写出更优雅的代码--编程范式简述>源站链接,阅读体检更佳! 什么是程序? 1976年,瑞士计算机科学家,Algol W,Modula,Oberon 和 Pascal 语言的设计师 N ...

  9. android蓝牙配对 自动联接,Android系统下蓝牙自动配对连接方法

    Android系统下蓝牙自动配对连接方法 [专利摘要]本发明涉及一种Android系统下蓝牙自动配对连接方法,其包括如下步骤:步骤1.在Android设备端内存储上次进行蓝牙连接蓝牙外设的蓝牙地址,并 ...

最新文章

  1. UVA1327 King‘s Quest(强连通分量、给王子们匹配公主系列 - 1 )
  2. 简单几步解决企业USB端口隐患
  3. php sql注入 替换,通过替换单引号来防止SQL注入
  4. 大数据WEB 部署项目到linux中
  5. java restful中文乱码_restful服务接口访问乱码 和 505错误
  6. 自然语言处理与中文分词的难点总结--学习笔记
  7. py thon 多线程(转一篇好文章)
  8. “大数据”有哪些具体的成功应用?
  9. python surprise库_Python推荐系统库--Surprise实战
  10. 十大排序算法——选择排序法
  11. 程序员Java代码不会写,菜鸡程序员都是怎样写代码的?
  12. C语言每日一练——第88天:汉诺塔问题(河内塔)
  13. 打印机出现另存为xps_共享打印机打印出现另存为*.xps,现把打印机驱动改成打印机的型号,可客户机还是打...
  14. cc直播怎么显示服务器,CC直播像素杯四大服务器严阵以待 MC精彩赛事即刻开启...
  15. LLVM 系统入门¶
  16. 怎么给input插入一个图片
  17. 微信小程序剪切图片的功能
  18. python 某文书网JS逆向 登录加密算法还原
  19. mac,macbook 连接蓝牙耳机播放音乐断断续续
  20. 计算机学院运动会海报,运动会海报评比 | 第三十五届田径运动会,咱们燥起来...

热门文章

  1. Cent OS7基础 第五节
  2. linux core文件截断,Coredump被截断了
  3. 常用的18大学术搜索引擎
  4. 男人二十岁后应该学会的习惯
  5. 使用canvas画出满天繁星
  6. Elasticsearch:《大数据集群学习笔记与实战》之es集群(2)es基本操作
  7. xp oracle10g安装图解,虚拟机xp系统中Oracle 10g的安装
  8. DevTools 无法加载来源映射无法加载 httplocalhost8082axios.min.map 的解决方法
  9. Java学习之路-开局
  10. 将CAD图纸中的线型和文字样式合并的方法技巧(二)