如何确定蓝牙连接是否已加密?

时间:2019-11-07 10:01:12

标签: android encryption bluetooth-lowenergy gatt

我正在建立ble设备和移动设备之间的BLE连接。该连接首先是不安全的,但将更新为LESC,仅在设备端有效。

到目前为止,效果很好。

在Android(目标SDK 28)中,我想检查(更好地获得回调)蓝牙连接是否已加密。我正在使用BLE UART服务示例。

我可以访问BluetoothGatt和BluetoothDevice对象。但是我发现的所有方法,变量都是私有的或@SystemApi。

有人可以帮忙吗?

下面的类声明部分显示了可用的对象:

public class UARTService extends Service {

private final static String TAG = UARTService.class.getSimpleName();

private BluetoothManager mBluetoothManager;
private BluetoothAdapter mBluetoothAdapter;
private String mBluetoothDeviceAddress;
private BluetoothGatt mBluetoothGatt;
...

}

1 个答案:

答案 0 :(得分:0)

对不起,但我认为您不能,这确实很糟糕。根据蓝牙规范,应该能够为每个GATT请求指定一个安全级别,例如,您可以使用Windows的BLE API来指定此安全级别。但是Android似乎没有该功能。没有该功能,它将破坏BLE安全的整个思想。您可以检查设备是否已绑定,但这不能保证连接被加密。

https://developer.android.com/reference/android/bluetooth/BluetoothDevice#createL2capChannel(int)但是,如果您使用L2CAP CoC,则可以用来强制使用MITM保护的链接,但是即使这样,您也不能强制使用LESC(可能会使用传统的MITM配对,但这并不能真正保护MITM完全没有。)