Estoy viendo algoritmos de hash, pero no pude encontrar una respuesta.
- Bcrypt usa Blowfish
- Blowfish es mejor que MD5
- P: ¿pero es Blowfish mejor que SHA512?
Gracias..
Actualizar:
Quiero aclarar que entiendo la diferencia entre el hash y el cifrado. Lo que me llevó 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 llevaron a pensar que Blowfish es un algoritmo de hash. Si se trata de cifrado como lo han señalado las respuestas, 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 (creo que se usa para el hashing de contraseñas) usa bcrypt (es decir, blowfish, es decir, cifrado). Según esta nueva información que me están diciendo (blowfish es encriptación), esta clase suena mal. ¿Me estoy perdiendo de algo?
fuente
bcrypt
simplemente tiene un "factor de trabajo" más alto por defecto. Se supone que SHA no ... a menos que use passhash9, que puede usar junto con un factor de trabajo. ¿Por qué esta pregunta cerrada? está lejos de ser respondida pero muy importante.Respuestas:
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.
fuente
Estoy de acuerdo con la respuesta de Erickson, con una advertencia: para propósitos de autenticación de 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 hash de contraseña seguro alrededor de SHA-512 repitiéndolo miles de veces, al igual 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 una implementación de bcrypt probada disponible.
fuente
crypt
implementaciones (incluso en PHP que uso), cuando leí la pregunta original, incluso asumí que eso era lo que el OP quiso decir cuando preguntó sobre SHA-512: que en realidad se refería a miles de rondas de SHA-512 vs bcrypt que usa cientos o miles de iteraciones en sí.Blowfish no es un algoritmo hash. Es un algoritmo de encriptación. Lo que eso significa es que puedes encriptar algo usando blowfish, y luego puedes desencriptarlo de nuevo a texto plano.
SHA512 es un algoritmo hash. Eso significa que (en teoría) una vez que hash la entrada no puede recuperar la entrada original de nuevo.
Son 2 cosas diferentes, diseñadas para ser utilizadas para diferentes tareas. No hay una respuesta "correcta" a "¿es mejor el pez globo que SHA512?" También podrías preguntar "¿son las manzanas mejores que los canguros?"
Si desea leer más sobre el tema aquí hay algunos enlaces:
fuente
bcrypt
) se usa como un algoritmo de hash derivando una clave de la cadena de origen y usándola para cifrar un número mágico. Esto lo hace irreversible, esencialmente una función hash. No puede calcular la clave a partir de un cifrado, incluso si conoce el texto sin formato y los datos cifrados.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.
fuente
Recomendaría la implementación de la cripta basada en SHA-256 / SHA-512 de Ulrich Drepper.
Portamos estos algoritmos a Java, y puede encontrar una versión con licencia gratuita de ellos en ftp://ftp.arlut.utexas.edu/java_hashes/ .
Tenga en cuenta que la mayoría de las unidades modernas (L) admiten el algoritmo de Drepper en sus archivos / etc / shadow.
fuente
Acabo de encontrar esto:
http://codahale.com/how-to-safely-store-a-password/
¿Puede el autor de este artículo estar equivocado?
fuente