我正在建立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;
...
}
答案 0 :(得分:0)
对不起,但我认为您不能,这确实很糟糕。根据蓝牙规范,应该能够为每个GATT请求指定一个安全级别,例如,您可以使用Windows的BLE API来指定此安全级别。但是Android似乎没有该功能。没有该功能,它将破坏BLE安全的整个思想。您可以检查设备是否已绑定,但这不能保证连接被加密。
https://developer.android.com/reference/android/bluetooth/BluetoothDevice#createL2capChannel(int)但是,如果您使用L2CAP CoC,则可以用来强制使用MITM保护的链接,但是即使这样,您也不能强制使用LESC(可能会使用传统的MITM配对,但这并不能真正保护MITM完全没有。)