es el hash de un hash de una contraseña, igual o más seguro que el hashing solo una vez? [duplicar]

2

Me han dicho que es bastante fácil descifrar contraseñas cuando un atacante obtiene una lista de hashes de estas contraseñas. Esto es bastante fácil de comparar con hashes de contraseñas comunes precalculadas, o de fuerza bruta comparadas o atacadas con una lista basada en diccionarios o una lista de arco iris.

Por esta razón, los hashes rápidos como MD5 están en desuso. Mi pregunta es si al aplicar el algoritmo hash muchas veces, uno realmente puede lograr el almacenamiento de contraseñas que es más difícil de descifrar con todos los enfoques mencionados anteriormente, ¿o es solo una ilusión?

Me parece que la respuesta es sí, es más segura. Si almaceno el hash de una contraseña que se ha vuelto a hashear N veces, un atacante tendría que saber cuántos pases de hash hice, o adivinar este número. Tomar N lo suficientemente grande me parece que haría un ataque bastante inviable, mientras que almacenar el hash sería todavía algo rápido (imagina algunas decenas de miles de pases de hash, sería cuestión de segundos, supongo en una CPU)

    
pregunta Rho Phi 14.12.2017 - 14:53
fuente

3 respuestas

7

Tienes razón en que un mayor número de iteraciones de hash mejora la seguridad, pero ciertamente no es una bala de plata.

Como dice @Marc, debes asumir que el atacante conoce la cantidad de iteraciones, para que no tengas seguridad allí. Donde gana, es al aumentar el costo del ataque. Si está utilizando una gran cantidad de iteraciones de una función de hashing de contraseñas grandes y lentas como argon2, scrypt o el pbkdf2 anterior, entonces cada estimación será más costosa en términos de tiempo de CPU y costos de electricidad.

El ataque aún es factible, pero se vuelve costoso, como $ 50,000 USD de tiempo de cómputo en AWS un poco caro, por lo que está obligado a preguntar "es el valor de lo que puedo robar con esta contraseña lo suficientemente alta como para compensar ¿Los costos del ataque?

(Como también lo dice @Marc, esta respuesta asume que estás haciendo una salada adecuada, de lo contrario se pueden usar tablas de arco iris y el ataque se vuelve mucho más barato).

    
respondido por el Mike Ounsworth 14.12.2017 - 15:09
fuente
5
  

Al aplicar el algoritmo hash muchas veces, uno realmente puede lograr el almacenamiento de contraseñas que son más difíciles de descifrar

Sí, si se hace correctamente. Muchas funciones de hash de contraseñas modernas son lentas porque realizan miles de veces un cálculo de hash rápido.

  

un atacante tendría que saber cuántos pases de hashing hice

Esto normalmente no se usa como una propiedad de seguridad. Normalmente, el número de iteraciones se almacena junto con el hash, y no se mantiene en secreto .

  

Tomar N lo suficientemente grande me parece que haría un ataque bastante inviable

Esto es correcto, porque el hash de la contraseña se vuelve más lento. Un tiempo típico para el hashing de contraseñas es de 100 milisegundos. Esto es apenas notable para los usuarios, y aumenta considerablemente el tiempo para realizar un ataque de fuerza bruta.

    
respondido por el Sjoerd 14.12.2017 - 15:07
fuente
1

Realizar muchas rondas de hash es un comienzo pero no es suficiente.

Un atacante podría generar una tabla de búsqueda de hashes y simplemente ver qué hashes coinciden en todas las contraseñas almacenadas.

Lo menos que debe hacer es combinar un salt (datos generados seudoaleatoriamente) con la contraseña, luego ejecute el resultado a través del ciclo de hashing. La sal debe ser única para cada credencial almacenada. Esto significa que dos contraseñas idénticas no terminarán con el mismo hash.

Para conocer las reglas básicas de almacenamiento de contraseñas, consulte esta hoja de trucos .

Ah, y supongamos que el atacante conoce el número de hashes. Ya sea en algún lugar de su aplicación, o almacenado junto al hash (si es dinámico, debe saber cuántos ciclos aplicar).

    
respondido por el Marc 14.12.2017 - 15:00
fuente

Lea otras preguntas en las etiquetas