c++ - 如何使用 Bluez5.50 通过 BLE 连接加密数据

标签 c++ security encryption bluetooth-lowenergy bluez

我正在开发一个处理数据传输的 C++ 项目。我的系统由两个不同的设备组成,它们必须以可信模式交换敏感数据。为此,我在 Raspberry Pi 上下载并设置了最后一个 bluez 库 (v5.50)。

  1. 是否可以使用 bluez API 启用数据加密?

在谷歌上搜索使用 BLE 加密机制的可能性时,我发现了不一致的意见。有人建议使用它,而另一些人则不鼓励它,转而支持应用程序级加密利用,例如 Cripto++ 库。

  • 哪个是最佳解决方案?
  • 谢谢

    最佳答案

    我的建议是始终对连接进行加密。请参阅this answer这解释了加密连接与开放连接的好处和重要性。

    关于加密连接,您可以通过与设备配对来轻松实现这一点。在 BLE 中,配对允许对连接数据包进行加密。使用 BlueZ,您可以使用 bluetoothctl 命令轻松地从命令行执行此操作,如下所示:-

    bluetoothctl
    [bluetoothctl] connect 00:11:22:33:44:55
    [bluetoothctl] pair 00:11:22:33:44:55
    

    事先,请确保您的 BlueZ 设备可以执行/接受连接和配对,如下所示:-

    btmgmt connectable on
    btmgmt bondable on
    btmgmt io-cap 
    btmgmt 3
    

    最后一个命令将您的 IO 功能设置为 NoInputNoOutput,但您可以将其更改为以下值之一:-

    0       DisplayOnly
    1       DisplayYesNo
    2       KeyboardOnly
    3       NoInputNoOutput
    4       KeyboardDisplay
    

    但是,如果您这样做,则需要在启动 bluetoothctl 时传递等效的命令行选项,如下所示:-

    bluetoothctl --agent KeyboardOnly
    bluetoothctl --agent KeyboardDisplay
    bluetoothctl --agent NoInputNoOutput
    bluetoothctl --agent DisplayOnly 
    

    如果您想查看其底层 API,请查看 BlueZ source code ,您可以从 client/main.c 开始用于连接和配对命令。

    最后,正如 Solomon Slow 指出的那样,如果您 promise 保护敏感数据,那么您绝对应该采用多级加密。换句话说,链接以及数据在软件中发送之前都应该加密,如果您的设备支持硬件级加密,那么也应该这样做。

    有关 BLE 加密的更多阅读,请访问 Bluetooth Specification版本 5.0,第 2 卷,H 部分,第 1 节:安全概述。

    我希望这会有所帮助。

    关于c++ - 如何使用 Bluez5.50 通过 BLE 连接加密数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54369175/

    相关文章:

    c++ - boost::gregorian::date 没有 `set-type` 函数?

    c++ - 我有第三方库,我有错误 LNK2019 : unresolved external . .. 如何调查修复它

    java - RSA 签名异常 : Signature length not correct

    python - 相关查询什么是最好的 python 加密方法

    c++ - 如何在没有_setmode的情况下在C++中输出unicode

    Java 8 Webstart 安全弹出窗口

    java - 迁移java8到java11 : import com. sun.security.auth.module.NTSystem

    linux - 未修补的 Linux 内核漏洞

    node.js - 我可以加密一个字符串,以便可以在可计算的时间内破解它吗?

    c++ - 表达式 SFINAE 重载传递函数指针的类型