如何实现BLE安全?

问题描述 投票:0回答:1

我们通过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个回答
0
投票
  1. 如果你想在连接到LE设备之前发起配对,你必须使用以下方法设置le、secure-conn和bondable。btmgmt工具. 根据你的硬件支持的LE版本,你可以(在某种程度上)做一个基于密码的配对。参考 这个这个 链接,如果我们将你的Linux设备的IO能力赋予DisplayYesNo(参见 代理能力),如果硬件支持LE 4.2或以上版本,你可以使用passkey比较来启动配对,如果LE版本低于4.2,你将需要一些键盘输入或显示输出的方式来进行配对。(免责声明:我只尝试了LE的传统配对,即<4.2,它确实需要一些输入或输出方式来进行基于passkey的配对。4.2+上的发现是基于读数的)。)
  2. 您必须定义一个配对代理,并使用Blue Z代理管理器API注册它。每当有配对密钥请求或确认的提示出现时,你会得到相应的回调给注册的代理。你可以定义在代理实现中应该做什么。您可以参考代理API 此处 以及在bluez测试代码中的示例实现(testimple-agent)
  3. 我想,当你把特性属性设置为 "encrypt-write "或 "encrypt-read "时,bluez会进行加密。我没有太多这方面的信息,但你可以参考一下以下内容 这个 你可以使用一些hci日志捕获工具来捕获和分析hci数据,并查看在配对过程中层层递进的情况(例如:用btmon来采集hci日志。)
© www.soinside.com 2019 - 2024. All rights reserved.