it-swarm-es.com

¿Cómo hash de contraseñas de forma segura?

Si escribo contraseñas antes de almacenarlas en mi base de datos, ¿es eso suficiente para evitar que alguien las recupere?

Debo señalar que esto se relaciona solo con la recuperación directamente de la base de datos, y no con ningún otro tipo de ataque, como el uso de fuerza bruta en la página de inicio de sesión de la aplicación, el registro de teclas en el cliente y, por supuesto, criptoanálisis de goma (o hoy en día deberíamos llamarlo " Criptoanálisis de chocolate ").

Por supuesto, cualquier forma de hash no evitará esos ataques.

850
AviD

se dice que bcrypt es más lento en las GPU, lo que hace que la fuerza bruta sea más lenta. Sin embargo, con el hardware de la computadora en constante evolución, no solo debemos confiar en la dificultad de implementar un algoritmo de hashing particular en un hardware en particular.

Por el contrario, puede aumentar arbitrariamente el costo de la fuerza bruta de un hash utilizando el "factor de trabajo/costo variable" (a veces también llamado "rondas") que admiten algunas funciones de hash. Entre ellos están bcrypt y SHA-512.

La función crypt() de Glibc permite la especificación de rondas para algunos algoritmos hash. Por ejemplo, un factor de costo de 100000 para SHA-512 hace que la generación (y, por lo tanto, la fuerza bruta) del hash sea aproximadamente 4 veces más lenta que el factor de costo 08 para bcrypt. Esto se puede confirmar mediante el uso de un programa de resolución de hash como hashcat.

Si asume que en algún momento sus hashes y sales de la contraseña serán robados y los atacantes usarán el hardware ASIC para forzarlos, simplemente aumente el factor de trabajo para que sea demasiado costoso para ellos, sin sobrecargar la CPU de su servidor con autenticación de usuario regular.

Sin embargo, la importancia de las contraseñas largas y aleatorias se aplica.

Acabo de escribir un publicación de blog sobre los detalles.

0
Michael Franzl