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