Запрос соединения iOS SMP не устанавливает бит SC - PullRequest
0 голосов
/ 07 февраля 2019

Я использую iPhone XR для подключения к своему периферийному устройству Linux 4.9 / Bluez 5.50 и хочу использовать соединение по безопасному соединению Bluetooth 4.2.На моем устройстве есть пара характеристик, которые требуют аутентификации, агент для сопряжения настроен как «DisplayYesNo».Узнав об услугах и характеристиках iPhone, я впервые прочитал характеристику.Как и ожидалось, появится диалоговое окно «Сопряжение Bluetooth», но вместо того, чтобы просить меня сравнить числа, я должен ввести пароль (который я показываю на дисплее периферийного устройства).Имея btmon на стороне Linux, я вижу, что после ответа «Недостаточная аутентификация» от Linux iPhone отправляет запрос на сопряжение SMP, но не устанавливает бит SC.Все работает согласованно, но я бы ожидал, что iPhone начнет сопряжение с включенным SC.

Существует довольно хрупкий способ запуска сопряжения с включенным SC: после того, как соединение установлено, плагин Bluez «батарея»работает на стороне Linux, обнаруживает «Battery Service (0x180f)» на iPhone и пытается прочитать его характеристики.IPhone сам отвечает ошибкой недостаточной аутентификации, Linux (как периферийное устройство) отправляет запрос безопасности SMP с установленным битом SC, а затем iPhone выдает запрос сопряжения SMP с установленным битом SC, что приводит к числовому сравнению на обоих концах и открытом ключеобмен и т. д. Теперь я могу «форсировать» это второе поведение, поместив произвольную задержку (3 секунды ...) в приложение iOS сразу после успешного подключения, прежде чем запускать службу и обнаружение признаков и чтение характеристик.Таким образом, спаривание SC из-за подключаемого модуля батареи, вероятно, уже началось, прежде чем я попытаюсь прочитать аутентифицированную характеристику в приложении.

дрожь Что я могу сделать, чтобы улучшить это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...