it-swarm-es.com

SHA512 contra Blowfish y Bcrypt

Estoy buscando algoritmos de hash, pero no pude encontrar una respuesta.

  • Bcrypt utiliza Blowfish
  • Blowfish es mejor que MD5
  • P: ¿Pero Blowfish es mejor que SHA512?

Gracias..

Actualización:

Quiero aclarar que entiendo la diferencia entre hash y encriptación. Lo que me impulsó a formular la pregunta de esta manera es este artículo , donde el autor se refiere a bcrypt como "hashing adaptativo"

Como bcrypt se basa en Blowfish, se me hizo pensar que Blowfish es un algoritmo de hash. Si es el cifrado, como han señalado las respuestas, entonces me parece que no debería tener un lugar en este artículo. Lo peor es que está concluyendo que bcrypt es el mejor. Lo que también me confunde ahora es que la clase phpass (utilizada para el hashing de contraseñas, creo) utiliza bcrypt (es decir, blowfish, es decir, cifrado). Basándome en esta nueva información que ustedes me están diciendo (blowfish es cifrado), esta clase suena mal. ¿Me estoy perdiendo de algo?

214
Chris

Debería ser suficiente decir si bcrypt o SHA-512 (en el contexto de un algoritmo apropiado como PBKDF2) es suficientemente bueno . Y la respuesta es sí, cualquiera de los dos algoritmos es lo suficientemente seguro como para que se produzca una infracción a través de una falla de implementación, no de criptoanálisis.

Si insiste en saber cuál es "mejor", SHA-512 ha tenido revisiones en profundidad por parte del NIST y otros. Es bueno, pero se han reconocido fallas que, aunque no se pueden explotar ahora, han llevado a la competencia SHA-3 por nuevos algoritmos hash. Además, tenga en cuenta que el estudio de los algoritmos hash es "más nuevo" que el de los cifrados, y los criptógrafos aún están aprendiendo sobre ellos.

A pesar de que bcrypt en su totalidad no ha tenido tanto escrutinio como Blowfish en sí, creo que el hecho de estar basado en un cifrado con una estructura bien entendida le da cierta seguridad inherente de la que carece la autenticación basada en hash. Además, es más fácil usar GPU comunes como herramienta para atacar hashes basados ​​en SHA-2; debido a sus requisitos de memoria, la optimización de bcrypt requiere hardware más especializado como FPGA con algo de RAM en la placa.


Nota: bcrypt es un algoritmo que utiliza Blowfish internamente. No es un algoritmo de cifrado en sí mismo. Se utiliza para ocultar contraseñas irreversiblemente, al igual que las funciones hash para hacer un "hash unidireccional".

Los algoritmos de hash criptográficos están diseñados para ser imposibles de revertir. En otras palabras, dada solo la salida de una función hash, debería tomar "para siempre" encontrar un mensaje que produzca la misma salida hash. De hecho, no debería ser computacionalmente factible encontrar dos mensajes que produzcan el mismo valor hash. A diferencia de un cifrado, las funciones hash no están parametrizadas con una clave; la misma entrada siempre producirá la misma salida.

Si alguien proporciona una contraseña que se ajusta al valor almacenado en la tabla de contraseñas, se autentican. En particular, debido a la irreversibilidad de la función hash, se asume que el usuario no es un atacante que se apoderó del hash y lo invirtió para encontrar una contraseña que funcione.

Ahora considere bcrypt. Utiliza Blowfish para cifrar una cadena mágica, usando una clave "derivada" de la contraseña. Más tarde, cuando un usuario ingresa una contraseña, la clave se deriva nuevamente, y si el texto cifrado producido al cifrar con esa clave coincide con el texto cifrado almacenado, el usuario se autentica. El texto cifrado se almacena en la tabla de "contraseña", pero la clave derivada nunca se almacena.

Para romper la criptografía aquí, un atacante tendría que recuperar la clave del texto cifrado. Esto se denomina ataque "texto sin formato conocido", ya que el ataque conoce la cadena mágica que se ha cifrado, pero no la clave utilizada. Blowfish se ha estudiado extensivamente y aún no se conocen ataques que permitan a un atacante encontrar la clave con un solo texto plano conocido.

Entonces, al igual que los algoritmos irreversibles basados ​​en compendios criptográficos, bcrypt produce un resultado irreversible, desde una contraseña, sal y factor de costo. Su fuerza radica en la resistencia de Blowfish a los ataques de texto simple conocidos, que es análogo a un "primer ataque de pre-imagen" en un algoritmo de resumen. Dado que se puede usar en lugar de un algoritmo hash para proteger las contraseñas, bcrypt se denomina confusamente algoritmo "hash".

Suponiendo que las tablas Rainbow se hayan frustrado por el uso adecuado de la sal, cualquier función verdaderamente irreversible reduce al atacante a prueba y error. Y la velocidad con la que el atacante puede hacer las pruebas está determinada por la velocidad de ese algoritmo irreversible de "hash". Si se usa una única iteración de una función hash, un atacante puede hacer millones de pruebas por segundo usando un equipo que cuesta aproximadamente $ 1000, probando todas las contraseñas de hasta 8 caracteres en unos pocos meses.

Sin embargo, si la salida del resumen se "realimenta" miles de veces, llevará cientos de años probar el mismo conjunto de contraseñas en ese hardware. Bcrypt logra el mismo efecto de "fortalecimiento de clave" mediante la iteración dentro de su rutina de derivación de claves, y un método apropiado basado en hash como PBKDF2 hace lo mismo; En este sentido, los dos métodos son similares.

Entonces, mi recomendación de bcrypt se deriva de los supuestos 1) de que un Blowfish ha tenido un nivel de escrutinio similar al de la familia SHA-2 de funciones hash, y 2) que los métodos criptoanalíticos para cifrados están mejor desarrollados que los de las funciones hash.

312
erickson

Estoy de acuerdo con la respuesta de erickson, con una advertencia: para propósitos de autenticación de contraseña, bcrypt es far mejor que a iteración única de SHA-512 - simplemente porque es mucho más lento. Si no entiendes por qué la lentitud es una ventaja en este juego en particular, lee el artículo al que te vinculas nuevamente (desplázate hacia abajo hasta " La velocidad es exactamente lo que no quieres en una función de hash de contraseña. " ).

Por supuesto, puede crear un algoritmo de hashing de contraseña seguro alrededor de SHA-512 iterándolo miles de veces, al igual que la forma en que funciona el algoritmo MD5 de PHK. Ulrich Drepper hizo exactamente esto , para la cripta de glibc (). Sin embargo, no hay ninguna razón particular para hacer esto si ya tiene una implementación de bcrypt probada disponible.

47
caf

Blowfish no es un algoritmo de hash. Es un algoritmo de cifrado. Lo que eso significa es que puedes cifrar algo usando blowfish, y luego puedes descifrarlo de nuevo a texto plano.

SHA512 es un algoritmo de hash. Eso significa que (en teoría) una vez que hash la entrada, no puedes volver a obtener la entrada original.

Son 2 cosas diferentes, diseñadas para ser utilizadas para diferentes tareas. No hay una respuesta 'correcta' para "¿es Blowfish mejor que SHA512?" También podrías preguntar "¿Son las manzanas mejores que los canguros?"

Si quieres leer más sobre el tema aquí hay algunos enlaces:

29
Glen

Blowfish no es mejor que MD5 o SHA512, ya que tienen diferentes propósitos. MD5 y SHA512 son algoritmos de hash, Blowfish es un algoritmo de cifrado. Dos funciones criptográficas completamente diferentes.

4
blowdart

Recomendaría la implementación de criptografía basada en SHA-256/SHA-512 de Ulrich Drepper.

Portamos estos algoritmos a Java, y puede encontrar una versión con licencia de ellos en ftp://ftp.arlut.utexas.edu/Java_hashes/ .

Tenga en cuenta que los Unices más modernos (L) admiten el algoritmo de Drepper en sus archivos/etc/shadow.

2
Jonathan Abbey

Acabo de encontrar esto:

http://codahale.com/how-to-safely-store-a-password/

¿Puede el autor de este artículo estar equivocado?

2
disappearedng