【问题标题】:How to implement BLE security?如何实现BLE安全?
【发布时间】:2019-11-04 17:25:42
【问题描述】:
我们通过 BLE 实现了 Linux 设备和移动应用之间的通信。我们可以使用免费的应用程序“nRF Connect”来读取和写入数据。
现在我们需要支持 BLE 安全性。基本上我们的数据是敏感的。我们希望保护我们的数据免受 MITM 的侵害。因此,我们需要支持合理的高安全标准。看来“安全模式 1,级别 3:经过身份验证的加密配对”是我们需要的。我们的设备不支持视觉输入。我们在 Linux 端使用 BlueZ、D-Bus 和 Python3。
但我有一些实际问题:
- 对于配对,我们如何支持密码保护?这仅适用于移动应用开发者吗?
- 我们如何知道在 Linux 端何时发生配对?我们可以从 BlueZ Python API 使用回调或通知吗?
- 数据加密如何工作?有人提到AES-CMAC,有人提到AES-CCM?我们应该使用哪一个?所以我们只需要在 Linux Python 上加密数据并发送数据?
【问题讨论】:
标签:
python-3.x
bluetooth-lowenergy
bluez
【解决方案1】:
- 如果您想在连接到 LE 设备之前启动配对,您必须使用 btmgmt tool 设置 le、secure-conn 和可绑定。根据您的硬件支持的 LE 版本,您可以(在某种程度上)进行基于密钥的配对。参考 this 和 this 链接,如果我们将您的 Linux 设备的 IO 功能指定为 DisplayYesNo(请参阅 agent capabilities),如果硬件支持 LE 4.2 或更高版本,您可以使用密钥比较来启动配对。在 LE 版本低于 4.2 的任何其他情况下,您将需要某种方式的键盘输入或显示输出来执行基于密钥的配对。(免责声明:我只尝试过 LE 的旧配对,即
- 您必须定义配对代理并使用 Blue Z 代理管理器 API 注册它。每当出现配对密钥请求或提示确认时,您都会收到对注册代理的相应回调。您可以定义在代理实现中应该做什么。您可以参考代理 API here 和 bluez 测试代码中的示例实现 (test/simple-agent)
- 我认为,当您将特征属性设置为“encrypt-write”或“encrypt-read”时,bluez 会进行加密。我没有太多关于这方面的信息,但你可以参考this 了解加密在 LE 中的工作原理,你可以使用一些 hci 日志捕获工具来捕获和分析 hci 数据,并查看在配对过程中各层发生了什么( example: btmon to capture hci logs)