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

BlueZ外设端能否手动控制发起方密钥分发以获取IRK?

解决方案:BlueZ外设获取中心设备IRK实现重配对

环境信息

  • 内核:板载Linux 4.9.84 armv7l
  • BlueZ版本:5.65
  • 对等设备:Android 12 及 iOS 16.6
  • 角色:手机为中心设备,开发板为外设

问题概述

执行以下操作流程后:

  1. 通过btmgmt配置外设为可绑定状态:
btmgmt power off
btmgmt connectable on
btmgmt pairable on
btmgmt le on
btmgmt bondable on
btmgmt power on
btmgmt advertising on
  1. 手机与开发板完成配对

实际结果:手机成功连接并启用链路加密,但中心设备未分发IRK,无法解析中心设备的可解析MAC地址,导致无法利用已生成的LTK完成重配对。

核心原因:根据蓝牙Core v5.4 vol3,Part H. page 1602规范,当外设的发起方密钥分发未包含IdKey时,中心设备不会主动发送IRK。此前尝试修改IO能力(NoInputNoOutput)、切换配对模式(传统配对/安全连接),均无法调整发起方密钥分发配置。

可行解决方案

1. 修改BlueZ全局配置强制请求IdKey

编辑BlueZ主配置文件/etc/bluetooth/main.conf,在[General]段落中添加或修改以下配置项:

LEKeyDistribution = id

该配置会强制外设在配对的密钥分发阶段,向中心设备请求IdKey(对应IRK相关密钥),触发中心设备分发IRK。

2. 重启蓝牙服务使配置生效

执行命令重启BlueZ服务:

systemctl restart bluetooth

之后重新执行原有的btmgmt外设配置流程,再与手机完成配对,即可获取到中心设备分发的IRK。

3. 验证IRK存储状态

配对完成后,可查看BlueZ的配对信息存储目录/var/lib/bluetooth/<你的外设MAC地址>/<中心设备MAC地址>下的文件,确认其中是否包含IRK相关的条目,以此验证配置是否生效。

4. 适配Linux 4.9内核的额外注意事项

由于使用的Linux 4.9内核版本较旧,若上述配置未生效,需检查BlueZ编译时是否开启了CONFIG_LE_SECURITY相关编译选项。必要时可重新编译BlueZ,编译时添加--enable-le、--enable-security参数,确保低功耗蓝牙安全及密钥分发功能正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:22:14