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