Lo malo de revelar la contraseña hash-and-salt es que permite ataques de diccionario sin conexión : desde la contraseña el hash y la sal son suficientes para verificar una contraseña potencial, luego, por definición, permiten que un atacante intente las contraseñas en sus propias máquinas, limitado solo por el número de PC (u otro hardware) que pueda reunir. Esto contrasta con los ataques del diccionario en línea , donde cada intento debe ir a través de su servidor, y su servidor no aceptará probar miles de millones de contraseñas por segundo.
El hashing de contraseñas es una segunda línea de defensa . No desea que los atacantes obtengan suficiente información para ejecutar ataques de diccionario sin conexión; pero cuando lo hacen, al menos lo prefiere si tienen que pagar el precio total del ataque, es decir, les muestra solo hashes de contraseña , no las contraseñas en sí mismas. Además, desea una función hash lenta (con millones de iteraciones) y la sal para evitar ataques paralelos y otras optimizaciones similares (como tablas precomputadas).
Todo esto tiene que ver con la protección de contraseñas , como en "datos secretos que los usuarios humanos recuerdan". Los cerebros humanos son lo que son, las contraseñas tienden a ser vulnerables a los ataques de diccionario. Sin embargo, si puede convencer a sus usuarios humanos para que recuerden secuencias de 20 letras aleatorias ( no secuencias que elijan ellos mismos, pero letras generadas aleatoriamente), entonces puede mostrar los valores de hash, ya que las contraseñas son suficientemente aleatorias. Fuera del alcance de los ataques de diccionario, de todos modos, podría decirse que ya no son contraseñas sino claves . Tenga en cuenta que esto no es una cuestión de longitud sino de aleatoriedad : una contraseña no es segura porque es larga, sino porque se produjo con suficiente aleatoriedad; solo necesitas la longitud para hacer espacio para la aleatoriedad.
Si necesita una referencia a los infieles no creyentes , invoque Publicación especial NIST SP 800-118 (aún en borrador, pero publicada, sin embargo), que incluye especialmente esta cita (del" resumen ejecutivo "):
contraseña
Los ataques de craqueo pueden ser mitigados usando fuerte
Contraseñas, eligiendo fuertes algoritmos criptográficos.
e implementaciones para el hashing de contraseñas, y proteger la confidencialidad de los hashes de contraseñas .
(El énfasis es mío.)
El hash de contraseñas es un arte difícil. Usted dice que usa "HMAC / SHA-1", pero HMAC no es una función hash; es un MAC . Los algoritmos MAC utilizan una clave . Lo que probablemente quiere decir es que utiliza una función de hash de contraseña que ha sido diseñada sobre una o varias invocaciones de HMAC / SHA-1 como un componente básico. PBKDF2 es una función de hashing de contraseña. Incluye un parámetro adicional que es el número de iteraciones y eso es importante.
Consulte esta respuesta para una discusión detallada sobre la contraseña El hash, su teoría y su práctica.