蓝牙协议之配对和绑定学习笔记

article/2025/10/8 10:02:11

蓝牙配对及绑定专业术语

术语描述
BDA蓝牙设备地址
RPAResolvable Private Address的缩写,可解析的蓝牙设备地址,它会周期性的变化
IRK全称:Identity Resolving Key,用于解析蓝牙设备地址的密钥
STKShort 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,具备显示能力
配对响应命令格式:
在这里插入图片描述
外设安全请求命令格式:
#pic_center

(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。


http://chatgpt.dhexx.cn/article/aMoq1W1J.shtml

相关文章

android开发之蓝牙配对连接的方法

新年第一篇。 最近在做蓝牙开锁的小项目,手机去连接单片机总是出现问题,和手机的连接也不稳定,看了不少蓝牙方面的文档,做了个关于蓝牙连接的小结。 在做android蓝牙串口连接的时候一般会使用 BluetoothSocket tmp null; // G…

蓝牙配对

蓝牙HC05是主从一体的蓝牙串口模块,简单的说,当蓝牙设备与蓝牙设备配对连接成功后,我们可以忽视蓝牙内部的通信协议,直接将将蓝牙当做串口用。当建立连接,两设备共同使用一通道也就是同一个串口,一个设备发…

Android蓝牙自动配对Demo,亲测好使!!!

蓝牙自动配对,即搜索到其它蓝牙设备之后直接进行配对,不需要弹出配对确认框或者密钥输入框。 转载请注明出处http://blog.csdn.net/qq_25827845/article/details/52400782 源码下载地址:https://github.com/chaohuangtianjie994/BlueTooth-A…

HC05蓝牙模块配对指南(教程)

HC05蓝牙模块配对指南(教程) 1.准备两个蓝牙模块,一个作为主机,一个作为从机 本人调试过程中用到的是正点原子的HC05蓝牙模块,其余模块的调试大同小异。 2.进入AT状态 进入AT状态有2种方法: 1,上电同时…

android 实现ble蓝牙自动配对连接

蓝牙自动配对,即搜索到其它蓝牙设备之后直接进行配对,不需要弹出配对确认框或者密钥输入框。 本文章用来连接蓝牙设备ai-thinker,如果你要连接其他蓝牙设备,注意修改相关名字以及修改设备初试pin值。 将Demo安装在Android手机上…

一篇文章带你解读蓝牙配对绑定

BLE配对绑定解读 什么是低功耗蓝牙配对?什么又是绑定?配对和绑定有什么区别?配对有什么好处?如何删除绑定信息?如何确定配对的安全等级?just work的配对一定就不安全吗?如何开发自己的配对应用…

蓝牙配对流程(一)

一、扫描 被动扫描(主从之间没有扫描请求与扫描响应) 2.主动扫描(主从之间有扫描请求与扫描响应) 二、过滤 1、信息匹配(是否在白名单) 三、建立连接 1、建立连接 建立连接后的结果: 连接成…

蓝牙协议和配对

蓝牙协议 蓝牙协议分层 物理层(PHA),链路层(LL),HCI(可选),GAP层,L2CAP,SMP , ATT ,GATT GAP层角色总结 对于蓝牙的主机和蓝牙的从…

蓝牙(二)蓝牙搜索、配对、连接

1.搜索 从上一节我们可以知道,蓝牙状态发生了改变,并发生了回调。咱们就从回调开始。 DevicePickerFragment.java 用于蓝牙设置界面的蓝牙配置和管理 Overridepublic void onBluetoothStateChanged(int bluetoothState) {super.onBluetoothStateChange…

Android蓝牙配对

上一篇博客介绍了Android ble的一些情况。 http://blog.csdn.net/guijiaoba/article/details/41172403 蓝牙如果链接好,能够读写,基本上完成了。蓝牙还有个比较烦人的东西,就是蓝牙配对。 Android ble4.0使用的配对方式和原先版本的配对方式…

Android蓝牙开发(二)之蓝牙配对和蓝牙连接

上篇文章:https://blog.csdn.net/huangliniqng/article/details/82185983 讲解了打开蓝牙设备和搜索蓝牙设备,这篇文章来讲解蓝牙配对和蓝牙连接 1.蓝牙配对 搜索到蓝牙设备后,将设备信息填充到listview中,点击listiew则请求配对…

BLE蓝牙的连接和配对过程

一 连接 同一款手机,为什么跟某些设备可以连接成功,而跟另外一些设备又连接不成功?同一个设备,为什么跟某些手机可以建立连接,而跟另外一些手机又无法建立连接?同一个手机,同一个设备&#xff…

BLE蓝牙的配对过程浅析

BLE蓝牙配对过程 在了解到Bluetooth协议的大概后,本篇文章简单的梳理一下BLE蓝牙的配对过程和配对过程的数据格式,对于后面理解蓝牙的集中配对模式及相关漏洞浅浅奠定一下基础。 和经典蓝牙一样,协议为处于连接状态的BLE设备,定…

蓝牙设备的连接与配对

蓝牙是一种短距离无线通信技术,它由爱立信公司于1994年创制,原本想替代连接电信设备的数据线,但是后来发现它也能用于移动设备之间的数据传输,所以蓝牙技术在手机上获得了长足发展。 因为手机内部的通讯芯片一般同时集成了2G/3G/4…

Android 蓝牙连接,蓝牙配对,自动连接蓝牙

趁热打铁,这篇文章写于刚写完蓝牙配对Demo,主要介绍配对蓝牙的具体编码步骤,开整! 首先上效果图,看一下是否符合读者现在的需求 主要核心代码没有想象中那么复杂,首先要去申请一下权限,不仅需要蓝牙权限…

蓝牙配对方式

4种蓝牙配对方式,通俗地说: 1.Numeric Comparison:配对双方都显示一个6位的数字,由用户来核对数字是否一致,一致即可配对。例如手机之间的配对。 2.Just Works:用于配对没有显示没有输入的设备,…

蓝牙的配对和连接的建立过程

蓝牙的建立过程是一个复杂的过程,即使有过相当一段工作和使用经验的人,如果不仔细去了解还是理解不全。 平时我们用蓝牙耳机听音乐,和不同的设备共享文件,打电话等,都有一个配对--连接--传输数据的过程。 配对&#…

蓝牙|标准蓝牙配对方式

蓝牙:BlueTooth,是一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换,蓝牙又分为传统/标准蓝牙和BLE蓝牙。 在了解配对方式前,先了解设备的IOCapacity,IOCapcaity是由设备InputCapacity和OutputCapacity组合而成…

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

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

蓝牙 - 配对和连接

什么是蓝牙配对? 蓝牙配对是为了连接设备的一种信息注册方法。通过在设备之间注册设备信息(配对),它们可以连接。要使用一个蓝牙设备,你必须首先将其与另一个蓝牙设备配对。配对有点像交换电话号码。类似于你必须与你…