Debería ser suficiente 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 se produzca una violación a través de una falla de implementación, no de criptoanálisis.
Si insiste en saber cuál es "mejor", el SHA-512 ha recibido revisiones exhaustivas de NIST y otros. Es bueno, pero se han reconocido fallas que, aunque no son explotables 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.
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 carece de autenticación basada en hash. Además, es más fácil usar GPU comunes como herramienta para atacar hash 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 incorporada.
Nota: bcrypt es un algoritmo que usa Blowfish internamente. No es un algoritmo de cifrado en sí mismo. Se usa para ocultar irreversiblemente las contraseñas, así como las funciones hash se usan para hacer un "hash unidireccional".
Los algoritmos 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 llevar "para siempre" 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 coincide con el valor almacenado en la tabla de contraseñas, se autentica. En particular, debido a la irreversibilidad de la función hash, se supone 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 encriptar 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 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 se ha estudiado ampliamente, 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 resúmenes criptográficos, bcrypt produce una salida irreversible, a partir de una contraseña, sal y factor de costo. Su fuerza radica en la resistencia de Blowfish a los ataques de texto sin formato conocidos, que es análogo a un "primer ataque previo a la imagen" en un algoritmo de resumen. Como se puede usar en lugar de un algoritmo hash para proteger las contraseñas, bcrypt se conoce de manera confusa como un algoritmo "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 realizar pruebas está determinada por la velocidad de ese algoritmo irreversible "hash". Si se usa una sola iteración de una función hash, un atacante puede hacer millones de pruebas por segundo utilizando un equipo que cuesta del orden de $ 1000, probando todas las contraseñas de hasta 8 caracteres en unos 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 claves" al iterar dentro de su rutina de derivación de claves, 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 se deriva de los supuestos 1) 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.