¿El cifrado de un valor de sal con una contraseña / texto sin formato es una alternativa viable para el hashing directo?

5

El problema básico, por lo que puedo decir, es que la falla del hash es que la contraseña está en el hash. El defecto del cifrado asimétrico es que la contraseña está cifrada y puede revertirse.

Las publicaciones que he visto dicen que no usan cifrado asimétrico y usan un mejor algoritmo hash (bcrypt / scrypt / etc) para estar "seguro".

¿Qué pasaría si, en su lugar, utilizara un cifrado asimétrico (como Rijndael / AES) y cifrara un valor de texto simple conocido único para cada usuario con la contraseña suministrada por los usuarios (podría incluirse un hash para obtener un mejor valor) y almacene el resultado?

¿Esto no proporcionaría una cadena encriptada que podría almacenarse y proteger la contraseña del usuario de la recuperación? ¿O hay algún defecto inherente que me estoy perdiendo / pasando por alto?

    
pregunta Earl G Elliott III 13.06.2012 - 16:25
fuente

4 respuestas

7

No veo qué problema estás resolviendo. Imagina lo que pasará si tu base de datos se ve comprometida. El atacante tendrá esta cadena cifrada, sal y (probablemente) la clave de cifrado.

¿Qué les impide descifrar la sal o la contraseña de cualquier usuario y tener la contraseña?

Es bastante difícil inventar algo que sea más seguro que los algoritmos desarrollados por profesionales y que hayan sido "probados en la batalla" durante muchos años (a saber, bcrypt).

    
respondido por el Oleksi 13.06.2012 - 16:31
fuente
2

Una de las mejores soluciones por ahora es agregar un salt + pimienta a un algoritmo de hashing ( no md5 ni sha1 desde que se informaron se ha roto. Para obtener más información sobre su estado, haga clic en aquí para md5 , y aquí para sha1 . Además, este answer on StackOverflow complete mis palabras).

Además, si usa BCrypt como su algoritmo de hash, agrega un nivel de complicación para un posible atacante, ya que el tiempo para la fisuración es menor con el tiempo:

  

"bcrypt es un hash adaptable: con el tiempo se puede hacer más lento y más lento, por lo que sigue siendo resistente a ataques específicos de búsqueda de fuerza bruta contra el hash y la sal".

    
respondido por el Cyril N. 13.06.2012 - 16:57
fuente
1

La solución que describe es, en realidad, hashing.

Considere la función de hash MD5 . Funciona comenzando con un valor fijo convencional (el "IV") de longitud de 128 bits. Luego, para cada bloque de 512 bits de datos de entrada, se calcula una función de compresión , que toma como entrada el estado actual de 128 bits y el bloque de mensajes de 512 bits, y emite los siguientes 128 bits. estado. Si observa cómo funciona la función de compresión MD5, verá que es similar a un cifrado de bloque (un esquema de Feistel generalizado con cuatro sub-palabras) donde el bloque de mensaje de 512 bits se utiliza como clave. Entonces MD5 realmente funciona como lo describe: encripte un valor fijo, con la contraseña como clave. Si el valor fijo es específico del usuario, entonces es un tipo de "sal" (y eso es bueno para el hashing de contraseñas).

Entonces su pregunta es: ¿no podemos construir una función hash a partir de un cifrado de bloque? Y la respuesta es: sí, pero requiere algo de cuidado. Un cifrado de bloque típico como el AES está diseñado para el cifrado y su seguridad se ha analizado en ese contexto. Cuando convierte un cifrado de bloque en una función hash como se describe anteriormente, confía en que el cifrado de bloque sea robusto en formas que no se han explorado a fondo; necesita que el cifrado sea resistente a ataques relacionados con clave , que no son un problema en lo que respecta al cifrado, pero pueden ser mortales para una función hash. Por ejemplo, se sabe que el AES es algo débil con respecto a las claves relacionadas, por lo que usarlo "tal como está" en una función hash no es necesariamente una buena idea.

Whirlpool y Skein son dos funciones hash que reutilizan un cifrado de bloque: en ambos casos, un cifrado de bloque especializado, optimizado para la resistencia en esa situación específica.

Independientemente de los detalles del diseño de la función hash, cualquier el sistema de almacenamiento de contraseñas tiene una gran debilidad evidente, ya que almacena la contraseña o, al menos, un token de verificación de contraseña (algo que puede ser usado para decidir si una contraseña dada es correcta o no). Las contraseñas provienen de los cerebros de los seres humanos; ellos no pueden ser fuertes. Es muy posible enumerar la mayoría de las contraseñas potenciales.

Es inevitable que un servidor que verifique las contraseñas contenga suficiente información para, por ejemplo, verificar las contraseñas. Por lo tanto, si un atacante puede obtener un volcado del disco del servidor, también obtiene ese poder y puede probar las contraseñas "en casa". Este es un ataque de diccionario sin conexión . La única defensa conocida (posiblemente, la única defensa posible ) es hacer que cada verificación de contraseña sea intrínsecamente lenta, preferiblemente de forma configurable. ESO es el punto de bcrypt : el hashing de la contraseña utiliza millones de operaciones elementales, sin ningún conocimiento atajo, para que el atacante tenga que pagar un alto precio por cada intento.

Una función hash hecha en casa, construida a partir de un cifrado de bloque, fallará en eso, a menos que lo defina para usar no el cifrado uno , sino el cifrado sucesivo un millón . Seguiría siendo casero (eso es muy malo en criptografía; no confíes en los diseños hechos en casa), pero al menos no sería tan débil con respecto a los ataques de diccionario.

    
respondido por el Thomas Pornin 16.09.2012 - 00:34
fuente
-4

Hashing se utiliza para proteger las bases de datos de aplicaciones web, principalmente. ¡Se usan porque son rápidos! Los cifrados, en general, NO son rápidos.

Por lo tanto, si escribe aplicaciones web, ¡necesitará Hashes y NO cifrados! Si está creando algo como los administradores de contraseñas, puede utilizar algoritmos de cifrado simétrico fuerte como AES.

Si necesita más explicación o cualquier otra ayuda, ¡no dude en comentar!

    
respondido por el ant0nisk 14.06.2012 - 17:01
fuente

Lea otras preguntas en las etiquetas