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

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

我正在在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;
...

}
android encryption bluetooth-lowenergy gatt
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.