如何使用Bluez5.50使用BLE连接加密数据

时间:2019-01-25 16:23:34

标签: c++ security encryption bluetooth-lowenergy bluez

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

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

我在搜索使用BLE加密机制的可能性时发现了不一致的意见。有人建议使用它,而另一些人则建议不要使用它,而推荐使用诸如Cripto ++库之类的应用程序级加密。

  1. 哪个是最好的解决方案?

谢谢

1 个答案:

答案 0 :(得分:1)

我的建议是始终对连接进行加密。请参阅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

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

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

如果要查看基础API,请查看BlueZ source code,然后可以从client/main.c开始进行连接和配对命令。

最后,正如所罗门·斯洛(Solomon Slow)所指出的,如果您承诺保护敏感数据,那么您绝对应该进行多级加密。换句话说,应该在软件中发送链接之前对链接以及数据进行加密,如果您的设备支持硬件级加密,那么也应进行加密。

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

我希望这会有所帮助。