Как узнать, зашифровано ли соединение Bluetooth? - PullRequest
1 голос
/ 07 ноября 2019

Я создаю соединение BLE между мобильным устройством и мобильным телефоном. соединение сначала незащищено, но будет обновлено до LESC, просто работает со стороны устройства.

Пока все работает нормально.

В Android (целевой SDK 28) я хочу проверить (лучше получитьобратный вызов), если соединение Bluetooth зашифровано. Я использую пример службы 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 голосов
/ 07 ноября 2019

Извините, но я не думаю, что вы можете, что действительно отстой. В соответствии со спецификацией Bluetooth можно указать уровень безопасности для каждого запроса GATT, что можно сделать, например, с помощью API BLE Windows. Но Android, кажется, не имеет этой функции. Без этой функции она как бы разрушает саму идею безопасности BLE. Вы можете проверить, подключено ли устройство, но это не является гарантией шифрования соединения.

https://developer.android.com/reference/android/bluetooth/BluetoothDevice#createL2capChannel(int) однако может использоваться для принудительной установки MITM-защищенной связи, если вы используете L2CAP CoC, ноВы даже тогда не можете принудительно использовать LESC (можно использовать устаревшее MITM-сопряжение, которое вообще не защищает от MITM).

...