Pregunta

¿Puedo emparejar dos dispositivos a través de Bluetooth sin necesidad de confirmar esto en la interfaz de usuario? Acepte para emparejar estos dispositivos. ¿Puedo cambiar algunos datos adicionales, por ejemplo, NFC, y luego emparejar de forma segura esos dos dispositivos a través de Bluetooth sin ninguna acción adicional del usuario?

¿Fue útil?

Solución

Esta necesidad es exactamente por qué createInsecureRfcommSocketToServiceRecord() fue agregado a BluetoothDevice Comenzando en Android 2.3.3 (API Nivel 10) (SDK DOCS) ... antes de eso no había soporte SDK para esto. Fue diseñado para permitir que Android se conectara a dispositivos sin interfaces de usuario para ingresar un código PIN (como un dispositivo incrustado), pero es igual de útil para configurar una conexión entre dos dispositivos sin entrada de PIN de usuario.

El método corolario listenUsingInsecureRfcommWithServiceRecord() en BluetoothAdapter se usa 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 a través de NFC, pero ese hardware es menos prominente en los dispositivos Android. Definitivamente elige uno y no intentes crear una solución que use ambos.

¡Espero que ayude!

PD: También hay formas de hacer esto en muchos dispositivos antes de 2.3 usando la reflexión, porque el código existía ... pero no necesariamente recomendaría esto para aplicaciones de producción distribuidas en masa. Mira esto Desbordamiento de pila.

Otros consejos

Bueno, esto realmente debería dividirse en 2 partes:

  1. ¿Puedes emparejar 2 dispositivos Bluetooth sin pasar por un apretón de manos de emparejamiento Bluetooth? No, no puedes. Eso se hornea en el protocolo, por lo que no hay forma de evitar esto.
  2. ¿Puedes realizar el apretón de manos sin una interfaz de usuario? Sí, puedes: eso es solo código.

No estoy seguro de cómo lo haces en Windows Land, pero en la tierra *Nix hay funciones enterradas en la pila Bluez que le permiten recibir notificaciones sobre cuándo aparece un nuevo dispositivo y enviarlo el código de emparejamiento (claramente hay que haber que haber que Estas funciones: esas son lo que usa la interfaz de usuario). Dado el tiempo y la experiencia suficiente, estoy seguro de que podría descubrir cómo escribir su propia versión de la aplicación Bluetooth Configuración que de alguna manera:

  • Detectado un nuevo dispositivo había llegado
  • Miré la dirección MAC de nombre/Bluetooth y verificó una base de datos interna para que el código de emparejamiento utilice.
  • Envió el código de emparejamiento y completó la operación

Todo sin tener que aparecer una interfaz de usuario.

Si sigues adelante y escribes el código, me encantaría tener en mis manos.

Respuesta breve: Cuando envío archivos entre dispositivos con OBEX, casi nunca me solicitan que se emparejen, por lo que ciertamente es posible.

1) Se puede establecer una aplicación y el dispositivo en sí para necesitar modos de autenticación necesarios/no necesarios, por lo que a menudo no había ningún requisito para el emparejamiento. Por ejemplo, la mayoría de los servidores OBEX (OPP) no necesitan ninguna autenticación en absoluto, por lo que no es necesario emparejarse/vincular.

Presumiblemente, la respuesta de los "diseños inalámbricos" fue cubrir ese caso.

2) Entonces, si el dispositivo/aplicación requería un emparejamiento:

2.1) Antes de v2.1 para emparejarse, los dos dispositivos necesitaban tener una frase/pines de pases coincidente. Entonces, esta participación del usuario necesitaba (para ingresar los pines) o el conocimiento en el software conoce el pin: definido en la aplicación if pin callback send pin="1234", o inteligencia en el sistema operativo como Bluez y Win7 (ver Deslice 20 en mi Bluetooth en Windows 7 Doc) que tiene lógica como: if(remotedevice=headset) then expectedPin ="0000". No sé qué hace Android

2.2) En v2.1 se agregó emparejamiento simple (SSP) seguro. Que cambia de emparejamiento a:

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 Guía del usuario de 32feet.net Bluetoothwin32Authentication, ver también las secciones SSP en [1]

Por lo tanto, tener el emparejamiento no sean necesidades improvisadas, ya sea "JustWorks" o "fuera de banda", por ejemplo, su sugerencia de NFC.

Espero que ayude...

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

Consulte: Especificación técnica de transferencia de conexión del foro NFC Forumhttp://www.nfc-forum.org/specs/spec_list/

Cotizando de la especificación sobre la seguridad -"El protocolo de transferencia requiere la transmisión de datos y credenciales de acceso a la red (los datos de configuración del portador) para permitir que un dispositivo se conecte a una red inalámbrica proporcionada por otro dispositivo. Debido a la proximidad necesaria para la comunicación entre los dispositivos y etiquetas NFC, la espía de la portadora de la portadora. Los datos de configuración son difíciles, pero no imposibles, sin reconocimiento por el propietario legítimo de los dispositivos. La transmisión de datos de configuración de portadores a dispositivos que se pueden llevar a cerca se considera legítima dentro del alcance de esta especificación ".

BT versión 2.0 o menos: debería poder emparejarse/unirse usando un código PIN estándar, ingresado programáticamente, por ejemplo, 1234 o 0000. Esto no es muy seguro, pero muchos dispositivos BT lo hacen.

BT Versión 2.1 o mayor - Modo 4 Se puede utilizar el modelo de emparejamiento simple "Just Works". Utiliza el cifrado elíptico (lo que sea) y está muy seguro, pero está abierto al hombre en los ataques medios. En comparación con el antiguo enfoque de código PIN '0000', es ligero años por delante. Esto no requiere ninguna entrada del usuario.

Esto está de acuerdo con las especificaciones de Bluetooth, pero lo que puede usar depende de qué verson del estándar Bluetooth admite su pila y qué API tiene.

Si pregunta si puede emparejar dos dispositivos sin que el usuario apruebe el emparejamiento, no se puede hacer, es una función de seguridad. Si está emparejado a través de Bluetooth, no es necesario intercambiar datos a través de NFC, simplemente 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top