Para ser claros, estos algoritmos son algoritmos de hashing de contraseñas, que podrían usarse para crear una clave de cifrado. Estas no son rutinas de cifrado por sí mismas. Si está preguntando acerca de las rutinas de cifrado (como AES), edite su pregunta.
Si su pregunta es sobre la obtención de claves (para que pueda crear una clave para alimentar su rutina de cifrado):
Le pregunté a un yo mismo, si no es una pregunta duplicada .
- PBKDF2 está diseñado específicamente para la derivación de claves.
- bcrypt también se puede usar para esto, aunque no fue necesariamente diseñado para la derivación de la clave (un poco menos), pero el hashing (aún funciona). Es más nuevo (menos), pero aún suficientemente investigado (en su mayoría elimina el menos). Es menos conveniente usar GPU (más), debido a la sobrecarga de memoria adicional. (Si la memoria no me falla, no me corregiré)
- scrypt es más nuevo y se considera prometedor, aunque no tan bien investigado como los otros dos. (un signo menos) Espero que esto, como bcrypt, esté diseñado para el hashing de contraseñas, pero no necesariamente para la obtención de claves. Si usa esto, puede considerar agregar una rutina más probada a la fórmula, ya que no es una rutina probada por sí misma.
Yo usaría PBKDF2, y bcrypt, y xo los dos resultados juntos, porque me gusta que PBKDF2 fue diseñado para la derivación de claves, y que bcrypt es más resistente a las GPU. Pero puedo estar sobre diseñando.
De todos modos, asegúrate de que tu rutina lleve mucho tiempo. Si no ajusta los hashes correctamente, y se completa demasiado rápido, entonces una fuerza bruta sin conexión puede ser factible. Recomiendo 50-500ms. Tenga en cuenta que el hardware más nuevo acelerará esto, y que los piratas informáticos pueden acelerarlo aún más si invierten, o tal vez simplemente alquilan una nube / clúster. Ambos significan que debe ajustar los hashes para repetir todo lo posible, deteniéndose justo antes de tener un "problema lento". Porque no hará nada excepto acelerar con el tiempo.