蓝牙配对及绑定专业术语

术语 描述
BDA 蓝牙设备地址
RPA Resolvable Private Address的缩写,可解析的蓝牙设备地址,它会周期性的变化
IRK 全称:Identity Resolving Key,用于解析蓝牙设备地址的密钥
STK Short Term Key,短期密钥,在LE Legacy配对中用于初始加密
Identity Address 和IRK关联的地址,它不会随时间变化,可以由IRK解析RPA得到
Long-Term Key(LTK) 长期密钥,用于长期的加密
Pairing 配对,产生和交换密钥的过程
Encryption 配对之后的数据是被加密的,或者是重新加密的
Association 配对方式取决于两个设备的IO能力,对于低功耗设备支持Just Works、Numeric Comparison、Passkey Entry和OOB这四种配对方式
Authentication 配对流程使用支持MITM(中间人)保护机制的配对方式
Bonding 绑定,将配对过程生成的密钥保存到Flash
Authorization 授权,这个是除了认证之外的应用层验证
OOB 带外,配对钥匙不会在空中传输,OOB提供MITM保护机制
MITM 中间人保护,MITM在配对过程中提供身份验证,这有助于防止恶意攻击者在密钥交换期间冒充peer设备
MITM-attacks 攻击者在两个连接设备之间扮演成中间人,窃听和篡改设备的发送信息
Just works 无认证的配对方式,密钥的交换没有MITM保护

Pairing

(1)窃听保护

  在蓝牙低功耗中,空中传输的信息可以被附近的设备窃听到,虽然无法避免空中数据包被拦截,但我们可以使用加密手段来防止空中消息被恶意设备解析。
  配对是用来与连接设备创建加密连接的过程。在蓝牙低功耗中,有两种主要的配对模型:LE Legacy(传统)和LE Secure Connection。配对请求命令中PDU中的SC位决定了设备支持哪种配对模型,当集中器和外部设备都支持LE Secure Connections的时候,则使用LE Secure Connections。否则,使用LE legacy pairing。如果两个设备使用LE Legacy配对,并且使用配对方式Just Works或者Passkey Entry,加密连接仍有被窃听的可能 。

(2)MITM Attacks

  BLE受到的另一种攻击就是来自“中间人”攻击。MITM Attack是指恶意设备连接到两个不知情的设备,并拦截两个设备之间发送的消息,攻击设备可以在传递消息之前注入自己的恶意数据。OOB、Passkey Entry和数值比较配对方式提供了MITM保护机制,但Just Works和Passkey Entry这两种关联模型不提供任何被动窃听保护。

(3)配对模型的比较

  这里记录下LE Legacy和LE安全连接配对的异同。
  LE Legacy在配对过程中基本没有防窃听保护,除非使用OOB关联模型,然而它又保证了会话隐私,因为短期密钥(STK)是随机的不固定的,这意味着如果有人找到了STK,他们还是无法解密之前的会话数据。在蓝牙核心规范V4.2中有介绍LE Secure Connections配对,配对过程使用Elliptic Curve Diffie-Hellman密码学以及LE Legacy配对的安全机制,这使得LE Secure Connections配对具备防窃听保护。LE Legacy和LE Secure connections的密钥生成的方法有点区别,LE secure connections相对多了数值比较(Numeric Comparison)。

关联模式 使用条件
Just Works 这个模式用于没有有效OOB数据和设备没有输入能力的情况下
Passkey Entry 用于没有有效OOB数据,但是至少有一个设备具备IO能力能够输入密码,并且另一个设备可显示密码
Out of Band 如果OOB数据在两个连接设备中都是有效的,那么该模式将被使用
Numeric Comparison 该密钥生成方法用于两个设备都支持SC(Secure Connections),可以显示Yes/No消息和拥有输入能力

(4)LE Legacy配对步骤:

(4.1) 配对特征交换
配对过程是怎么开始的?->集中器设备先发送配对请求命令到外设,或者外设发送一个加密请求(Security Request) 。 注意,集中器在接收到加密请求之后可以选择是否初始化配对。不是所有的手机设备都支持加密请求命令,所以在依赖加密请求命令初始化配对或者加密之前最好事先看下安卓和苹果蓝牙相应的开发指南,下图展示的是配对特性交换。

  配对请求命令包含集中器支持的配对类型信息,而外设响应请求中又包含了外设它自己支持的安全特征。两个设备共同支持的安全特征将决定使用哪个配对关联模型去生成加密密钥。下面是配对请求的命令格式:

其中IO能力有:
··Display Only Device只有输出显示的能力
··NoDisplay Or InputDevice没有输入输出能力
··Display and Yes or No capable能显示并且有输入Yes或No的能力
··Keyboard Only能输入0~9,没有显示
··Both Keyboard and Display Capable能输入0~9,具备显示能力
配对响应命令格式:

外设安全请求命令格式:

(4.2)配对步骤2:
  在步骤二中,密钥产生并且分享密钥用于加密连接。生成的密钥的类型取决于用的是LE Legacy还是LE secure connections,后者生成的是LTK,前者用的是TK和STK,在接收到配对响应之后,配对确认值会被交换。这里介绍下配对确认值(Confirm Value),配对发起设备用的名叫Mconfirm,而Peer设备用的名叫Sconfirm,它们的字节长度是 16Bytes。每个设备会产生一个随机数(LP_RAND_I和LP_RAND_R-Legacy配对初始值和响应随机数),可与临时密钥TK一起生成配对确认值。

  在集中器设备接收到Pairing Confirm命令之后,集中器将会发送Pairing Random命令给外设,该命令中包含了随机数,这个随机数恰是用来计算配对确认值的。紧接着,外设也会响应随机数给集中器,同样的通过它能计算出外设的配对确认值。两个设备将根据先前交换的确认值检查随机数,如果数值对的上,那么配对流程继续;如果数值对不上,外设会发送Pairing Failed命令,该命令包含了配对失败的原因。
  如果Pairing Random交换成功,集中器将会使用STK将链接加密。STK是怎么得到的呢?STK是由短期密钥和随机数计算得到的,因此STK不会通过Air传播。下图可以直观的描述蓝牙配对的STK产生过程:

  注意上图,如果Confirm值解出来不对,那么外设会发送Pairing Failed命令。
  到现在我们应该对配对流程有所了解,那么接下来再看看关联模型(钥匙生成方法)和它们各自的优点缺点。
Just works:
  这种关联模型直接将TK设置成0,我们前面也记录过STK是由TK和rand计算得出的,TK设置为0,而随机数在空中传输是不加密的,因此别人计算STK是非常简单的。同样地,此方法不提供任何对参与连接的设备进行身份验证的方法。但是呢,考虑到在配对过程中没人会去窃听,用于生成STK的随机数还是确保了该关联模型是安全的。
Passkey entry:
  该关联模型的TK是由6个数字组成。应用场景我们应该都有遇到过,就是手机试图连接一个蓝牙设备,手机上会弹出一个窗口叫你输入6个数字的密码,这里的密码就是TK,当我们把密码输好之后,密码会通过Air传输,所以如果在TK传输期间有人在监听,那么这种场景下用这关联模型是不妥的。之所以认为这种方法比Just Works更安全,是因为它有认证环节,从而阻止了MITM攻击。
Out of Band
  该关联模型使用了另一种无线技术传输TK,如果OOB通道不受MITM攻击,那么我们可以放心地把蓝牙连接看成也是不受MITM攻击的。与此同时,如果OOB通道不受监听,那么该关联模型可以被认为是最安全的,但这需要一个完全安全的OOB通道,常用的无线技术选择是NFC协议,因为只有两个设备靠近时才会建立连接,使用NFC还允许使用非常长的TK,从而大大增强安全性。

Bonding

  绑定是存储密钥的过程,这里说的密钥是在配对过程生成的。绑定的目的是在以后的连接过程能迅速恢复加密。绑定信息一般是存储在flash里面,当设备重新连接时绑定信息从Flash中读取后应用。

(1)Privacy

  这小节记录绑定的私密性。
  反跟踪(Anti-Tracking):蓝牙设备地址(Bluetooth deice address, BDA)就像是蓝牙设备的身份证号,这个地址是蓝牙设备之间交互所必需的,设备发送的很多数据包中都附上了自己的蓝牙设备地址。然而,因为这个地址可以被附近其他的蓝牙设备发现,使得它可以潜在的用于收集给定设备的信息。为了防止被跟踪,BLE设备可以使能一些Privacy特性,比如不使用固定的地址,而是周期性生成新的地址并且用新的地址。

(2)Bluetooth Address类型

  Bluetooth Core Specification Version 5.2 中有定义蓝牙地址类型,总共有四种类型:

Public Address 直接使用Identity Address(BDA是固定的)
Random Static Address 每次上电生成一个随机的地址,这个地址在设备供电期间不再变化
Resolvable Private Address(RPA) 周期性的生成随机地址,使用IRK生成,peer设备可以使用IRK解析随机RPA得到对方的Identity Address
Non-resolvable Private Address 也是周期性产生随机地址,但是它不能解析出Identity Address

(3)产生和解析Private地址

  为了能够产生可解析的私密地址,设备往往将IRK作为传参给随机地址哈希函数(在蓝牙协议栈中,生成随机地址使用的是硬件哈希算法),函数的输出只是可解析私密地址Resolvable Private Address的一部分。没有IRK的Peer设备只能确定设备正在使用RPA,但是不能确定设备的身份地址 Identity Address。

蓝牙协议之配对和绑定学习笔记相关推荐

  1. 【LWIP】LWIP协议|相关知识汇总|LWIP学习笔记

    这里作为一个汇总帖把,把以前写过的LWIP相关的博客文章汇总到一起,方便自己这边查找一些资料. 收录于: [LWIP]LWIP协议|相关知识汇总|LWIP学习笔记 LWIP协议 [LWIP]LWIP网 ...

  2. LoRaWan协议1.1 ClassB部分学习笔记

    LoRaWan协议1.1 ClassB部分学习笔记 目录 8.对Class B的介绍 9.同步网络发起下行的原理(class b独有) 10.Class B上行帧 11. 下行ping包格式(clas ...

  3. Kaldi决策树状态绑定学习笔记(一)

    建议在csdn资源页中免费下载该学习笔记的PDF版进行阅读:)点击进入下载页面 Kaldi决策树状态绑定学习笔记(一) --如何累积相关统计量? 目录 Kaldi决策树状态绑定学习笔记一 如何累积相关 ...

  4. CAN通讯协议层--秉火STM32学习笔记

    首先非常感谢秉火团队为我们提供学习STM32的丰富资料及详细教程,此笔记仅用作个人学习记录,以此加深记忆,如果读者也喜欢,请一同感谢并支持秉火团队. 1. CAN 的波特率及位同步 由于CAN 属于异 ...

  5. 三、Web服务器——HTTP协议 Response对象 ServletContext对象 学习笔记

    今日内容 1. HTTP协议:响应消息 2. Response对象 3. ServletContext对象 HTTP协议: 1. 请求消息:客户端发送给服务器端的数据* 数据格式:1. 请求行2. 请 ...

  6. Python学习笔记28:从协议到抽象基类

    Python学习笔记28:从协议到抽象基类 今后本系列笔记的示例代码都将存放在Github项目:https://github.com/icexmoon/python-learning-notes 在P ...

  7. nrf52832 学习笔记(六)配对和绑定

    nrf52832 学习笔记(六)配对和绑定 配对绑定推荐博客低功耗蓝牙配对绑定解读和实践 蓝牙在配对之前都是明文通信的,也就是说主从机之间传输的数据包可以被第三方抓取分析逆向,而且如果没有配对,谁都可 ...

  8. nrf52832 学习笔记(七)蓝牙协议层级理解

    nrf52832 学习笔记(七)蓝牙协议层级理解 本文主要由一下几篇文档摘录汇总而成 ,如有错误欢迎斧正 da14531 蓝牙协议文档 深入浅出低功耗蓝牙(BLE)协议栈 低功耗蓝牙ATT/GATT/ ...

  9. 蓝牙学习八(配对与绑定)

    1.简介  Paring(配对)和Bonding(绑定)是实现蓝牙射频通信安全的一种机制,有两点需要注意: Paring/bonding实现的是蓝牙链路层的安全,对应用层来说是完全透明的.也就是说,不 ...

  10. 低功耗蓝牙学习笔记-属性协议

    什么是属性协议? 属性协议(Attribute Protocol)简称ATT: 属性协议既包含了关于属性的定义,也包含了属性的操作方法,既属性协议包含了通信协议的内容,属性协议通讯操作的对象是属性实例 ...

最新文章

  1. 企业品牌网站建设都涉及收取哪些方面的费用?
  2. CentOS6.5通过jdk8.rpm文件安装JDK8
  3. SQL Server 2008带字段注释导入Power Designer 9.5
  4. 真香!2020最新版《神经网络与深度学习》中文版更新完毕,PDF免费开放下载~...
  5. 为什么说_br__标签需要闭合
  6. 跟我一起学Redis之Redis事务简单了解一下
  7. java nio拷贝文件_Java 7 – NIO文件革命
  8. Java 并发(JUC 包-05)
  9. Zookeeper C API 指南七(Zookeeper 辅助 API 介绍)
  10. linux camera 存储,OpenCV调用摄像头录像并保存下来
  11. JavaScript —— Symbol数据类型之不延伸
  12. 关于CSS中背景图片透明度问题
  13. 计算机网络监控技术,实现网络流量监控的核心技术要求
  14. 【JPA/ddl-auto】关于JPA下hibernate通过设置ddl-auto完成数据库自动创建表格
  15. Java Web 网络商城案例演示十五 订单详情功能(提交订单支付界面)
  16. 【蓝桥杯选拔赛真题40】Scratch跳格子 少儿编程scratch蓝桥杯选拔赛真题讲解
  17. 全志T3开发板——嵌入式入门学习测试教程(7)
  18. c语言 周期性矩形脉冲,【转载】微分电路和积分电路
  19. Java实现 对ip白名单的限制
  20. VMware Workstation Player 找不到共享文件夹的解决方法

热门文章

  1. 【计算机视觉】Lecture 28:跟踪简介
  2. 十年之前..., 十年之后...
  3. 苹果Mac安全使用教程:如何使用文件保险箱加密Mac数据
  4. 技巧分享:简单的流程图怎么作?
  5. SUCTF_2019部分题解复现
  6. mysql reconnect_在设置了MYSQL_OPT_RECONNECT之后,mysql_ping是否还有必要?
  7. Java使用itextpdf实现为已有的pdf文件添加水印
  8. 事业公共基础计算机,2011安徽省事业编公共基础知识(必备资料)
  9. Urchin再包装 Google提供免费网络流量分析工具(zz)
  10. Proximal Algorithms 6 Evaluating Proximal Operators