Respuesta corta
No. Consulte: No haga rodar su propia seguridad .
Respuesta pedante
Has mezclado varios términos.
No es un HMAC si la clave es pública
Un HMAC requiere una clave secreta (a veces llamada pimienta) en lugar de una sal, que es pública . De lo contrario no es un HMAC; es solo un hash.
Un uso común de un HMAC es crear una huella digital a prueba de manipulaciones para proporcionar integridad al mensaje. No se utiliza para el almacenamiento de contraseñas.
No creas que estás hablando de un ataque de diccionario
El propósito de usar un hash con sal para almacenar una contraseña no es para mitigar los ataques de diccionario. El propósito es frustrar los ataques que utilizan una tabla de arco iris . La sal no afecta un ataque de diccionario puro; la única mitigación es usar una contraseña que no esté en el diccionario, por ejemplo, al requerir caracteres especiales o contraseñas más largas.
Creo que estás preguntando ...
Creo que podría estar preguntando "¿Está bien utilizar un algoritmo HMAC con una clave pública (en lugar de una función de hashing de contraseña adecuada, como BCrypt ) para almacenar un hash de contraseña?" En ese caso, la respuesta sigue siendo NO . Debe usar los algoritmos de hashing de contraseñas, no otros algoritmos de hashing , para la contraseña Hash, porque tienen características específicas del problema. Por ejemplo, son deliberadamente lentos y / o proporcionan parámetros que le permiten especificar el número de iteraciones requeridas, lo que aumenta la potencia de cómputo requerida para los ataques de diccionario y puede hacerlos mucho más difíciles en comparación con los hashes ordinarios que funcionan con una sola pasada.
¿Está bien usar la ID de usuario como un salt?
Lo siento, no. Causa algunos problemas:
- Crea un problema si el usuario alguna vez cambia su ID (se debe volver a calcular el hash)
- Es posible que la ID de usuario no sea lo suficientemente larga como para impedir los ataques
- El mismo ID de usuario se puede usar para diferentes servicios, lo que facilita al pirata informático saber si también se usó la misma contraseña
- Hacker podría componer un conjunto de tablas arco iris basadas en una lista de ID de usuarios comunes.
También, vea este artículo decente sobre el tema , que dice:
Una buena regla general es usar una sal que tenga el mismo tamaño que la salida de la función hash. Por ejemplo, la salida de SHA256 es de 256 bits (32 bytes), por lo que la sal debe ser de al menos 32 bytes aleatorios.