Autenticación entre dispositivos donde se usa la misma contraseña en ambos

1

Estoy escribiendo dos aplicaciones que están diseñadas para ejecutarse en dos dispositivos separados. Es similar a una solución de escritorio remoto como TeamViewer.

Lo que sigue a continuación es mi propuesta para un proceso de autenticación entre dos dispositivos A y B, donde A es la autoridad. Puede ser un poco detallado, pero solo quiero ser exhaustivo:

 1) User inputs a password to A
 2) A generates public and private key from password
 3) A saves private key to memory
 4) A saves private key to file
 5) A appends salt to password in memory
 6) A digests password + salt with SHA128.
 7) A saves the hash to file.

 8) B connects to A through TCP
 9) A sends public key to B
10) User inputs (the same) password to B
11) B encrypts password with the public key obtained from A
12) B sends the encrypted password to A
13) A decrypts the password with private key
14) A applies steps 5 and 6
15) A compares the hash of the obtained password with the stored hash.

Este proceso no implica enviar la contraseña en texto sin formato a través de la red para que la parte sea segura, por lo que mis preguntas son:

¿Debería utilizarse en su lugar la criptografía de clave simétrica? Si es así, ¿cómo se haría esto sin que se transmita la contraseña de texto sin formato?

Parece que almacenar tanto el hash de la contraseña como la clave privada generada a partir de la contraseña es excesiva. ¿Lo es?

En una nota al margen, todo esto ocurre en una LAN.

    
pregunta Dziugas 13.06.2015 - 02:15
fuente

1 respuesta

1

Esta es una de esas cosas que es terriblemente subjetiva.

¿Qué es exactamente lo que intentas proteger aquí?

Más preguntas que necesitan respuesta:

  • ¿Cómo verifica B que la clave de publicación recibida de A es la clave correcta y no una clave MITM?
  • ¿Cómo se deriva una clave privada (par) de la contraseña?
  • ¿Cómo estás bloqueando los intentos de fuerza bruta?
  • ¿Qué sucede si alguien obtiene el hash de la contraseña y trata de descifrarlo sin conexión?
  • ¿Cómo está protegiendo el archivo de clave privada?
  • ¿Cómo evita las repeticiones de la contraseña cifrada?

Probablemente hay algunas preguntas más que vale la pena hacer que no están incluidas también.

La forma en que describiste el flujo es algo sólida, pero la implementación es un poco débil, y ahí es donde empiezas a entrar en el territorio del no rodar y eso nunca es bueno.

Consideraría echar un vistazo a cómo otros sistemas similares manejan la autenticación, o mejor aún, usar un protocolo o tecnología existente que haga esto por usted como Kerberos. Las probabilidades son bastante buenas, la mayoría de esos sistemas ya están utilizando protocolos preexistentes.

    
respondido por el Steve 13.06.2015 - 03:43
fuente

Lea otras preguntas en las etiquetas