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.