Подтвердить что ты не робот

Bluetooth-соединение без подтверждения пользователя

Могу ли я подключить два устройства по Bluetooth без необходимости подтверждения этого в пользовательском интерфейсе, соглашайтесь на сопряжение этих устройств. Могу ли я обменять некоторые дополнительные данные, например NFC, а затем безопасно соединить эти два устройства с Bluetooth без каких-либо дополнительных действий пользователя?

4b9b3361

Ответ 1

Эта потребность именно поэтому createInsecureRfcommSocketToServiceRecord() была добавлена ​​в BluetoothDevice, начиная с Android 2.3.3 (API-уровень 10) (SDK Docs)... до этого не было поддержки SDK для этого. Он был разработан, чтобы позволить Android подключаться к устройствам без пользовательских интерфейсов для ввода PIN-кода (например, встроенного устройства), но он также может использоваться для настройки соединения между двумя устройствами без ввода PIN-кода пользователя.

В качестве аргумента метода listenUsingInsecureRfcommWithServiceRecord() в BluetoothAdapter используется этот тип соединений. Это не нарушение безопасности, потому что методы должны использоваться как пара. Вы не можете использовать это, чтобы просто попытаться установить соединение с любым старым устройством Bluetooth.

Вы также можете осуществлять короткую связь по NFC, но это оборудование менее заметно на устройствах Android. Определенно выберите один, и не пытайтесь создать решение, которое использует оба.

Надеюсь, что это поможет!

P.S. Есть также способы сделать это на многих устройствах до 2.3 с использованием отражения, потому что код действительно существует... но я бы не рекомендовал это для массовых распределенных производственных приложений. Смотрите fooobar.com/questions/173824/....

Ответ 2

Ну, это действительно должно быть разбито на 2 части:

  • Можете ли вы подключить 2 устройства Bluetooth, не пропустив рукопожатие сопряжения Bluetooth? Нет, ты не можешь. Это запекло в протоколе, поэтому нет никакого способа обойти это.
  • Можете ли вы выполнить рукопожатие без пользовательского интерфейса? Да, вы можете: это просто код.

Я не уверен, как вы это делаете в Windows land, но в * nix land есть функции, зарытые в стек Bluez, которые позволяют получать уведомления о появлении нового устройства и отправлять ему код сопряжения (явно там должны быть такими функциями: это то, что использует пользовательский интерфейс). Учитывая достаточное время и опыт, я уверен, что вы можете понять, как написать свою версию приложения Bluetooth Settings, которое каким-то образом:

  • Обнаружено, что новое устройство прибыло
  • Посмотрел адрес mac/mac bluetooth и проверил некоторую внутреннюю базу данных для использования кода сопряжения.
  • Отправил код сопряжения и завершил операцию

Все, не вызывая пользовательский интерфейс.

Если вы продолжите и напишите код, который я ЛЮБЛЮ, чтобы взять его в руки.

Ответ 3

Короткий ответ: когда я отправляю файлы между устройствами с OBEX, я почти никогда не предлагаю пары, поэтому это, безусловно, возможно.

1) Для каждого приложения и самого устройства могут быть установлены необходимые/не требуемые режимы аутентификации, поэтому часто не требуется спаривание. Например, большинству серверов OBEX (OPP) вообще не нужна аутентификация, поэтому нет необходимости в спаривании/склеивании.

Предположительно ответ "Wireless Designs" охватывал этот случай.

2) Затем, если для устройства/приложения требуется спаривание:

2.1) До v2.1 для спаривания, то двум устройствам необходимо было иметь совпадение кодовой фразы/PIN-кода. Таким образом, это либо потребовало участия пользователя (для ввода PIN-кода), либо знания в программном обеспечении, чтобы знать PIN-код: либо определенный в приложении if pin callback send pin="1234", либо смартфонов в ОС, таких как BlueZ и Win7 (см. Слайд 20 в моем Bluetooth в Windows 7 doc), который имеет логику вроде: if(remotedevice=headset) then expectedPin ="0000". Не знаю, что делает Android

2.2) В версии 2.1 добавлена ​​безопасная простая спаривание (SSP). Который изменяет спаривание на:

if (either is pre-v2.1) then
   Legacy
else if (Out-Of-Band channel) then
   OutOfBand
else if (neither have "Man-in-the-Middle Protection Required") then
   (i.e. both have "Man-in-the-Middle Protection _Not_ Required")
   Just-Works
else
   Depending on the two devices' "IO Capabilities", either NumericComparison or Passkey.
   Passkey is used when one device has KeyboardOnly -- and the peer device _isn't_ NoInputNoOutput.
endif

Из 32feet.NET Руководство пользователя BluetoothWin32Authentication, см. также разделы SSP в [1]

Таким образом, чтобы спаривание было неуправляемым, требуется либо "JustWorks", либо "Out-of-Band", например, ваше предложение NFC.

Надеюсь, что это поможет...

Ответ 4

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

См. Техническую спецификацию передачи соединений NFC Forum http://www.nfc-forum.org/specs/spec_list/

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

Ответ 5

BT версии 2.0 или меньше - вы должны иметь возможность пары/облигации с использованием стандартного PIN-кода, введенного программно, например. 1234 или 0000. Это не очень безопасно, но многие устройства BT это делают.

BT версии 2.1 или выше - Режим 4 Безопасная простая соединяя модель "только работает". Он использует эллиптическое шифрование (независимо от того, что это) и очень безопасен, но открыт для атаки "Человек в центре". По сравнению с старым подходом "0000" с пин-копом он близок вперед. Это не требует ввода пользователем.

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

Ответ 6

Если вы спрашиваете, можете ли вы установить пару устройств без пользователя, КОГДА-ЛИБО одобряя спаривание, это не может быть сделано, это функция безопасности. Если вы подключены по Bluetooth, нет необходимости обмениваться данными по NFC, просто обменивайтесь данными по каналу Bluetooth.

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