SHA512 vs Blowfish y Bcrypt [cerrado]


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

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

Gracias..

Actualización:

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

Dado que bcrypt se basa en Blowfish, me llevaron a pensar que Blowfish es un algoritmo de hash. Si se trata de cifrado como las respuestas han señalado, entonces me parece que no debería tener un lugar en este artículo. Lo que es 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) usa bcrypt (es decir, blowfish, es decir, cifrado). Basado en esta nueva información que ustedes me están diciendo (blowfish es cifrado), esta clase suena mal. Me estoy perdiendo algo?

Author: Peter Vandivier, 2009-10-13

6 answers

Debería bastar con 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 algoritmos es lo suficientemente seguro como para que se produzca una brecha a través de un defecto de implementación, no 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 defectos que, aunque no son explotables ahora, han llevado a la competencia de SHA-3 para 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 todavía están aprendiendo sobre ellos.

Aunque bcrypt en su conjunto no ha tenido tanto escrutinio como el propio Blowfish, creo que 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 una herramienta para atacar hashes basados en SHA-2; debido a su memoria requisitos, la optimización de bcrypt requiere hardware más especializado como FPGA con algo de RAM a bordo.


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

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

Si alguien proporciona una contraseña que hashea el valor almacenado en la tabla de contraseñas, se autentica. 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 de trabajo.

Ahora considere bcrypt. Utiliza Blowfish para cifrar una cadena mágica, utilizando una clave "derivada" de la contraseña. Más tarde, cuando un usuario introduce una contraseña, la clave se deriva de nuevo, 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" password", pero la clave derivada nunca se almacena.

Con el fin De romper el criptografía aquí, un atacante tendría que recuperar la clave del texto cifrado. Esto se llama un ataque de "texto plano conocido", ya que el ataque conoce la cadena mágica que se ha cifrado, pero no la clave utilizada. Blowfish ha sido estudiado extensamente, y no se conocen ataques que permitan a un atacante encontrar la clave con un solo texto plano conocido.

Así que, al igual que los algoritmos irreversibles basados en digests criptográficos, bcrypt produce una salida irreversible, a partir de una contraseña, salt, y factor de costo. Su fuerza radica en la resistencia de Blowfish a los ataques de texto plano conocidos, que es análoga a un "primer ataque pre-imagen" en un algoritmo digest. Dado que se puede usar en lugar de un algoritmo hash para proteger las contraseñas, bcrypt se conoce confusamente como un algoritmo "hash" en sí.

Suponiendo que las tablas rainbow han sido frustradas por el uso adecuado de salt, cualquier función verdaderamente irreversible reduce al atacante a prueba y error. Y la tasa que el atacante puede hacer pruebas está determinado por la velocidad de ese algoritmo "hash" irreversible. Si se utiliza una sola iteración de una función hash, un atacante puede realizar millones de pruebas por segundo utilizando equipos que cuestan alrededor de 1 1000, probando todas las contraseñas de hasta 8 caracteres en unos pocos meses.

Sin embargo, si la salida del resumen se "devuelve" miles de veces, tomará cientos de años probar el mismo conjunto de contraseñas en ese hardware. Bcrypt logra el mismo " fortalecimiento clave" efecto iterando dentro de su rutina de derivación de claves, y un método 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 las suposiciones 1) que un Blowfish ha tenido un nivel similar de escrutinio como 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.

 306
Author: erickson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-23 17:29:50

Estoy de acuerdo con la respuesta de erickson, con una advertencia: para fines de autenticación de contraseña, bcrypt es mucho mejor que una 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 has enlazado de nuevo (desplázate hacia abajo hasta "La velocidad es exactamente lo que no quieres en una función hash de contraseña.").

Por supuesto, puede construir un algoritmo de hash de contraseña segura 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 en particular para hacer esto, si ya tiene disponible una implementación de bcrypt probada.

 47
Author: caf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-13 23:12:45

Blowfish no es un algoritmo de hash. Es un algoritmo de encriptación. Lo que eso significa es que puede cifrar algo usando blowfish, y luego más tarde puede descifrarlo de nuevo en texto sin formato.

SHA512 es un algoritmo hash. Eso significa que (en teoría) una vez que hash la entrada no se puede obtener la entrada original de nuevo.

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

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

 31
Author: Glen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-17 05:58:53

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

 4
Author: blowdart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-13 16:06:35

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

Hemos portado estos algoritmos a Java, y puedes encontrar una versión con licencia libre de ellos en ftp://ftp.arlut.utexas.edu/java_hashes/.

Tenga en cuenta que la mayoría de los (L)Unices modernos soportan el algoritmo de Drepper en sus archivos /etc/shadow.

 2
Author: Jonathan Abbey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-18 18:07:18

Acabo de encontrar esto:

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

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

 2
Author: disappearedng,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-13 18:15:33