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

148 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 特征 UUID`0000fff1-0000-1000-8000-00805f9b34fb`
- Write 特征 UUID`0000fff2-0000-1000-8000-00805f9b34fb`
- 服务 UUID代码未硬编码服务 UUID靠服务发现后遍历特征匹配
- 通知开启方式:`setCharacteristicNotification(true)` + 写 CCCD(0x2902)=0x0001
- 写入方式:`WRITE_TYPE_NO_RESPONSE`
- MTU连接后请求 `247`
### 9.4 数据编码/格式
- 默认字符集GBK`ECBLE.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 客户端代码框架**按这些参数整理出来,或者补齐“自定义指令协议”的字段与示例帧。