2011-05-04 15 views
30

¿Puedo emparejar dos dispositivos a través de Bluetooth sin la necesidad de confirmar esto en la interfaz del usuario, acepte emparejar estos dispositivos. ¿Puedo intercambiar algunos datos adicionales, por ejemplo, NFC, y luego sincronizar esos dos dispositivos de manera segura a través de Bluetooth sin ninguna acción adicional del usuario?Emparejamiento Bluetooth sin confirmación del usuario

+1

Huele a violación de seguridad, aunque estoy seguro de que la tecnología Bluetooth tiene muchos agujeros. Sin embargo, no estoy seguro de que sea legal, y tu aplicación probablemente será eliminada de Android Market. – Phonon

Respuesta

53

Esta necesidad es exactamente por qué createInsecureRfcommSocketToServiceRecord() se añadió a BluetoothDevice a partir de Android 2.3.3 (API nivel 10) (SDK Docs) ... antes de eso no había apoyo para este SDK. Fue diseñado para permitir que Android se conecte a dispositivos sin interfaces de usuario para ingresar un código PIN (como un dispositivo integrado), pero también sirve para configurar una conexión entre dos dispositivos sin la entrada de PIN del usuario.

El método de corolario listenUsingInsecureRfcommWithServiceRecord() en BluetoothAdapter se utiliza para aceptar este tipo de conexiones. No es una violación de seguridad porque los métodos deben usarse como un par. No puede usar esto para simplemente intentar emparejar con cualquier dispositivo Bluetooth antiguo.

También puede hacer comunicaciones de corto alcance por NFC, pero ese hardware es menos prominente en dispositivos Android. Definitivamente elija uno, y no intente crear una solución que use ambos.

¡Espero que eso ayude!

P.S. También hay formas de hacer esto en muchos dispositivos antes de 2.3 utilizando la reflexión, porque el código sí existía ... pero no necesariamente lo recomendaría para aplicaciones de producción distribuidas en masa. Vea esto StackOverflow.

+1

Hola, ¿podría decirme si hay alguna cosa de BroadcastReceiver disponible para saber si algún dispositivo emparejado está disponible? Si no, entonces, creo, tengo que hacer una encuesta periódica que implica tratar de conectarme al dispositivo requerido. Pero connect es una llamada de bloqueo y también establecerá el peaje de la batería. – Mudassir

+3

Tú mi amigo eres un genio. Agregar una palabra a mi código ("Inseguro" como en createInsecureRfcommSocketToServiceRecord()) hizo que mi dispositivo bluetooth heredado (GPS) funcionara inmediatamente. No necesita un código PIN, por lo que la conexión segura no funcionaba. – mellowg

-2

Si está preguntando si puede emparejar dos dispositivos sin que el usuario apruebe el emparejamiento, no se puede hacer, es una característica de seguridad. Si está sincronizado mediante Bluetooth, no es necesario intercambiar datos a través de NFC, solo intercambie datos a través del enlace Bluetooth.

No creo que pueda eludir la seguridad de Bluetooth pasando un paquete de autenticación a través de NFC, pero podría estar equivocado.

+1

Parece que estabas equivocado. De acuerdo con lo que leo en esta página, la insegura conexión bluetooth permite una comunicación sin seguridad, y la conexión NFC puede permitir que ambos teléfonos celulares creen un secreto compartido que se puede usar para encriptar la comunicación a través de bluetooth usando un cifrado simétrico como AES. – Vincent

2

Sí, es posible en teoría según lo definido por la especificación. Sin embargo, no existe una implementación práctica que permita esto.

Consulte: NFC Forum Conexión Handover Especificación Técnica http://www.nfc-forum.org/specs/spec_list/

Citando de la especificación con respecto a la seguridad - "El protocolo de traspaso requiere la transmisión de datos de acceso de red y las credenciales (los datos de configuración de soporte) para permitir que un dispositivo para conectarse a una red inalámbrica proporcionada por otro dispositivo. Debido a la gran proximidad necesaria para la comunicación entre dispositivos NFC y etiquetas, escuchar a escondidas los datos de configuración del operador es difícil, pero no imposible, sin reconocimiento por parte del propietario legítimo de los dispositivos. datos de configuración a los dispositivos que se pueden acercar considerado legítimo dentro del alcance de esta especificación ".

4

Bueno, esto realmente debe ser dividida en 2 partes:

  1. ¿Puede el par 2 dispositivos Bluetooth sin tener que pasar a través de un apretón de manos de emparejamiento de Bluetooth? No, no puedes. Eso está incluido en el protocolo, así que no hay forma de evitar esto.
  2. ¿Se puede realizar el saludo sin una interfaz de usuario? Sí, puedes: eso es solo código.

No estoy seguro de cómo hacerlo en Windows land, pero en * nix land hay funciones enterradas en la pila Bluez que le permiten recibir notificaciones sobre cuándo aparece un nuevo dispositivo y enviar el código de sincronización (claramente tiene que haber estas funciones: eso es lo que usa la interfaz de usuario). Con suficiente tiempo y la experiencia que estoy seguro de que podría encontrar la manera de escribir su propia versión de la aplicación de configuración de Bluetooth que de alguna manera:

  • Detectado había llegado
  • mirado el nombre de dirección MAC/bluetooth un nuevo dispositivo y verificó alguna base de datos interna para usar el código de sincronización.
  • envió el código de emparejamiento y completó la operación

Todo ello sin tener que aparecerá una interfaz de usuario.

Si continúa y escribe el código ME ENCANTARÍA tenerlo en mis manos.

4

Respuesta corta: Cuando envío archivos entre dispositivos con OBEX, casi nunca me piden que me empareje, por lo que es ciertamente posible.

1) Una aplicación y el dispositivo en sí pueden configurarse para que necesiten/no necesiten modos de autenticación, por lo que a menudo no fue necesario emparejarlos. Por ejemplo, la mayoría de los servidores OBEX (OPP) no necesitan ninguna autenticación, por lo que no es necesario vincularlos o vincularlos.

Presumiblemente, la respuesta de "Diseños inalámbricos" cubría ese caso.

2) A continuación, si el acoplamiento se requiere por el dispositivo/app:

2.1) Antes de la v2.1 para el emparejamiento luego los dos dispositivos necesarios para tener emparejan frase de contraseña/PIN. Por lo tanto, esto requiere la participación del usuario (para ingresar los PIN) o conocimiento en el software para conocer el PIN: bien definido en la aplicación if pin callback send pin="1234", o bien en el sistema operativo como BlueZ y Win7 (ver Slide 20 at my Bluetooth in Windows 7 doc) que tiene lógica como: if(remotedevice=headset) then expectedPin ="0000". No sé lo que hace Android

2.2) En v2.1 Secure Simple Pairing (SSP) se ha agregado. Que cambia de emparejamiento para:

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 

De 32feet.NET's BluetoothWin32Authentication user guide, consulta las secciones de SSP en [1]

Así que para tener el emparejamiento sea necesidades espontáneas o bien "JustWorks" o "fuera de banda "por ejemplo, tu sugerencia NFC.

Espero que ayude ...

0

BT versión 2.0 o menos - Usted debe ser capaz de emparejar/unión mediante un código PIN estándar, por ejemplo, entraron mediante programación 1234 o 0000. Esto no es muy seguro, pero muchos dispositivos de BT lo hacen.

BT versión 2.1 o superior - Mode 4 Secure Simple Pairing El modelo "solo funciona" se puede utilizar. Utiliza cifrado elíptico (lo que sea que sea) y es muy seguro, pero está abierto para los ataques de Man In The Middle. En comparación con el viejo enfoque de código pin '0000 ', está a años luz de distancia. Esto no requiere ninguna entrada del usuario.

Esto está de acuerdo con las especificaciones de Bluetooth, pero lo que puede usar depende de qué versión del estándar Bluetooth sea compatible con su pila y qué API tiene.

Cuestiones relacionadas