¿por qué no almacenamos las contraseñas en una base de datos usando encriptación en lugar de hash? [duplicar]

1

el hashing es un método de una sola vía, si un usuario pierde su contraseña, nunca podrá obtener esa contraseña del servidor. asi que ¿Por qué no almacenamos las contraseñas en una base de datos usando encriptación en lugar de hash?

    
pregunta lasan 02.06.2016 - 16:06
fuente

3 respuestas

7

Porque si un usuario puede obtener su contraseña de la base de datos, entonces también puede:

  • El administrador del sistema / base de datos.
  • La escuela / empleador / gobierno que está administrando el acceso a Internet del usuario.
  • El pirata informático que activó el WiFi en la cafetería.
  • El pirata informático que abrió la cuenta de correo electrónico del usuario.
  • El pirata informático que ha activado el servidor.

En algunos de estos casos, la facilidad de acceso depende de si el sistema es vulnerable o no a otras vulnerabilidades. En otros, el daño puede exacerbarse o reducirse según la seguridad de la contraseña del usuario.

Sin embargo, todos los casos representan escenarios en los que el hash en su mayoría, si no completamente, bloquearía a las personas que no deberían tener acceso a las contraseñas de otras personas. El cifrado no puede ayudar aquí.

También vale la pena señalar que un usuario no necesita, para los fines previstos por ningún sitio web, obtener sus credenciales de inicio de sesión reales del sistema. En el caso de que un usuario olvide su contraseña, el sistema debe proporcionar un mecanismo mediante el cual pueda restablecerlo o cambiarlo de forma segura a un nuevo , valor conocido.

¿El cambio al hash de contraseña y la implementación de un proceso de restablecimiento (en lugar de recuperación) evitarán que un atacante acceda a la cuenta de un usuario en todos los escenarios anteriores? No. Pero ciertamente eleva el nivel y garantiza que el daño para el usuario esté aislado solo en esa cuenta, no en todas las cuentas en las que el usuario usó la misma contraseña.

    
respondido por el Iszi 02.06.2016 - 16:15
fuente
6

Cuando su usuario inicie sesión, deberá saber si la contraseña es correcta.

Hashing una contraseña significa que no necesita conocer la contraseña, solo el hash. Como el hash es unidireccional, si alguien filtra su base de datos, solo tendrá los hashes y tendrá que aplicar la fuerza bruta a todos para obtener las contraseñas. El uso de sales, bcrypt y muchas rondas hace que sea muy, muy difícil de descifrar todas las contraseñas.

El cifrado es reversible. Su usuario envía la contraseña, su sitio descifra el valor almacenado y lo compara. El problema es que su sitio tiene la clave de descifrado. Si alguien piratea su sitio, obtendrá la clave y descifrará cada una de las contraseñas sin esfuerzo. No está bien.

Es casi tan inseguro como mantener la contraseña en texto claro.

    
respondido por el ThoriumBR 02.06.2016 - 16:17
fuente
3

Principales ventajas del hash frente al cifrado:

  • el administrador del sitio web no conoce su contraseña (vea la respuesta de Iszi);
  • si la base de datos está violada, es más fácil para el atacante romper una sola clave de cifrado que obtener las contraseñas de N (10 ^ 4, 10 ^ 6, ...) hashes correctamente salados (vea la respuesta de ThoriumBR);
  • en realidad no necesita obtener esa contraseña si la olvida. Es suficiente tener un mecanismo de restablecimiento de contraseña adecuado. La única razón por la que le gustaría obtener la contraseña original, en lugar de restablecerla, es si usa la misma contraseña para muchos sitios web (y no quiere pasar por la molestia de restablecer la contraseña en todas partes), pero esto es realmente malo , incluso si la contraseña es muy fuerte.
respondido por el A. Darwin 02.06.2016 - 16:22
fuente

Lea otras preguntas en las etiquetas