key - 如何在 bluez 5.x 外围设备中硬编码 BLE 配对密码?
问题描述
我需要在我的外围设备中有一个硬编码的密码密码(例如“123456”),以便安卓手机在配对时必须输入此密码。
我正在使用 ubuntu 18.04、bluez 5.48 和板载 TI BLE4.0 + wifi 芯片。
目前,我可以使用堆栈提供的所有其他方法(noinputoutput、Keyboardonly、displayonly 和keyboarddisplay)建立配对。
我的外围设备在生产时没有显示器和键盘,因此计划使用存储在文件中的唯一键。
我尝试修改简单代理代码以返回固定密钥..我还尝试调整 bt-agent 代码以传递密码文件..但是所有这些方法都不能使用,因为堆栈正在创建一个随机密钥而不是我的静态努力编码键:(
我可以在网上看到几十个类似的问题,但没有一个有正确答案。我以前曾在其他几个 BLE 芯片上工作过并达到了相同的要求(cc2650 等带有它们的控制器芯片和堆栈),但对于 bluez 堆栈我不是能够做到。
我听说旧堆栈具有从文件中读取引脚的功能,但是如何在新堆栈中实现相同的功能?
我希望以下几点是强制性的?:1)我必须禁用 hci0 sspmode 2)我需要蓝牙守护程序服务才能运行 3)我需要一个代理来配对
请让我知道是否有人用bluez实现了同样的目标......
谢谢!
解决方案
蓝牙标准规定,每次尝试的密钥都应该是随机的。有一个很好的理由:如果重复使用密钥(至少对于 LE 安全连接),协议的安全属性就会被破坏。所以你可能应该坚持“Just Works”的方法。如果您需要身份验证,请在应用程序层中使用 PAKE 算法。
有关详细说明,请参阅https://devzone.nordicsemi.com/f/nordic-qa/35856/questions-about-lesc-mitm-and-passkey/138216#138216。
推荐阅读
- javascript - React Native 连接与 firebase 错误:“请提供适当的客户端 ID”
- flutter - 弹出页面时重置页面/屏幕状态
- php - 如何将(箭头函数)推入数组?
- r - 无法在 foreach 中运行 Rcpp 函数 - foreach 循环永远不会结束
- html - translateX占用的固定位置元素应该如何居中?
- python - 如何在数组中循环url并在驱动程序中打印css选择器元素,Python Selenium
- java - 防止颤振插件截图
- javascript - 移动导航栏打开时隐藏元素并禁用滚动
- swift - 在 Swift 中获取 ioctl 编号
- python - 缩短字典中键的长度