SHA512 contra Blowfish y Bcrypt

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

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

Gracias..

Actualizar:

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 “hashing adaptativo”

Como bcrypt se basa en Blowfish, me hicieron pensar que Blowfish es un algoritmo hash. Si se trata de cifrado como lo han señalado las respuestas, 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) utiliza bcrypt (es decir, blowfish, es decir, cifrado). Basado en esta nueva información que ustedes me están diciendo (blowfish es encriptación), esta clase suena mal. ¿Me estoy perdiendo de algo?

Debería bastar con decir si bcrypt o SHA-512 (en el contexto de un algoritmo apropiado como PBKDF2) es lo suficientemente bueno . Y la respuesta es sí, cualquiera de los algoritmos es lo suficientemente seguro como para que ocurra una violación a través de un error de implementación, no de criptoanálisis.

Si insiste en saber cuál es “mejor”, el NIST y otros han realizado revisiones exhaustivas de SHA-512. Es bueno, pero se han reconocido fallas que, aunque no son explotables ahora, han llevado a la competencia SHA-3 a 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.

Aunque bcrypt en su conjunto no ha tenido tanto escrutinio como Blowfish, creo que estar basado en un cifrado con una estructura bien entendida le da cierta seguridad inherente que la autenticación basada en hash no tiene. Además, es más fácil usar GPU comunes como una 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 memoria RAM incorporada.


Nota: bcrypt es un algoritmo que usa Blowfish internamente. No es un algoritmo de encriptación en sí mismo. Se usa para ocultar contraseñas irreversiblemente, al igual que las funciones hash se usan para hacer un “hash unidireccional”.

Los algoritmos hash criptográficos están diseñados para ser reversibles. En otras palabras, dado solo el resultado de una función hash, debería tomar “por siempre” para encontrar un mensaje que produzca la misma salida hash. De hecho, debería ser computacionalmente inviable encontrar dos mensajes 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 contiene el valor almacenado en la tabla de contraseñas, estos se autentican. En particular, debido a la irreversibilidad de la función hash, se supone que el usuario no es un atacante que se hizo con el hash y lo invirtió para encontrar una contraseña funcional.

Ahora considera bcrypt. Utiliza Blowfish para encriptar una cadena mágica, usando una clave “derivada” de la contraseña. Más tarde, cuando un usuario introduce una contraseña, la clave se deriva nuevamente, y si el texto cifrado producido al encriptar 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 de “texto conocido conocido”, ya que el ataque conoce la cadena mágica que se ha cifrado, pero no la clave utilizada. Blowfish se ha estudiado ampliamente, y aún no se conocen ataques que permitan a un atacante encontrar la clave con un único texto plano conocido.

Entonces, al igual que los algoritmos irreversibles basados ​​en resúmenes criptográficos, bcrypt produce un resultado irreversible, a partir de una contraseña, una sal y un factor de costo. Su fuerza radica en la resistencia de Blowfish a los ataques de texto claro conocidos, que es análogo a un “primer ataque de preimagen” en un algoritmo de resumen. Dado que se puede usar en lugar de un algoritmo hash para proteger las contraseñas, a bcrypt se lo denomina confusamente algoritmo de “hash”.

Suponiendo que las tablas del arco iris se han visto frustradas 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 pruebas está determinada por la velocidad de ese algoritmo irreversible de “hash”. Si se usa una única iteración de una función de hash, un atacante puede realizar millones de bashs por segundo usando un equipo que cuesta del orden de $ 1000, probando todas las contraseñas de hasta 8 caracteres en pocos meses.

Sin embargo, si la salida de resumen se “retroalimenta” 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” al iterar dentro de su rutina de derivación de clave, y un método basado en hash adecuado como PBKDF2 hace lo mismo; a este respecto, los dos métodos son similares.

Por lo tanto, mi recomendación de bcrypt surge de las suposiciones 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 cifrado están mejor desarrollados que los de las funciones hash.

Estoy de acuerdo con la respuesta de Erickson, con una advertencia: para propósitos de autenticación con contraseña, bcrypt es mucho mejor que una sola iteración 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 vinculaste nuevamente (desplázate hacia abajo hasta “La velocidad es exactamente lo que no quieres en una función hash de contraseña “).

Por supuesto, puede crear un algoritmo de hashing 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 una razón particular para hacer esto si ya tiene disponible una implementación probada de bcrypt.

Blowfish no es un algoritmo hash. Es un algoritmo de cifrado. Lo que eso significa es que puede cifrar algo utilizando blowfish, y luego puede descifrarlo de nuevo a texto sin formato.

SHA512 es un algoritmo 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 usarse en diferentes tareas. No hay una respuesta “correcta” para “¿es mejor blowfish que SHA512?” También podría preguntar: “¿las manzanas son mejores que los canguros?”

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

  • Blowfish
  • SHA512

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

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

Transmitimos 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 la mayoría de los Unders modernos (L) admiten el algoritmo de Drepper en sus archivos / etc / shadow.

Me acabo de enterar de esto:

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

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