Bluetooth OOB Handover через NFC без подтверждения пользователя (или как работает Android Beam)

Я пытаюсь реализовать поведение, подобное Android-Beam, между смартфоном Android и хостом Linux. Смартфон Android (Galaxy Note 3, Android 4.4.2) прикасается к ключу NFC, подключенному к хосту Linux, и обменивается данными оператора Bluetooth через NFC, чтобы затем подключиться к ключу Bluetooth, также подключенному к хосту Linux.

Теперь проблема в том, что Android-смартфон всегда спрашивает пользователя (меня), действительно ли я хочу выполнить сопряжение с Bluetooth-ключом. В Android Beam между двумя мобильными телефонами Android это подтверждение пользователя не отображается, пользователю нужно только щелкнуть содержимое (то есть изображение), чтобы отправить его (и это поведение, которое я пытаюсь получить). Я использую «nfctool» для перехвата входящего сообщения запроса рукопожатия с мобильного устройства Android (см. http://pastebin.com/Dr0D0nqn ). Согласно документу «Безопасное простое соединение Bluetooth с использованием NFC» форума NFC (см. ://members.nfc-forum.org/resources/AppDocs/NFCForum_AD_BTSSP_1_0.pdf стр. 19) этот запрос рукопожатия должен содержать простой хэш сопряжения и простой рандомизатор сопряжения, которые отсутствуют в запросе рукопожатия Android. .

Итак, мои вопросы:

  • Во-первых, использует ли Android Beam Secure Simple Pairing с OOB или какой-то другой механизм? Почему Android Beam между двумя устройствами Android работает без подтверждения сопряжения?
  • Если он использует SSP, почему хэш SSP и рандомизатор отсутствуют в сообщении HR? Может ли это быть причиной того, что для моего сопряжения требуется подтверждение пользователя?
  • Если Android использует другой механизм, как примерно выглядят сообщения HR? Используют ли они имя специального типа (отличное от «application/vnd.bluetooth.ep.oob») или что-то еще в своем запросе рукопожатия, что позволяет обойти подтверждение пользователя о сопряжении BT?
  • Есть ли какая-либо техническая документация (я пока не нашел) для Android Beam? Руководство по NFC для разработчиков Android ( http://developer.android.com/guide/topics/connectivity/nfc/nfc.html ) не очень помогает в отношении Android Beam.

Любая помощь высоко ценится :)


person andreas    schedule 07.08.2014    source источник


Ответы (1)


Наконец-то я нашел решение этой проблемы и ответы на большинство своих вопросов:

  • Да, Android использует SSP, но Hash и Randimizer не являются обязательными, поэтому необходимо включать их в сообщения NDEF HR/HS.
  • Android использует сообщения HR с именем типа "application/vnd.bluetooth.ep.oob", это правильно.
  • Для SSP достаточно, если одно устройство подтвердит процесс сопряжения. Таким образом, решение моей проблемы заключается в том, чтобы установить для возможностей ввода-вывода хоста Linux значение «DisplayYesNo», а затем автоматически подтвердить запрос авторизации. Таким образом, хост Linux подделывает ввод пользователя, и мобильный телефон Android больше не будет запрашивать подтверждение у пользователя. Быстрый (и немного грязный) способ реализовать это — изменить сценарий «простого агента» BlueZ для подтверждения каждого запроса авторизации.
person andreas    schedule 11.08.2014