En mi base de datos, tengo una columna para la contraseña hash y la sal. Mi aplicación permite a los usuarios cambiar su contraseña. ¿Debo usar la misma sal para la contraseña, o debo generar una nueva? ¿Importa a la seguridad de la aplicación?
Si. Siempre genere una nueva sal cuando se cambia la contraseña .
Considere los siguientes dos escenarios:
Sé que no estás cambiando la sal por tus contraseñas. Veo que admin
tiene una sal que es 'xyz', y ahora muevo la mesa del arco iris por esa sal. No importa a qué cambie su contraseña de administrador, lo sé.
Sé que el usuario tenía una contraseña hash de 'xyz: abcdef' ( xyz
es la sal, abcdef
es la contraseña hash). Luego, más tarde, veo que la información en hash es 'xyz: 012345' - ok, cambiaron su contraseña. Sin embargo, más tarde veo la contraseña con algoritmo hash como 'xyz: abcdef' y sé que ha cambiado es una copia de la primera contraseña.
Estos dos escenarios en los que se proporciona información innecesaria al atacante se evitan trivialmente al generar sal nueva cada vez que se genera una contraseña.
Notarás que las cursivas en "cuando se cambia la contraseña" arriba. Esto se agregó después de un comentario de darkhogg preguntando si cambiar la sal con más frecuencia es "mejor, peor o simplemente inútil".
En Security.SE la pregunta de ¿Con qué frecuencia debo restablecer mi sal? responde esto. Cambiar la sal con más frecuencia que los cambios de contraseña le da a un posible atacante más información sobre la contraseña que solo un hash.
Cambiar la sal más a menudo que la contraseña no significa que la nueva información dificultará más a un atacante porque la misma contraseña correcta seguirá funcionando sin importar cuál sea la sal.