Files
AI_Printer/BLE_PAIRING_PARAMETERS.md
2026-02-10 17:11:06 +08:00

6.0 KiB
Raw Blame History

BLE 配对关键参数说明

本文档面向通用 BLE 场景概述配对Pairing过程中最关键的参数与含义。配对由 SMPSecurity Manager Protocol执行结果是双方生成并分发密钥进而建立加密链路和可选长期绑定Bonding。文末附上本项目“已配对/可连接从机”的关键参数,便于其他客户端(如 ESP-IDF/ESP32复用连接。

1) 角色与流程层级

  • 角色
    • Central中心/主机)与 Peripheral外设/从机)均可发起配对,但在 SMP 中仍以“发起方/响应方”区分。
    • GATT Client/Server 是应用层角色SMP 只关心链路安全,不直接关心 GATT 读写。
  • 安全版本
    • Legacy Pairing蓝牙 4.0+
    • LE Secure ConnectionsLESC蓝牙 4.2+,更强的密钥协商)

2) 配对方法(由 IO 能力与安全需求决定)

  • Just Works无交互防 MITM 能力弱。
  • Passkey Entry一端显示 6 位码,另一端输入。
  • Numeric Comparison双方显示 6 位码,用户确认一致。
  • OOBOut of Band通过 NFC/二维码等带外信道交换信息,安全性高。

决定因素:设备 IO 能力 + 是否要求 MITM 防护 + 是否使用 LESC。

3) 配对请求/响应的关键字段SMP Pairing Request/Response

这些字段决定配对方式、密钥类型和安全等级,是“配对关键参数”的核心。

  • IO Capability
    • DisplayOnly, DisplayYesNo, KeyboardOnly, NoInputNoOutput, KeyboardDisplay
    • 影响是否可用 Passkey / Numeric Comparison
  • OOB Data Flag
    • 指示是否有 OOB 数据可用于配对
  • AuthReqAuthentication Requirements
    • Bonding是否保存长期密钥
    • MITM是否要求防中间人
    • SC是否要求 LE Secure Connections
    • Keypress是否支持按键通知
  • Max Encryption Key Size
    • 7~16 字节,通常为 16
  • Key Distribution
    • EncKeyLTK 等加密相关)
    • IdKeyIRK/Identity Address
    • SignCSRK用于数据签名
    • LinkKey用于 BR/EDR 互通LE 通常不用)

4) 关键密钥与作用

  • LTKLong Term Key
    • 用于后续重连时的链路加密
  • IRKIdentity Resolving Key
    • 用于解析可解析私有地址RPA实现隐私保护
  • CSRKConnection Signature Resolving Key
    • 用于数据签名,较少使用
  • STKShort Term Key
    • Legacy Pairing 中临时加密用(非长期)

5) 地址与隐私相关参数

  • 地址类型
    • Public Address / Random Address
    • Random 又分 Static / Non-Resolvable / ResolvableRPA
  • 隐私开关
    • 使用 RPA + IRK 可隐藏真实地址,提升隐私与安全

6) 安全等级(常见分级)

  • LE Security Mode 1
    • Level 1无加密
    • Level 2加密Legacy
    • Level 3加密 + MITMLegacy
    • Level 4加密 + MITMLESC
  • LE Security Mode 2
    • Level 1数据签名无加密
    • Level 2数据签名 + MITM

7) 连接参数(与配对间接相关)

这类参数不属于配对协议,但会影响配对体验与稳定性:

  • Connection Interval连接间隔
  • Slave Latency从机延迟
  • Supervision Timeout监督超时

注:若连接不稳定或超时过短,可能导致配对失败或断连。

8) 实际排查时常关注的“关键参数清单”

  • 是否启用 LESCSC 位)
  • 是否要求 MITMAuthReq
  • IO Capability 是否允许所需配对方式
  • Key Size 是否为 16
  • Key Distribution 是否双方一致
  • 是否使用 RPA/IRK隐私
  • 是否允许 Bonding长期记忆配对

9) 本项目 BLE 从机的关键参数(供其他客户端复用)

以下信息基于当前 Android 代码实现,目标是让其他设备/程序连接到同一台 BLE 从机(打印机)。相关代码位置:

  • app/src/main/java/com/example/electronicScale/MainActivity.java
  • app/src/main/java/com/example/electronicScale/ECBLE.java
  • app/src/main/java/com/example/electronicScale/BlueHandler.java

9.1 角色与连接方式

  • Android App 作为 Central / GATT Client
  • BLE 从机为打印机(由广播名过滤判断)

9.2 设备发现与识别参数

  • 广播设备名:lyfPrinter(忽略大小写、忽略首尾空格)
  • 设备地址:扫描得到的 MAC 地址,连接时会去掉冒号作为内部 id
  • 扫描方式:使用 BluetoothAdapter.startLeScan()Legacy 扫描)

9.3 GATT 关键参数

  • Notify 特征 UUID0000fff1-0000-1000-8000-00805f9b34fb
  • Write 特征 UUID0000fff2-0000-1000-8000-00805f9b34fb
  • 服务 UUID代码未硬编码服务 UUID靠服务发现后遍历特征匹配
  • 通知开启方式:setCharacteristicNotification(true) + 写 CCCD(0x2902)=0x0001
  • 写入方式:WRITE_TYPE_NO_RESPONSE
  • MTU连接后请求 247

9.4 数据编码/格式

  • 默认字符集GBKECBLE.setChineseTypeGBK()
  • 写入支持 Hex 字符串转字节:writeBLECharacteristicValue(data, true)
  • 实际指令帧为自定义协议,参考 BlueHandler 中的命令/打包逻辑

9.5 安全/配对相关

  • 代码未调用 createBond() 或设置 PIN/LESC
  • 未显式要求加密或 MITM
  • 推测从机允许无配对/Just Works直连
    • 若固件强制安全配对需要补充IO Capability、AuthReq、Key Size、Key Distribution 等

9.6 连接限制提示

  • 多数 BLE 从机同时只允许一个 Central 连接
  • 若 Android App 已连接ESP32 可能无法同时连接(除非从机支持多连接)

10) ESP-IDF 侧接入要点(简版清单)

  • 扫描广播,优先匹配设备名 lyfPrinter(或直接使用已知 MAC
  • 连接后进行服务发现,查找 fff1/fff2 特征
  • 启用 fff1 通知(写 CCCD = 0x0001
  • fff2 以 Write Without Response 方式写数据
  • 协商 MTU 为 247
  • 按自定义协议发送帧(参考 BlueHandler/DataConvertTool

如果你需要,我可以把 ESP-IDF 的具体 GATT 客户端代码框架按这些参数整理出来,或者补齐“自定义指令协议”的字段与示例帧。