¿Por qué PHP password_hash usa blowfish intstead threefish?

2

Me preguntaba por qué la función hash_password de PHP usa blowfish en lugar de threefish. Según Bruce Schneider, el pez globo está desactualizado y él está recomendando twofish o threefish. ¿Blowfish es lo suficientemente seguro y threefish solo ralentiza la autenticación de inicio de sesión?

    
pregunta ampika 11.01.2016 - 17:14
fuente

3 respuestas

8

PHP usa bcrypt para password_hash() , pero como PHP es PHP, tienen que maximizar la confusión, por lo que llaman es "Blowfish".

Además de ser una familia de pez altamente venenoso , Blowfish es un bloquee el cifrado durante más de 20 años. Bcrypt es una función de hashing de contraseñas que se deriva de un cifrado de bloque interno que es similar a Blowfish, pero se usa para algo completamente diferente de para qué se utiliza el cifrado de bloque, es decir, el cifrado.

Threefish es otro cifrado de bloque, que fue diseñado mucho más adelante para otro propósito, que es el diseño del función hash de Skein . Ahora presta atención , porque aquí viene el punto difícil. Las "funciones hash" y las "funciones hash de contraseña" son cosas completamente diferentes . A pesar de la similitud en el nombre, son bestias muy distintas, que toman diferentes tipos de entradas, producen diferentes tipos de salidas y tienen requisitos y propiedades de seguridad muy diferentes.

Threefish fue diseñado como un cifrado de bloque por una variedad de razones, la principal de las cuales es la necesidad de bloques grandes (512 bits o más), porque necesita bloques grandes para realizar una función hash que resista las colisiones. Sin embargo, las colisiones son completamente irrelevantes para el hashing de contraseñas, y el tamaño de bloque corto de Blowfish (64 bits) no es un problema para bcrypt.

Como cifrados de bloque , Threefish es "mejor" que Blowfish en muchos sentidos (los bloques más grandes, más rápidos, se pueden implementar sin tablas ...). Como bloque de construcción para una función hash, Threefish es de nuevo mejor que Blowfish, pero de diferentes maneras. Como bloque de construcción para una función de hash de contraseña, Threefish es en realidad peor que Blowfish, por las mismas razones por las que Threefish es mejor que Blowfish para una función hash; En particular, Threefish se puede implementar sin tablas. Esto significa que Threefish permite implementaciones paralelas completamente optimizadas en GPU , algo que es bueno en general y muy malo para el hashing de contraseñas .

Nada de esto realmente explica por qué PHP no se ha "cambiado a Threefish". Esto solo explica por qué tal cambio sería una mala idea.

    
respondido por el Thomas Pornin 11.01.2016 - 19:14
fuente
3

password_hash de PHP utiliza el función de hash de cifrado . Esto se acerca al estado de la técnica para el almacenamiento de contraseñas con quizás scrypt en su papel de sucesor.

Si bien no da un enlace para el comentario de Schneier (ortografía no corregida), sospecho que estaba hablando sobre el algoritmo de cifrado de pez globo. Si bien bcrypt se basa en pez globo, no se considera que tenga debilidades similares.

    
respondido por el Neil Smithline 11.01.2016 - 17:41
fuente
0

Actualmente, password_hash está diseñado para ser compatible con crypt() , que admite un rango limitado de algoritmos hash. De los algoritmos compatibles, Blowfish es el único algoritmo criptográfico:

  • Se sabe que el DES es débil y tiene un hash muy corto (2 caracteres)
  • El DES extendido es un poco mejor
  • MD5 es demasiado rápido para usar el hash de contraseñas: es posible realizar 100ks de pruebas por segundo en una PC moderna
  • SHA256 y SHA512 son fuertes, pero aún más rápidos que Blowfish, lo cual es malo para las contraseñas. Soportan un conteo redondo, lo que ayuda, y teóricamente podría usarse

Cualquier otra función podría incluirse fácilmente en PHP, pero daría como resultado hashes que no podrían ser verificados usando crypt.

    
respondido por el Matthew 11.01.2016 - 17:44
fuente

Lea otras preguntas en las etiquetas