¿Es más fácil obtener la contraseña original si tiene múltiples hashes, todos creados con la misma función hash?

8

Si tiene múltiples hashes de una contraseña, todos los hash con la misma función hash, ¿es posible usar esto para acelerar la recuperación de la contraseña original de alguna manera?

(Encontré la pregunta " es más fácil obtener la contraseña original si tiene múltiples hashes ", pero parece estar hablando de múltiples hashes de la misma contraseña pero creados con diferentes funciones hash. )

    
pregunta popq 03.11.2015 - 14:56
fuente

3 respuestas

19

Una función hash pura es determinista, lo que significa que si hash cualquier valor dado, siempre deberías obtener el mismo hash. 5f4dcc3b5aa765d61d8327deb882cf99 es siempre el hash MD5 de "contraseña". Puede probarlo en diferentes máquinas, con implementaciones de MD5 escritas en diferentes idiomas y, suponiendo que sean implementaciones correctas, siempre debe obtener el mismo hash al llamar a md5 ("contraseña") o el equivalente de idioma específico.

Sin embargo, esa es una propiedad realmente mala de tener en un sistema de almacenamiento de contraseñas. Para mezclar las cosas, mejores métodos de almacenamiento de contraseña utilizan un salt. En ese caso, la cadena que se está procesando se cambia para cada registro. En lugar de que todos los que usaron "password" obtengan el mismo hash de salida, el hash se genera con "password + salt" (o "salt + password", "pass + salt + word", o cualquier otra combinación. No importa para esta pregunta), para que obtengas un montón de hashes distintos:

  • b305cadbb3bce54f3aa59c64fec00dea - contraseña:
  • 67a1e09bb1f83f5007dc119c14d663aa - saltpassword
  • 9eee04c6cecbc87f7699823f559b820d - passsaltword

Como puede verse, no hay ninguna característica común en particular en esto, incluso si se utiliza el algoritmo de hash MD5, que es una mala elección para el almacenamiento de contraseñas. (El par de "b" en las posiciones 8 y 9 en las dos primeras son solo una coincidencia).

Esto se debe a que MD5 implementa el efecto de "avalancha": el cambio de un solo bit de entrada hará que cambie una cantidad significativa de la salida (idealmente, aproximadamente el 50% por varios motivos de análisis).

Todo esto combinado significa que incluso con la sal corta utilizada anteriormente, la única manera de determinar que la palabra "contraseña" está en las tres entradas de hash es probar todas las posibilidades.

Esto depende de la función hash utilizada: se podría construir una función hash en la que agregar un salt similar provocara un cambio similar en la salida (por lo que "passwordsalt" y "passwordsals" solo varían en una pequeña cantidad cuando se utiliza el hash) pero eso no es típico de las funciones hash utilizadas para el almacenamiento de contraseñas.

Además, las recomendaciones modernas de almacenamiento de contraseñas sugieren el uso de algo como bcrypt o scrypt, que generan una sal fuerte como parte de la inicialización del hash:

  • $ 2a $ 08 $ WCUycJKlopCnpbAoYIQBj.wlsQA3iC2QhLOBpMMVZZtSO8hsXP1SW
  • $ 2a $ 08 $ 8s89Oz3AsJ.Dv.HAjIGKC.JdZJwzQUAkSX7Mels1Cc6Zwter.z7NO
  • $ 2a $ 08 $ r5lrQviZKBDgLS4z8OKVWOnlza16.tLDCqjq8pdQ1wY.iDSldXCFW

Todos estos son hashes de "contraseña", y tener los tres no te ayuda en absoluto.

    
respondido por el Matthew 03.11.2015 - 15:25
fuente
6

Una función hash criptográfica es una función determinista, por lo que si hash varias veces la misma contraseña con la misma función, debe obtener la misma salida. O, dicho de otro modo, si no siempre obtiene la misma salida, esto significa que la función es una función de hashing de contraseña , con cierta aleatoriedad inyectada conocida como " sal ".

Si la función de hashing de contraseñas es decente y se usa correctamente (por ejemplo, es bcrypt), entonces no, tener varios hashes no ayudará. Para ver esto, considere que, formalmente hablando, una función de hashing de contraseña no es una función una , sino una familia completa de funciones, siendo la sal realmente la elección de una función específica dentro de esa familia. Con distintas sales, obtiene funciones distintas, que se supone que son "realmente diferentes" entre sí, por lo que no existe un método abreviado computacional para permitir el procesamiento de hash de N por menos de N veces el costo de computar uno. (De hecho, es atrozmente difícil escribir esa propiedad en un formalismo matemáticamente correcto, pero el resumen anterior debería ser suficiente para esta respuesta).

Por lo tanto, puede tener aceleraciones de ataque solo cuando se reutiliza un valor de sal. Las buenas sales se eligen de manera que sean únicas, lo que de hecho es fácil si las sales se eligen al azar y son lo suficientemente grandes. Además, en su caso, si se reutilizó un valor de sal para la misma contraseña , se obtiene el mismo hash que anteriormente, y esto no gana nada en absoluto.

Por supuesto, si la función de hash de contraseñas a mano hace algo extraño e inexperto, entonces todo vale. Mi respuesta es para las buenas funciones de hash de contraseñas.

    
respondido por el Tom Leek 03.11.2015 - 15:25
fuente
4

Como han dicho las otras respuestas, ejecutar la misma contraseña a través del mismo algoritmo de hash siempre producirá el mismo hash. Pero también podemos tomar su pregunta literalmente, en cuyo caso todavía hay una respuesta útil (y diferente) ...

Supongamos que ha logrado obtener una gran lista de contraseñas de hash de un servidor comprometido. Quieres recuperar algunas de las contraseñas, y no te molestan particularmente cuáles. Este objetivo es realista: su lista también puede contener nombres de usuario y / o direcciones de correo electrónico coincidentes, y desea obtener credenciales que funcionen en otros sitios no relacionados (por ejemplo, la cuenta de correo electrónico de la víctima o la cuenta de Paypal).

Los puntos fuertes de las contraseñas varían enormemente. Algunas personas usan cuerdas largas y aleatorias. Otros usan palabras muy comunes, por ej. "contraseña". Este hecho hace posible realizar ataques en menos tiempo que una búsqueda completa de fuerza bruta. Consulte, por ejemplo, ataques de diccionario y tablas del arco iris .

Si encuentra dos hashes idénticos en su lista, es casi seguro que se generaron a partir de la misma contraseña. Suponiendo que los hashes pertenezcan a dos usuarios realmente independientes, entonces eso le dice que la contraseña debe ser bastante débil, ya que, por definición, es poco probable que dos personas piensen independientemente en una contraseña segura idéntica. Esto hace que la contraseña sea un buen candidato para un ataque basado en un diccionario.

Por lo tanto, en el contexto de una lista más amplia de hashes, tener varios de los mismos puede ayudarlo a recuperar un original más rápido, ya que revela información estadística sobre él.

    
respondido por el Jon Bentley 03.11.2015 - 20:35
fuente

Lea otras preguntas en las etiquetas