Hash de contraseña usando funciones hash

1

Tengo curiosidad por saber dos hechos relacionados con el hash de contraseña MD5. Por lo que sé, MD5 es más rápido y más vulnerable a la colisión que otras funciones hash como SHA-1, SHA-3, etc.

Para evitar ataques de diccionario, ataques de fuerza bruta y ataques a la mesa del arco iris, diferentes personas han desarrollado diferentes técnicas a lo largo del tiempo.

Por ejemplo, una de las técnicas es agregar algunos mensajes aleatorios con las contraseñas originales para evitar el ataque a la tabla del arco iris y usar el hashing recursivo o iterativo para hacer más lento el hashing de la contraseña completa.

Luego los valores de hash se almacenan en una base de datos. Un usuario ingresa su nombre de usuario y contraseña en la pantalla de inicio de sesión y luego el sistema cliente-servidor calcula el valor de hash de inmediato y lo compara con los valores de hash almacenados previamente en la base de datos.

Presento mi curiosidad en forma de dos preguntas.

  1. ¿No está haciendo el hashing de contraseñas más lento usando la repetición o iteración igual que el inicio de sesión más lento para los usuarios?

  2. ¿Las técnicas de hashing de contraseñas se hacen generalmente secretas o abiertas a otros?

pregunta Shahed-al-mamun 03.02.2017 - 06:06
fuente

2 respuestas

4
  

Por ejemplo, una de las técnicas es agregar algunos mensajes aleatorios con las contraseñas originales para evitar el ataque de la tabla arco iris

Hacer que la función hash sea más lenta (aumentar el factor de trabajo ) hace que sea más difícil de romper, pero agregar un salt no hace que sea más difícil hacer el hash Romper en absoluto, eso no es lo que se supone que debe hacer.

Lo que hace es proteger a dos o más usuarios que tienen la misma contraseña. Un hash de la misma entrada siempre tendrá la misma salida, por lo que todos los usuarios con el mismo hash en la base de datos deben tener la misma contraseña. Si rompes uno, los obtienes todos.

Agregar una sal aleatoria a cada contraseña hace que sus hashes sean diferentes, por lo que la tabla del arco iris solo se agrieta una a la vez.

  

¿No está haciendo el hashing de contraseñas más lento usando la recursión o iteración igual que el inicio de sesión más lento para los usuarios?

Sí.

Si la verificación de la contraseña fue un hash rápido, los atacantes pueden verificar muchas contraseñas rápidamente y encontrar la correcta. Por lo tanto, las funciones hash para contraseñas deben ser lentas para protegerse contra eso. Y su uso normal es que una persona escriba y vea una pantalla de inicio de sesión, esperar medio segundo, una vez, no es una mala transacción.

Algunos son lentos por diseño (bcrypt) y otros son lentos haciendo un hash rápido una y otra vez (pbkdf2).

Scrypt también es una variante de esta idea: un hash que hace que el cálculo lleve mucho tiempo, y también requiere mucha memoria, por lo que tratar de atacarlo rápidamente usando varias computadoras es caro.

enlace discute esta compensación con ejemplos.

  

¿Las técnicas de hashing de contraseñas se vuelven generalmente secretas o abiertas a otros?

Generalmente abierto. Un hash más antiguo (ahora en desuso) era RC4, y era un desarrollo propietario de RSA Security, y nunca se lanzó oficialmente , pero se filtró, se confirmó y se usó ampliamente de todos modos.

Los algoritmos comunes de hashing de contraseña (lentos) están abiertos:

  • bcrypt , que se publicó públicamente y se usa en OpenBSD, que es código abierto.

o estándares oficiales a través de Internet Engineering TaskForce (IETF):

Los algoritmos comunes de hash rápido (utilizados en SSH, IPSEC, TLS) también son estándares abiertos, por ejemplo

y también hay RFC 6234 que dice " Los Estados Unidos de América han adoptado un paquete de Secure Hash Algoritmos (SHA) [..] a saber, SHA-224, SHA-256, SHA-384 y SHA-512. Este documento hace que el código fuente abierto que realiza estas funciones de hash SHA esté disponible para la comunidad de Internet. ".

Alternativas a PBKDF2 Argon2 y Lyra2 también son de código abierto.

Eso no quiere decir que las personas no puedan crear algoritmos de hashing cerrado propietarios, o basar sus hashes de contraseña en algoritmos rápidos, pero [Microsoft usa MD5] en los hashes de contraseña de Active Directory, y muchas empresas utilizan PBKDF2 .

(De hecho, tendría curiosidad por encontrar funciones de hash propietarias utilizadas en los sistemas populares, no puedo creer que conozca alguna)

    
respondido por el TessellatingHeckler 03.02.2017 - 08:52
fuente
2
  

¿No está haciendo el hashing de contraseñas más lento usando la recursión o iteración igual que el inicio de sesión más lento para los usuarios?

Es. Pero mientras que un retraso de 500 milisegundos al ingresar una contraseña es aceptable para un usuario. Esto también significa que un ataque de fuerza bruta también se ralentiza considerablemente y puede verificar solo unas pocas contraseñas por segundo. Esa es una buena compensación: casi no es perceptible para el usuario legítimo, pero ralentiza masivamente al atacante.

  

¿Las técnicas de hashing de contraseñas se vuelven generalmente secretas o abiertas a otros?

Se recomienda usar técnicas que soportaron un análisis más profundo que generalmente significa que la técnica está abierta. Esto es lo mismo con una buena criptografía: los algoritmos están abiertos mientras que las claves no lo están.

Para obtener información más detallada sobre el hashing de contraseñas, consulte ¿Cómo hash seguro de contraseñas? .

    
respondido por el Steffen Ullrich 03.02.2017 - 06:31
fuente

Lea otras preguntas en las etiquetas