You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否实现无bonding的加密BLE连接?无绑定BLE配对方法

无绑定BLE加密连接实现方案

BLE核心规范里**配对(Pairing)和绑定(Bonding)**是完全独立的两个流程:配对是设备间协商生成临时链路密钥、对当前连接链路加密的过程,不会持久化存储密钥;绑定是配对完成后将链路密钥永久存储到双方设备的存储区,供后续重连时直接使用,也就是系统蓝牙列表里留存的已配对设备。你需要的无绑定加密,本质就是只执行配对加密流程、跳过密钥持久化的绑定步骤。

树莓派端(BlueZ协议栈)配置

  • 如果你通过bluetoothctl命令配置广播服务,直接在交互终端执行以下命令关闭可绑定能力,保留加密配对要求:
# 进入bluetoothctl控制台
bluetoothctl
power on
# 注册配对代理
agent on
# 关键配置:关闭可绑定模式,禁止持久化存储链路密钥
bondable off
# 根据交互需求设置IO能力:无输入无输出选NoInputNoOutput,需要显示配对码选KeyboardDisplay
default-agent
# 开启服务广播
advertise on
  • 如果你是通过DBus/bluepy等方式自定义GATT服务,需要修改两处配置:
    • 注册GATT特征值时,仅配置EncryptRead/EncryptWrite权限,不要添加要求绑定的flag
    • 注册配对Agent时,不要传入触发密钥持久化的参数,设备连接断开后主动删除临时生成的链路密钥即可
  • 不要在BlueZ的agent回调里调用CreateBond相关接口,否则会自动触发绑定流程。

Android端配置

Android系统API确实存在术语混用的问题,所有标注为bond的公开API实际对应绑定流程,临时配对加密不需要主动调用相关接口:

  • 建立GATT连接时,绝对不要主动调用BluetoothDevice.createBond()方法,这个方法会显式触发绑定流程,将设备持久化到系统已配对列表。
  • 正常连接GATT后直接尝试读写需要加密的特征值即可:当树莓派返回链路加密要求时,Android系统会自动弹出配对请求弹窗,完成配对后链路会自动加密,这个过程生成的是临时密钥,不会主动持久化存储。
  • 针对部分国产定制ROM默认将所有配对设备写入绑定列表的兼容问题,可以在GATT连接断开后,通过反射调用系统隐藏方法removeBond()清除对应设备的绑定记录,避免在系统蓝牙列表留存。

效果验证

  • 配对完成后可以通过BLE空口抓包确认链路已加密,读写特征值的内容都是密文传输
  • 主动断开连接后,查看Android系统蓝牙的已配对设备列表,不会留存对应的树莓派设备记录
  • 下次重新连接时会重新触发临时配对流程,不会自动复用之前的密钥完成连接

内容的提问来源于stack exchange,提问作者santiago

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 02:42:28