【问题标题】: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。

但我有一些实际问题:

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

【问题讨论】:

    标签: python-3.x bluetooth-lowenergy bluez


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-07
      • 2011-05-25
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 2012-05-30
      • 2013-08-26
      相关资源
      最近更新 更多