首页 > 解决方案 > 如何实现BLE安全?

问题描述

我们通过 BLE 实现了 Linux 设备和移动应用程序之间的通信。我们可以使用免费的应用程序“nRF Connect”来读取和写入数据。现在我们需要支持 BLE 安全性。基本上我们的数据是敏感的。我们希望保护我们的数据免受 MITM 的侵害。因此,我们需要支持合理的高安全标准。看来“安全模式 1,级别 3:经过身份验证的加密配对”是我们需要的。我们的设备不支持视觉输入。我们在 Linux 端使用 BlueZ、D-Bus 和 Python3。

但我有一些实际问题:

  1. 对于配对,我们如何支持密码保护?这仅适用于移动应用程序开发人员吗?
  2. 我们如何知道 Linux 端何时发生配对?我们可以从 BlueZ Python API 使用回调或通知吗?
  3. 数据加密如何工作?有人提到AES-CMAC,有人提到AES-CCM?我们应该使用哪一个?所以我们只需要在 Linux Python 上加密数据并发送数据?

标签: python-3.xbluetooth-lowenergybluez

解决方案


  1. 如果您想在连接到 LE 设备之前启动配对,您必须使用btmgmt 工具设置 le、secure-conn 和bondable 。根据您的硬件支持的 LE 版本,您可以(在某种程度上)进行基于密钥的配对。参考链接和链接,如果我们将您的 Linux 设备的 IO 功能指定为 DisplayYesNo(请参阅代理功能),如果硬件支持 LE 4.2 或更高版本,您可以使用密钥比较启动一对。在 LE 版本低于 4.2 的任何其他情况下,您将需要某种方式的键盘输入或显示输出来执行基于密钥的配对。(免责声明:我只尝试过 LE 的旧配对,即 <4.2,它确实需要基于密钥配对的某种输入或输出方式。4.2+ 的结果基于读数)。
  2. 您必须定义配对代理并使用 Blue Z 代理管理器 API 注册它。每当出现配对密钥请求或提示确认时,您都会收到对注册代理的相应回调。您可以定义在代理实现中应该做什么。您可以在此处参考代理 API和 bluez 测试代码中的示例实现 (test/simple-agent)
  3. 我认为,当您将特征属性设置为“encrypt-write”或“encrypt-read”时,bluez 会进行加密。我没有太多关于这方面的信息,但你可以参考这个来了解加密在 LE 中是如何工作的,你可以使用一些 hci 日志捕获工具来捕获和分析 hci 数据,并查看在配对过程中各层发生了什么(例如: btmon 捕获 hci 日志

推荐阅读