¿Qué algoritmos pueden usarse para emparejar dispositivos?

4

Debo implementar un sistema donde los dispositivos Android se conecten a un servidor central y tengan que registrarse con diferentes cuentas de usuario, por lo que he decidido crear un dance similar al que se puede observar en bluetooth. emparejamiento, o software como el emparejamiento remoto de Apple con la biblioteca de itunes. Estoy buscando información sobre qué algoritmos de cifrado se pueden usar durante esta comunicación utilizando un canal de comunicación separado para la clave de cifrado. El algoritmo que he pensado seguiría estos pasos:

  1. El dispositivo se enciende y llama a un servidor fijo para anunciar a sí mismo.
  2. El dispositivo muestra algunos números aleatorios en la pantalla (por ejemplo, 392582).
  3. El usuario debe iniciar sesión en el servidor con un navegador web en su cuenta y escribir la secuencia numérica que se ve en el dispositivo (se puede hacer en el propio dispositivo Android).

Durante el paso 1, el cliente se comunicaría con el servidor a través de SSL. El número que se muestra al usuario en el paso 2 formará parte de una cadena estática predeterminada más larga que se incluirá como hash. El servidor y el cliente intercambiarían el hash y verificarían que es el mismo. Si lo es, significa que el emparejamiento está bien. Algunas preguntas me persiguen:

  1. ¿Esto es realmente un sonido o los dispositivos de emparejamiento se realizan de otras maneras?
  2. ¿El hash MD5 es suficiente para esto o debo usar otros hashes?
  3. ¿Qué tiempo y caducidad debe tener el código de la pantalla para evitar colisiones con otros usuarios potenciales?
  4. ¿Qué mejoras se pueden hacer para mejorar la autenticidad de la conexión? He pensado en reemplazar la cadena estática más larga predeterminada por el hash con una cadena aleatoria. El cliente enviaría la semilla del generador de números aleatorios durante el primer paso. Un hombre en el medio todavía lo conseguiría, pero ¿esto reduciría las colisiones de hash con otros usuarios?
  5. Carezco de la jerga de seguridad técnica, tal vez este sea un proceso bien estudiado y existan toneladas de artículos de wikipedia en él. La información en wikipedia sobre emparejamiento / vinculación de bluetooth no proporciona demasiados detalles técnicos sobre la implementación. ¿Dónde debería mirar?
pregunta Grzegorz Adam Hankiewicz 03.04.2012 - 10:46
fuente

2 respuestas

2

Al volver a leerlo, creo que veo lo que estás intentando lograr. El usuario tiene una cuenta en www.example_business.com y ahora quiere usar la nueva aplicación de Android de ejemplo negocio. Ha decidido que no desea que el usuario tenga que iniciar sesión por completo a través de su aplicación de Android. Tal vez requiera autenticación de dos factores (donde el segundo factor es el teléfono), o necesita certificados, o tiene miedo de los keyloggers tipo IQ del operador y no desea realizar el procedimiento de inicio de sesión completo en el teléfono.

  1. El cliente abre mobile_app por primera vez, lo que solicita al usuario su user_name y luego envía una solicitud al servidor para el token con user_name . (Si user_name no existe; no se comunique con la aplicación móvil).
  2. El servidor genera un número aleatorio (digamos diez dígitos base36 con 36 ^ 10 ~ 10 ^ 15 posibilidades que se muestran iniciales en minúsculas para fácilmente distingue 0 de O) y lo envía al sitio web. El servidor envía la marca de tiempo + sha256hash (marca de tiempo + nombre de usuario + número aleatorio + high_entropy_secret_key_only_known_by_server) a la aplicación móvil e instrucciones para iniciar sesión en el sitio web para obtener el número aleatorio. La clave secreta high_entropy debe ser algo como: TQy9p4pDDHpZuS3Fimdag6yCtU9YBCt55PntmPyUPD_oxRMW3f que se mantiene en secreto en el servidor.
  3. El cliente inicia sesión en el sitio web, lee random_number y escribe random_number en la aplicación móvil.
  4. La aplicación móvil envía la marca de tiempo (desde el paso 2), el nombre de usuario, el hash recibido (desde el paso 2) y el número aleatorio (desde el paso 3) al servidor.
  5. El servidor comprueba que la marca de tiempo no es demasiado antigua (digamos menos de un día), no se ha incluido en la lista negra debido a demasiados intentos fallidos, verifica que el hash coincida con el hash de los datos recibidos (hace que esto no distinga mayúsculas y minúsculas; por ejemplo, reduce el caso de random_number ) y luego envía un token a la aplicación móvil que vincula las dos cuentas.

En cuanto a la lista negra después de demasiados malos intentos; Me gustaría poner nombres de usuario en la lista negra + marcas de tiempo que han fallado tres veces; puede vaciar la lista negra todos los días (ya que solo las marcas de tiempo de los días anteriores funcionan); tener un proceso de reinicio de la aplicación móvil con una nueva marca de tiempo / número aleatorio).

Usaré SSL para todas las transmisiones para evitar escuchas ilegales. Ahora, para un usuario que no tiene una cuenta pero conoce un user_name válido y trata de forzar con fuerza el número aleatorio, tendría una probabilidad de adivinar de 1 en 10 ^ 15 (aproximadamente 20 millones de veces menos que ganando la lotería) correctamente por intento. Pero instituiría un paso en el que se aceleran los inicios de sesión para las direcciones IP y las cuentas que fallan en los intentos de sincronización demasiadas veces.

    
respondido por el dr jimbob 03.04.2012 - 18:59
fuente
0

EEtimes tiene listados de proveedores para los diferentes conjuntos de chips de interés. Honestamente, la forma en que hizo la pregunta me dice que se está excediendo en un proyecto aquí. Treinta minutos en el sitio le ahorrarán muchos problemas más adelante si se toma el tiempo de leer algunos informes en profundidad y evitar reinventar la rueda.
El póster anterior le hizo un gran favor y estoy muy impresionado con su nivel de detalle en nombre de su proyecto.  Espero que ayude,       iceberg

    
respondido por el Iceberg Hotspot 06.04.2012 - 08:52
fuente

Lea otras preguntas en las etiquetas