it-swarm-es.tech

Diferencia entre Hashing una contraseña y cifrarla

El actual votado a favor de esta pregunta afirma:

Otro que no es tanto un problema de seguridad, a pesar de que está relacionado con la seguridad, está completo y no tiene el objetivo de asimilar la diferencia entre cifrar una contraseña y cifrarla . La mayoría de las veces se encuentra en el código donde el programador está tratando de proporcionar una funcionalidad insegura de "Recordar mi contraseña".

¿Qué es exactamente esta diferencia? Siempre tuve la impresión de que el hash era una forma de cifrado. ¿A qué funcionalidad insegura se refiere el póster?

121
Claudiu

El hash es una función unidireccional (bueno, un mapeo). Es irreversible, aplica el algoritmo hash seguro y no puede recuperar la cadena original. Lo más que puede hacer es generar lo que se llama "una colisión", es decir, encontrar una cadena diferente que proporcione el mismo hash. Los algoritmos hash criptográficamente seguros están diseñados para evitar la aparición de colisiones. Puede atacar un hash seguro mediante el uso de una Rainbow table , que puede contrarrestar aplicando un sal al hash antes de almacenarlo.

El cifrado es una función correcta (dos vías). Es reversible, puedes descifrar la cadena mutilada para obtener la cadena original si tienes la clave.

La funcionalidad insegura a la que se refiere es que si cifra las contraseñas, su aplicación tiene la clave almacenada en algún lugar y un atacante que obtiene acceso a su base de datos (y/o código) puede obtener las contraseñas originales obteniendo tanto la clave como el texto cifrado. , mientras que con un hash es imposible.

La gente suele decir que si un cracker posee su base de datos o su código, no necesita una contraseña, por lo que la diferencia es discutible. Esto es ingenuo, porque aún tiene el deber de proteger las contraseñas de sus usuarios, principalmente porque la mayoría de ellos usan la misma contraseña una y otra vez, exponiéndolos a un mayor riesgo al filtrar sus contraseñas.

192
Vinko Vrsalovic

Hashing es una función de una sola vía, lo que significa que una vez que hash una contraseña es muy difícil recuperar la contraseña original del hash. El cifrado es una función de dos vías, donde es mucho más fácil recuperar el texto original del texto cifrado.

El hashing simple es fácilmente derrotado usando un ataque de diccionario, donde un atacante simplemente hace un pre-hashes de cada palabra en un diccionario (o cada combinación de caracteres de cierta longitud), luego usa este nuevo diccionario para buscar contraseñas de hash. El uso de un sal aleatorio único para cada contraseña hash almacenada hace que sea mucho más difícil para un atacante usar este método. Básicamente, tendrían que crear un nuevo diccionario único para cada valor de sal que utilices, ralentizando terriblemente su ataque.

No es seguro almacenar contraseñas usando un algoritmo de cifrado porque si es más fácil para el usuario o el administrador recuperar la contraseña original del texto cifrado, también es más fácil para un atacante hacer lo mismo.

30
Bill the Lizard

Encrypted vs Hashed Passwords

Como se muestra en la imagen anterior, si la contraseña está cifrada, siempre es un secreto oculto donde alguien puede extraer la contraseña de texto sin formato. Sin embargo, cuando la contraseña está en hash, está relajado, ya que casi no hay ningún método para recuperar la contraseña del valor de hash.


Extraído de Contraseñas cifradas vs hash - ¿Cuál es mejor?

¿Es bueno el cifrado?

Las contraseñas de texto sin formato se pueden cifrar utilizando algoritmos de cifrado simétricos como DES, AES o con cualquier otro algoritmo y se pueden almacenar dentro de la base de datos. En la autenticación (confirmando la identidad con el nombre de usuario y la contraseña), la aplicación descifrará la contraseña cifrada almacenada en la base de datos y la comparará con la contraseña proporcionada por el usuario para garantizar la igualdad. En este tipo de enfoque de manejo de contraseñas, incluso si alguien obtiene acceso a las tablas de la base de datos, las contraseñas no serán simplemente reutilizables. Sin embargo, también hay una mala noticia en este enfoque. Si de alguna manera alguien obtiene el algoritmo criptográfico junto con la clave utilizada por su aplicación, él/ella podrá ver todas las contraseñas de usuario almacenadas en su base de datos por descifrado. "Esta es la mejor opción que tengo", un desarrollador de software puede gritar, pero ¿hay alguna manera mejor?

Función hash criptográfica (solo ida)

Sí, puede que hayas perdido el punto aquí. ¿Notaste que no hay ningún requisito para descifrar y comparar? Si hay un método de conversión de un solo sentido en el que la contraseña se puede convertir en una palabra convertida, pero la operación inversa (generación de la contraseña de una palabra convertida) es imposible. Ahora, incluso si alguien tiene acceso a la base de datos, no hay forma de que las contraseñas se reproduzcan o extraigan utilizando las palabras convertidas. En este enfoque, casi no habrá forma de que algunos puedan conocer las contraseñas secretas de los usuarios; y esto protegerá a los usuarios utilizando la misma contraseña en múltiples aplicaciones. ¿Qué algoritmos se pueden utilizar para este enfoque?

10
lkamal

Siempre he pensado que el cifrado se puede convertir en ambos sentidos, de manera que el valor final pueda llevarlo a su valor original y con Hashing no podrá revertir del resultado final al valor original.

8
CheGueVerra

Los algoritmos de hash son generalmente de naturaleza criptográfica, pero la principal diferencia es que el cifrado es reversible a través del descifrado, y el hashing no lo es.

Una función de encriptación normalmente toma la entrada y produce una salida encriptada que es del mismo tamaño o un poco más grande.

Una función de hashing toma entrada y produce una salida típicamente más pequeña, típicamente también de un tamaño fijo.

Si bien no es posible tomar un resultado con hash y "deshacerlo" para recuperar la entrada original, por lo general, puede forzar su camino bruscamente hacia algo que produzca el mismo hash.

En otras palabras, si un esquema de autenticación toma una contraseña, la hace un hash y la compara con una versión de hash de la contraseña requerida, es posible que no sea necesario que conozca la contraseña original, solo su hash, y que pueda hacer fuerza bruta. su camino hacia algo que coincidirá, incluso si es una contraseña diferente.

Las funciones de hash se suelen crear para minimizar la posibilidad de colisiones y dificultar el cálculo de algo que produzca el mismo hash que otro.

Hashing :

Es un algoritmo de un solo sentido y una vez que el hash no puede revertir, este es su punto dulce contra el cifrado.

Encriptación

Si realizamos el cifrado, habrá una clave para hacerlo. Si se filtrará esta clave, todas sus contraseñas se podrían descifrar fácilmente.

Por otro lado, incluso si su base de datos será pirateada o si el administrador de su servidor tomó datos de la base de datos y usted utilizó contraseñas con hash, el pirata informático no podrá romperlas. Esto sería prácticamente imposible si utilizáramos hashing con sal adecuada y seguridad adicional con PBKDF2.

Si desea ver cómo escribir sus funciones hash, puede visitar aquí .

Hay muchos algoritmos para realizar hashing.

  1. MD5 - Utiliza la función hash Algoritmo de resumen de mensaje 5 (MD5). El hash de salida es de 128 bits de longitud. El algoritmo MD5 fue diseñado por Ron Rivest a principios de la década de 1990 y no es una opción preferida en la actualidad.

  2. SHA1 - Utiliza hash de algoritmo de hash de seguridad (SHA1) publicado en 1995. El hash de salida tiene una longitud de 160 bits. Aunque se usa más ampliamente, esta no es una opción preferida en la actualidad.

  3. HMACSHA256 , HMACSHA384 , HMACSHA512 - Use las funciones SHA-256, SHA-384 y SHA-512 de la familia SHA-2. SHA-2 se publicó en 2001. Las longitudes de hash de salida son 256, 384 y 512 bits, respectivamente, como indican los nombres de las funciones de hash.

3
Rahul Garg

Idealmente deberías hacer ambas cosas.

Primero hash la contraseña de acceso para la seguridad unidireccional. Use una sal para mayor seguridad.

Luego encripte el hash para defenderse de los ataques de diccionario si su base de datos de hashes de contraseña está comprometida.

3
LogicMagic

Tan correcta como pueden ser las otras respuestas, en el contexto en el que estaba la cita, el hash es una herramienta que se puede usar para proteger la información, el cifrado es un proceso que toma información y dificulta la lectura/uso por parte de personas no autorizadas.

1
Peter Coulton