深入理解低功耗蓝牙的配对过程- Part 1 Pairing Feature Exchange

本文深入剖析蓝牙低功耗(BLE)的配对过程,特别是配对特性交换阶段。内容涉及蓝牙核心规范中的Security Manager(SM)、LE legacy pairing与LE Secure Connections的区别,以及配对请求/响应数据包的内容,包括IO Capabilities、OOB Data Flag、Bonding_Flags等关键字段的解释。此外,还提到了Nordic nRF5 SDK15.3中的相关代码实现。

在蓝牙核心规范中,有三个主要的架构层:Controller、Host和Application。在Host层,有一个名为Security Manager (SM)的模块(如下图以Nordic协议架构所示红色标注的位置),它定义了配对和密钥分发的方法和协议、相应的安全toolbox,以及定义了配对命令帧格式、帧结构和超时限制的Security Manager协议(SMP)。安全管理器(SM)使用密钥分发方法来执行无线通信中的认证和加密功能。

执行配对以建立密钥,再使用密钥加密链接。然后执行特定于传输的密钥分发来共享密钥。密钥可用于在将来重新连接时加密链接、验证签名数据或执行随机地址解析。一般来说,配对有三个阶段。

  • 阶段1: Pairing Feature Exchange
  • 阶段2:(LE legacy pairing):短期密钥(STK)生成
  • 阶段2:(LE Secure Connections):长期密钥(LTK)生成
  • 阶段3:传输指定密钥分发

在这里我们需要搞清楚两个概念:LE legacy pairing和LE Secure Connections。LE是“low energy”的缩写,是蓝牙4.0及以上版本的主要功能之一。在蓝牙4.2规范中,添加了LE物理传输的安全连接特性,升级了对蓝牙LE物理传输的配对,使用了FIPS-approved的算法(AES-CMAC和P-256椭圆曲线)。为了区分蓝牙4.0和4.1规范中定义的安全连接和配对,将其称为LE legacy pairing,而到蓝牙4.2版本后增加了LE Secure Connections的模式。

下图流程LE legacy pairing和LE Secure Connections两个都有包含

### 低功耗蓝牙 (BLE) 配对和绑定过程分析 #### 设备角色定义 在BLE通信中,存在两种主要的角色:发起者(Initiator)和响应者(Responder)。发起者负责启动配对请求并发送必要的参数给另一方设备;而响应者的职责在于接受这些请求并向对方反馈自身的配置详情[^3]。 #### 配对流程概述 当两台支持BLE技术的装置首次尝试建立安全连接时会经历如下几个阶段: - **交换配对参数** 发起者向目标节点发出`Pairing_Request`消息,其中包含了所期望采用的身份验证模式以及本机硬件特性描述。随后,接收端解析此信息后构建相应的应答报文——即`Pairing_Response`—返回给前者完成初步沟通环节。 - **选择认证方式** 双方可依据实际应用场景选取合适的鉴权手段来保障数据传输的安全性。例如,在某些情况下可能会运用到基于数值比较的方法(Passkey Entry),此时一方会在屏幕上展示一组六位数字供用户手动录入至伙伴单元内以同步临时密钥(TK)[^2]。 - **执行加密算法协商** 完成上述步骤之后便是决定用于保护链路层通讯的具体机制了。这里涉及到长期秘钥(LTK)及其他辅助因子的选择与分配工作,确保后续交互过程中能够有效抵御窃听风险的同时维持高效性能表现[^1]。 - **最终确认与持久化存储** 成功达成一致意见后的下一步就是互相传递签名更新包(Signature_Update),以此作为整个握手仪式结束前最后一步骤。与此同时,双方还需各自保存好本次对话期间产生的各类敏感资料以便日后重连之需,这就是所谓的“绑定”概念。 ```python def ble_pair_and_bind(): """ Simulate the BLE pairing and binding process. This function demonstrates a simplified version of how two devices might go through the steps to establish a secure connection using Bluetooth Low Energy protocol. """ class Device: def __init__(self, role): self.role = role def send_pair_request(self): print(f"{self.role} sends Pairing Request.") def receive_pair_response(self): print(f"{self.role} receives Pairing Response.") def choose_auth_method(self): print(f"{self.role} chooses authentication method.") def negotiate_encryption(self): print(f"{self.role} negotiates encryption algorithm.") def confirm_binding(self): print(f"{self.role} confirms final binding.") initiator = Device('Initiator') responder = Device('Responder') initiator.send_pair_request() responder.receive_pair_response() initiator.choose_auth_method() # e.g., Passkey Entry as described earlier responder.negotiate_encryption() initiator.confirm_binding() ble_pair_and_bind() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值