Android 如何在安全 BLE 连接中使用 "Diffie Hellman Key Exchange" 方法?
Android How to Use "Diffie Hellman Key Exchange" Method in Secure BLE Connection?
我正在设计一个包含 RF-BM-BG22A1 BLE 5.2 模块的电路并自己编写嵌入式软件。同时,我正在编写一个 Android 应用程序,它将通过 BLE 与该模块进行连接和通信。
我在 Android 端使用以下项目的 类(SerialListener,SerialService,SerialSocket...)。 (https://github.com/kai-morich/SimpleBluetoothLeTerminal)
现在,我可以使用 pin(从 phone 输入)与 BLE 模块配对并连接,并且可以毫无问题地与其通信。
不确定这有多安全。
我想将“LE 安全连接”与“Diffie Hellman 密钥交换”结合使用。
哪一方决定使用哪种安全方法以及如何使用?
Android 方面还有什么需要做的吗?
双方宣传他们的 I/O 能力以及是否支持 LE 安全连接。然后协议根据这些属性选择可能的最高安全级别。
Android 支持 LESC(至少在最新版本中)和所有 I/O 功能,因此安全级别将取决于远程设备的能力。
如果您只是将 BLE 模块配置为支持 LESC,那么在与 Android 设备配对时将始终使用该功能。
不幸的是,Android 的蓝牙 API 目前不包含任何功能来检查或强制执行是否使用了 LE 安全连接。这意味着 MITM 攻击,例如降级到 non-LESC,当 phone 充当中心时,仍然可能在没有人注意的情况下进行(参见 https://www.usenix.org/conference/usenixsecurity20/presentation/zhang-yue)。
我正在设计一个包含 RF-BM-BG22A1 BLE 5.2 模块的电路并自己编写嵌入式软件。同时,我正在编写一个 Android 应用程序,它将通过 BLE 与该模块进行连接和通信。
我在 Android 端使用以下项目的 类(SerialListener,SerialService,SerialSocket...)。 (https://github.com/kai-morich/SimpleBluetoothLeTerminal)
现在,我可以使用 pin(从 phone 输入)与 BLE 模块配对并连接,并且可以毫无问题地与其通信。
不确定这有多安全。
我想将“LE 安全连接”与“Diffie Hellman 密钥交换”结合使用。
哪一方决定使用哪种安全方法以及如何使用?
Android 方面还有什么需要做的吗?
双方宣传他们的 I/O 能力以及是否支持 LE 安全连接。然后协议根据这些属性选择可能的最高安全级别。
Android 支持 LESC(至少在最新版本中)和所有 I/O 功能,因此安全级别将取决于远程设备的能力。
如果您只是将 BLE 模块配置为支持 LESC,那么在与 Android 设备配对时将始终使用该功能。
不幸的是,Android 的蓝牙 API 目前不包含任何功能来检查或强制执行是否使用了 LE 安全连接。这意味着 MITM 攻击,例如降级到 non-LESC,当 phone 充当中心时,仍然可能在没有人注意的情况下进行(参见 https://www.usenix.org/conference/usenixsecurity20/presentation/zhang-yue)。