Para cada usuário um sal ? Neste contexto terá que armazenar a senha e o sal de cada usuário para futuras verificacoes,
Para cada usuário um sal ? Neste contexto terá que armazenar a senha e o sal de cada usuário para futuras verificacoes,
Olá, Flávio
Sua pergunta é muito pertinente. Sim, é exatamente isso. Para cada usuário, um "sal" será gerado. O "sal" é uma string aleatória que é gerada e anexada à senha do usuário antes de passar pela função de hash. Isso torna a hash de cada senha única, mesmo se duas pessoas tiverem a mesma senha, suas hashes serão diferentes devido aos diferentes "sais" usados.
No exemplo prático da aula, a função criaHashComSal
gera um "sal" aleatório para cada senha que é criada.
function criaHashComSal(senha){
const sal = randomBytes(16).toString('hex');
const senhaHasheada = scryptSync(senha, sal, 64).toString('hex');
return `${sal}:${senhaHasheada}`
}
Depois, quando um usuário é criado, o "sal" e a hash da senha são armazenados separadamente no objeto do usuário:
class Usuario{
constructor(nome, senha){
this.nome = nome;
[this.sal, this.hash] = criaHashComSal(senha).split(':')
}
// ...
}
Portanto, para cada usuário, um "sal" é gerado e armazenado junto com a hash da senha. Isso é feito para aumentar a segurança, pois mesmo que um invasor obtenha a hash da senha, ele não será capaz de descobrir a senha original sem o "sal". Além disso, como o "sal" é único para cada usuário, um ataque de tabela de arco-íris (onde o invasor tenta adivinhar a senha comparando a hash com hashes pré-calculadas de senhas comuns) se torna muito mais difícil.
Espero ter ajudado e bons estudos!