Если нужно создать связь с устройством Bluetooth LE

Для проекта Bluetooth с Xamarin (Android API 21 и выше) я хотел бы знать, является ли обычным создание связи с устройством Bluetooth. Текущие требования:

  • Устройство Bluetooth используется часто, но не постоянно.
  • Повторное подключение должно происходить как можно быстрее
  • Адрес Bluetooth изменяется случайным образом, когда устройство выключено
  • Имя устройства неизвестно, ноль или случайное
  • Соединение зашифровано
  • В соединении используется вышележащий API, для которого в качестве параметра для подключения требуется устройство Bluetooth.

Если вы создаете связь с этим устройством для «лучшего» распознавания (как своего рода кеш) или подключаетесь к устройству «с нуля». Что общего в этом сценарии? Так что это не вопрос «Могу ли я скреплять», но нужно ли связывать или даже лучше: что такое корект и рабочий, надежный сценарий.

В настоящее время я использую такой код (result.Device.Name предназначен для целей dev):

public override void OnScanResult([GeneratedEnum] ScanCallbackType callbackType, ScanResult result) { if (result.Device.Name == "  " && !_discovered && result.ScanRecord != null && result.ScanRecord.ServiceUuids != null && result.ScanRecord.ServiceUuids.Any(x => x.Uuid.ToString().ToUpper() == uuid)) { lock (_locker) { _discovered = true; _deviceList.Add(result.Device); BluetoothDiscoverySucces?.Invoke(result.Device); } } } 

Solutions Collecting From Web of "Если нужно создать связь с устройством Bluetooth LE"

Короткий ответ: правильный, общий и надежный сценарий – это связь. Связывание означает, что соединения защищены, а ссылка надежна. Это означает, что ваше локальное устройство обычно находит удаленное устройство, даже если его адрес меняется. Сопряжение / склеивание рекомендуется в Bluetooth по соображениям безопасности и конфиденциальности.


Длинный ответ: с момента его появления в инкрементальных версиях спецификации Bluetooth добавлены функции для повышения безопасности и конфиденциальности устройств Bluetooth. Многие устройства не позволят вам обмениваться данными или правильно отслеживать их, если вы не спарены / связаны (разница между склеиванием и спариванием заключается в том, что при соединении обменянные ключи сохраняются в базе данных).

В Bluetooth Low Energy процесс сопряжения / склеивания состоит из трех этапов: –

Этап 1 – Обмен парами

Два подключенных устройства обмениваются возможностями ввода-вывода (например, имеет ли устройство клавиатуру), требования к аутентификации (например, для связи или не для связи) и поддерживаемых размеров ключей.

Фаза 2 – Аутентификация и шифрование

Используя алгоритмы шифрования, ключ генерируется и используется для шифрования ссылки (это отличается от старого и LESC-сопряжения, но это выходит за рамки этого вопроса).

Фаза 3 – Распределение ключей

Несколько ключей обмениваются между устройствами, включая CSRK (ключ разрешения подписи соединения), IRK (Identity Resolving Key) и статический адрес.

Особое значение для вашего вопроса имеет IRK и адрес. Поскольку Bluetooth v4.0, функция, известная как конфиденциальность LE, позволила устройству постоянно менять свой адрес, чтобы уменьшить его способность отслеживать. Вредоносные устройства не смогут отслеживать устройство, реализующее эту функцию, поскольку оно на самом деле похоже на серию различных устройств. Чтобы разрешить адрес, устройства должны быть предварительно соединены / связаны . Если удаленное устройство содержит IRK, то он может использовать это и случайный разрешаемый адрес для получения исходного адреса устройства Bluetooth.


Итак, перейдя по вашим критериям: –

  • Устройство Bluetooth используется часто, но не постоянно.

Если вы собираетесь часто отключать / повторно подключаться, вы можете сразу один раз подключиться к устройству и сохранить ключи (т.е. связь). После этого соединение больше не понадобится, поскольку одни и те же ключи будут использоваться для шифрования соединения при отключении / повторном подключении.

  • Повторное подключение должно происходить как можно быстрее

Соединение и склеивание – это две разные вещи. При повторном подключении потребуется столько же времени, независимо от того, выполняется ли соединение. Однако, как только устройства будут повторно подключены, потребуется некоторое время для повторного шифрования соединения.

  • Адрес Bluetooth изменяется случайным образом, когда устройство выключено

Это означает, что устройство использует функцию конфиденциальности LE. Поэтому ваше устройство должно быть связано с ним для разрешения частного разрешимого адреса.

  • Имя устройства неизвестно, ноль или случайное

Обычно это относится к BLE. Устройства обычно идентифицируются по их адресу. Таким образом, если ваши устройства ранее были связаны, вы сможете разрешить изменение адреса и идентифицировать удаленное устройство.

  • Соединение зашифровано

Вы не можете получить зашифрованное соединение без сопряжения сначала (согласно 3 фазам выше). При связывании вы храните ключи в своей базе данных, поэтому гарантируете, что вы сможете использовать их в будущем для повторного шифрования соединения без необходимости переходить на фазы сопряжения.

  • В соединении используется вышележащий API, для которого в качестве параметра для подключения требуется устройство Bluetooth.

Я не уверен, что это значит, но не имеет отношения к требованию о склеивании.


Для дальнейшего чтения по этому вопросу я рекомендую посетить раздел «Спецификация Bluetooth 5.0», том 3, часть H, раздел 2 «Менеджер безопасности» (стр. 2295)