Установить пароль на маяк Bluez BLE

Я использую маяк BLE в bluez5.52 на Linux-машине (ubuntu 14.04), используя значение по умолчанию gatt-service и маяк с помощью btmgmt из папки инструментов. Ниже приведены команды, которые я запускаю для настройки маяка:

Терминал 1:

./gatt-service

Терминал 2

sudo ./btmgmt
add-adv -u 180d -u 180f -d 080954657374204C45 1

Я легко могу подключаться и отключаться от маяка с помощью приложения сканера BLE в Android. Я бы хотел установить пароль для маяка, чтобы я был единственным, кто мог подключиться к нему. Пока мне не удалось найти в Интернете какие-либо ресурсы, которые могли бы помочь в этом. Я неплохо разбираюсь в коде btmgmt и gatt-service. Я ищу направление, в какой части кода bluez нужно искать, чтобы установить защиту паролем. Любые лиды, псевдокод или частичный код очень помогут.


person danny    schedule 26.10.2020    source источник
comment
Думаю, мне следовало сформулировать это лучше. Я хотел сказать, что это слабый периферийный маяк. Вы можете подключиться к нему и читать сервисы gatt. Я думал, что это очевидно, если я запустил gatt-service в первом терминале.   -  person danny    schedule 27.10.2020
comment
BLE не поддерживает защиту паролем / механизм входа в систему. Что он предлагает, так это спаривание / связывание, которое должно быть успешным только в том случае, если пользователь управляет обоими устройствами (например, первое имеет дисплей, а другое - клавиатуру, где пользователь должен ввести показанный ключ доступа на другом. клавиатуры устройства для защиты от атак типа Man-in-the-middle, например хакеров за окном). Вы можете реализовать это с помощью этого API: git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/.   -  person Emil    schedule 27.10.2020
comment
Спасибо @Emil. У меня есть еще один вопрос. Можно ли динамически менять сервис gatt? Я думаю, что нужно предоставить пользователю характеристику записи для ввода пароля (после того, как соединение установлено), и, если она совпадает, я выставляю фактические данные в других характеристиках.   -  person danny    schedule 27.10.2020


Ответы (1)


Эмиль уже упоминал о спаривании и объединении в комментариях. Это определенно послужит вашей цели, поскольку вы сможете контролировать, кто может подключаться к вашему периферийному устройству. Характеристика BLE может запрашивать у подключенного устройства аутентификацию перед чтением или записью, что приведет к «недостаточной ошибке аутентификации», если устройство не сопряжено с вашим периферийным устройством. Приложение Android может обрабатывать эту ошибку, отображая всплывающее окно сопряжения в зависимости от используемого метода сопряжения. Таким образом, можно иметь характеристики без защиты рядом с характеристиками, требующими сопряжения.

Если вы все же хотите реализовать что-то вроде упомянутой вами безопасности паролей, вам следует изучить «авторизованное чтение». Характеристика, требующая авторизации, сначала получает запрос на чтение, и вы можете разрешить или отклонить его в зависимости от ваших требований. Это означает, что вы можете авторизоваться, отправив пароль для одной характеристики, а затем разрешив запрос чтения для другой характеристики. Это было бы еще проще, если бы вы принимали только одно соединение за раз.

person Michael Kotzjan    schedule 27.10.2020
comment
Не могли бы вы уточнить, где я могу найти дополнительную информацию о разрешении чтения? Я пробовал просмотреть код, но ничего не нашел. Возможно, указатель на то, какой раздел кода смотреть или конкретный раздел основной спецификации, который нужно прочитать, поможет мне лучше реализовать это. Спасибо - person danny; 03.11.2020
comment
Прошу прощения за поздний ответ. Я искал эквивалент «авторизованного чтения» в библиотеке Bluez, но безуспешно. Похоже, они не дают такого разрешения. Но взгляните на этот метод: github.com/ bluez / bluez / blob / master / tools / gatt-service.c # L468 Этот метод обрабатывает запись характеристики и также получает дескриптор соединения. Вы можете создать характеристику, принимающую пароль, и сохранить связанный дескриптор. Затем проверьте, хочет ли то же соединение получить доступ к защищенной характеристике, и решите, разрешено оно или нет. - person Michael Kotzjan; 06.11.2020
comment
Я попробовал метод, который вы сказали, и он отлично сработал. Еще один вопрос. Есть ли способ заставить несколько подключений работать с btmgmt? - person danny; 12.11.2020
comment
Проблема вроде бы в том, что Bluez перестает показывать рекламу после первого подключения. Вы можете попробовать следовать этому ответу на аналогичную проблему: stackoverflow .com / questions / 56236749 /. - person Michael Kotzjan; 13.11.2020