1
resposta

Para cada usuário um sal ?

Para cada usuário um sal ? Neste contexto terá que armazenar a senha e o sal de cada usuário para futuras verificacoes,

1 resposta

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!