Я реализовал интерфейс org.bluez.Agent1 с помощью QDbus и хотел бы установить фиксированный пин-код (который я предоставлю пользователям), чтобы аутентифицировать все запросы на сопряжение и отклонять их, если пин-код неправильный. Возможности агента должны быть «NoInputNoOutput», потому что проект будет развернут на RaspberryPi 3 без клавиатуры и дисплея. Есть ли способ справиться с этим? Спасибо
Как настроить Bluez 5 для запроса пин-кода во время сопряжения
Ответы (2)
Вы не должны инициализировать возможность как «NoInputOutput» для фиксированной пары ключей. NoInputOutput означает, что для этого устройства нет дисплея и клавиатуры/интерфейса. Упоминание этой возможности для вашего агента при регистрации в BlueZ означает указание BlueZ (bluetoothd) не вызывать какой-либо API агента для аутентификации.
Обычно это полезно для автоматического сопряжения без ручного вмешательства. Вы можете увидеть этот пример кода, который использует возможность NoInputOutput для подключения устройства без какого-либо вмешательства.
Вам нужно "DisplayOnly" возможность указать BlueZ вызывать "DisplayPinCode" или "DisplayPasskey" в зависимости от поддержки SSP вашего устройства.
Вы можете реализовать DisplayPinCode/DisplayPasskey в своем агенте, чтобы всегда отвечать на постоянный PIN-код. Таким образом, устройство Bluetooth, которое пытается подключиться, может использовать тот же постоянный PIN-код для сопряжения.
Здесь Display Pin/Passkey — это просто соглашение об именах или подсказка разработчикам агентов для написания мастера/UI или любой другой формы операций отображения. Но вы можете полностью игнорировать операцию отображения и ответить статическим/постоянным 6-значным ключом для сопряжения.
Обычно этот API-интерфейс агента вызывается Bluez (в rasperry pi), когда устройство (мобильное устройство iPhone/Android/любое устройство с поддержкой Bluetooth) пытается выполнить пару вызовов «RequestPasskey" или "RequestPinCode" со стороны устройства.
sspmode 1
мы не можем установить фиксированный пин. Мы не можем ничего вернуть из Display Pin /Passkey
, так как тип результата этих методов — void. RequestPasskey/RequestPinCode
не предназначено для создания PIN-кода, а для того, чтобы попросить пользователя ввести PIN-код, который он видит на другом сопряженном устройстве (поэтому соединение не удастся, если вы вернете какой-либо другой PIN-код, а не тот, который был сгенерирован другим устройством)
- person Shaddix; 15.10.2019
sspmode 0
, что в настоящее время не является лучшей практикой безопасности. Пожалуйста, поправьте меня, если я ошибаюсь
- person Shaddix; 15.10.2019
У нас была такая же проблема в проекте, и я перешел на устройство LE к тому факту, что устройство Apple может подключаться к устройству LE только из соображений «безопасности».
У меня не так много ссылок на это, но если это может помочь вам в ваших исследованиях.