El hash criptográfico (como md5) con sal es malo.
Ya no es suficiente. Las funciones hash criptográficas tradicionales están diseñadas para documentos y, por lo tanto, están optimizadas para velocidad.
Pero la velocidad es exactamente lo que no queremos para los hashes de contraseña. Las tarjetas gráficas modernas pueden hacer 2.000.000.000 hash SHA1 o MD5 por segundo. Por lo tanto, forzar una contraseña de 6 caracteres en bruto requiere menos de 10 minutos.
No es infrecuente romper / romper archivos de sombra de Unix.
Eso es cierto para los antiguos hashes usados en ellos.
Para hacer un hash de contraseña, debería ejecutarlo en md5 o lo que sea cientos o miles de veces.
Si bien esta es una mejora sobre el uso de funciones de hash rápidas, no es suficiente.
Debes usar uno de los algoritmos de cifrado hash (excepto md5crypt ): sha256crypt , sha512crypt , bcrypt o scrypt . Esos son algoritmos diseñados para ser relativamente lentos y no fáciles de implementar en tarjetas gráficas para obtener un aumento de rendimiento.
Esos algoritmos hacen más que solo usar la salida de una ronda como entrada para la próxima ronda. Las reglas de qué usar como entrada varían según el contador de iteraciones (consulte las especificaciones vinculadas). Moderno sistema operativo unix utiliza sha512crypt.
scrypt va un paso más allá que los otros algoritmos porque además del uso escalable de la CPU, scrypt utiliza mucha memoria. La idea es hacer que las implementaciones de hardware de las contraseñas sean mucho más caras. Dicho hardware generalmente tiene acceso a hasta 1 KB de memoria rápida, pero los parámetros predeterminados de scrypt requieren 16 MB.