No meu banco de dados, eu tenho uma coluna para a senha com hash e o salt. Meu aplicativo permite que os usuários alterem suas senhas. Devo usar o mesmo sal para a senha ou devo gerar uma nova? Isso importa para a segurança do aplicativo?
Sim. Sempre gere um novo sal quando a senha for alterada .
Considere os dois cenários a seguir:
Eu sei que você não está mudando o sal das suas senhas. Vejo que admin
há um sal que é 'xyz' e agora moo a mesa do arco-íris para esse sal. Não importa para o que você altera sua senha de administrador, eu sei disso.
Eu sei que o usuário tinha uma senha com hash 'xyz: abcdef' ( xyz
é o salt, abcdef
é a senha com hash). Mais tarde, vejo que as informações do hash são 'xyz: 012345' - ok, eles mudaram sua senha. Mais tarde, vejo a senha com hash como 'xyz: abcdef' e sei que a alterou novamente na primeira senha.
Esses dois cenários em que informações desnecessárias são fornecidas ao invasor são trivialmente evitados, gerando novo sal toda vez que uma senha é gerada.
Você notará que o itálico está em "quando a senha for alterada" acima. Isso foi adicionado após um comentário de darkhogg perguntando se a troca de sal com mais frequência é "melhor, pior ou apenas inútil?"
No Security.SE, a pergunta sobre com que frequência devo redefinir meu sal? responde isso. Alterar o salt com mais frequência do que as alterações de senha fornece a um possível invasor mais informações sobre a senha do que apenas um hash.
Alterar o salt com mais frequência do que a senha não significa que um invasor será mais prejudicado pelas novas informações, porque a mesma senha correta ainda funcionará, não importa qual seja o salt.