Sistema de inicio de sesión usando cifrado autenticado sin almacenar la contraseña del usuario

2

No soy un experto en seguridad, así que podría estar haciendo una pregunta tonta, pero permítame describir lo que estoy pensando.

Primero, sé que muchos sitios web almacenan contraseñas cifradas / encriptadas que podrían descifrarse mediante un ataque de fuerza bruta una vez que la tabla en la base de datos es hackeada. Los piratas informáticos pueden incluso utilizar las contraseñas en otros sitios web y acceder a otra información confidencial.

Dado que AES no se puede romper por qué puedo ' ¿Simplemente utilizamos una lógica similar al cifrado autenticado ? aquí es otro enlace relevante. Por ejemplo,

  1. Prepare un archivo binario aleatorio de 1kb como el archivo esperado.
  2. Cifre el archivo esperado con una contraseña con hash
  3. Cuando un usuario inicia sesión en el sistema, valide la contraseña descifrando el archivo cifrado y verifique el archivo esperado. Si falla rechaza el inicio de sesión. Supongo que podemos usar la misma lógica para las preguntas secretas y las respuestas para restablecer la contraseña sin almacenar realmente las respuestas.

Si los archivos confidenciales también se cifran con la contraseña, supongo que el usuario no podrá restablecer la contraseña. ¿Hay alguna manera de hacerlo?

Mientras escribía esto, encontré una muy similar , pero están hablando sobre el descifrado del lado del cliente y estoy hablando del lado del servidor (o solo dentro del sistema local).

Realmente agradecería cualquier comentario o sugerencia.

    
pregunta niea 10.06.2013 - 14:04
fuente

2 respuestas

5

En realidad, su propuesta es solo una variación de una contraseña con hash. Solo en este caso no es el hash lo que se verifica, sino un blob encriptado / descifrado. Por lo tanto, tiene en su mayoría las mismas ventajas e inconvenientes de las contraseñas de hash (razonablemente implementadas). Consulte PBKDF . Cuando está bien diseñado, como por ejemplo bcrypt (consulte ¿Algún experto en seguridad recomienda bcrypt para el almacenamiento de contraseñas? ): ofrece una seguridad bastante buena para la mayoría de los escenarios.

La pregunta a la que se refiere ( autenticación de usuario mediante el descifrado de un azar blob ) en realidad lo cubre bastante bien, diría yo.

En cuanto a los datos del usuario encriptados por la contraseña: el cambio en la contraseña, por supuesto, requeriría volver a encriptar cualquier cosa encriptada con la antigua (es decir, descifrar con la antigua, encriptar con la nueva), que generalmente es una tarea costosa. . Esto generalmente se evita mediante capas: los datos en sí mismos se cifran con una clave generada aleatoriamente, que a su vez se cifra con una derivada de una contraseña. Si uno decide cambiar la contraseña, todo lo que se necesita es volver a cifrar la clave de cifrado real. También le permite a uno usar varias contraseñas para acceder a los mismos datos (un ejemplo de esta forma de cifrar datos es LUKS ) .

Dicho esto, si pretende crear su propia solución de criptografía, lea ¿Es la contraseña de mi desarrollador local la seguridad o la maldad, y por qué? primero.

    
respondido por el peterph 10.06.2013 - 14:50
fuente
-3

En el escenario propuesto, tomamos una contraseña P, la procesamos para generar una clave K que es H (P) y luego ciframos un archivo usando K.

El servidor valida el inicio de sesión descifrando el archivo con K.

Su gran problema aquí es que para descifrar el archivo, el servidor necesita saber K. Lo que significa que el servidor necesita almacenar P o K en texto sin cifrar, y ha perdido toda la complejidad computacional de almacenar los hashes de contraseñas.

Te estás confundiendo al ser impreciso con tu terminología. Lo que estás describiendo como contraseña es en realidad solo una semilla para generar la contraseña de inicio de sesión, que es el hash de tu semilla.

    
respondido por el Brandon Franklin 10.06.2013 - 14:16
fuente

Lea otras preguntas en las etiquetas