Se supone que Scrypt es "mejor" que bcrypt, pero también es mucho más reciente, y eso es malo (porque "más reciente" implica inherentemente que "ha recibido menos escrutinio").
Todos estos esquemas de hash de contraseñas intentan hacer que el procesamiento de una sola contraseña sea más costoso para el atacante , mientras que no es demasiado costoso para su servidor . Como su servidor es, básicamente, una PC, y el atacante puede elegir el hardware más eficiente para su tarea, los esquemas de hashing de contraseñas intentan ser tales que la mejor plataforma para ellos será una PC. PBKDF2 se puede optimizar completamente con GPU, mientras que bcrypt y scrypt son mucho menos compatibles con GPU. Tanto Bcrypt como Scrypt requieren RAM rápida , que es un recurso escaso en una GPU (una GPU puede tener una gran cantidad de RAM, pero no podrá acceder a ella desde todos los núcleos simultáneamente).
Da la casualidad de que FPGA integra muchos bloques de RAM pequeños que son muy útiles para optimizar un ataque de diccionario paralelo con bcrypt: esto significa que un atacante obtendrá un gran impulso al utilizar FPGA por un valor de 1000 $ en lugar de un PC genérico por un valor de 1000 $. Este es el tipo de impulso que queremos evitar. Por lo tanto, scrypt, que requiere mucha más memoria RAM; no es demasiado para una PC (solo estamos hablando de un par de megabytes), pero lo suficiente como para hacer la vida más difícil para una FPGA (consulte esta respuesta para un tratamiento detallado de la pregunta).
Por lo tanto, teóricamente , scrypt debería ser mejor que bcrypt. Sin embargo , todo esto está sujeto a si Scrypt cumple con sus promesas criptográficas. Este tipo de garantía de robustez solo se puede lograr a través del tiempo: el esquema se considerará seguro si sobrevive a los incansables ataques de los criptógrafos. El tiempo necesario es, por supuesto, un poco subjetivo, y también depende mucho de la exposición (cuanto más extendido es un esquema, más "interesante" es un objetivo en el que se rompe. aumentaría la fama académica del perpetrador, lo que atraería un mayor escrutinio). Mi propia regla de oro es esperar unos 5 años después de la publicación, por lo que 2014 en el caso de Scrypt.
También está la cuestión de disponibilidad : si desea utilizar una función, necesita una implementación que pueda insertarse en el marco de programación que utiliza.