Bluetooth-соединение без подтверждения пользователя - PullRequest
32 голосов
/ 04 мая 2011

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

Ответы [ 6 ]

53 голосов
/ 04 мая 2011

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

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

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

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

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

6 голосов
/ 04 мая 2011

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

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

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

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

Все без необходимости открывать пользовательский интерфейс.

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

4 голосов
/ 04 мая 2011

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

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

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

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

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

2.2) В v2.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.

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

2 голосов
/ 04 мая 2011

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

См .: Техническая спецификация передачи обслуживания форума NFC http://www.nfc -forum.org / specs / spec_list /

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

0 голосов
/ 17 мая 2011

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

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

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

0 голосов
/ 04 мая 2011

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

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

...