Para cada usuário um sal ? Neste contexto terá que armazenar a senha e o sal de cada usuário para futuras verificacoes,
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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!