Sal (salt)
Um sal é um valor único adicionado a cada operação de hash de senha ou derivação de chave para fazer entradas iguais produzirem saídas diferentes.
Definição
Um sal é um valor adicionado a uma senha ou outra entrada antes do hash de senha ou da derivação de chave. Sua principal função é tornar a saída derivada única mesmo quando dois usuários escolhem a mesma senha.
Um sal geralmente não precisa ser secreto. Ele é armazenado com o hash ou a saída codificada para que o verificador possa repetir o mesmo cálculo depois.
Como funciona
Para cada senha, o sistema gera um novo sal aleatório e passa a senha e o sal para uma função de hash de senha como Argon2id, bcrypt ou PBKDF2. Durante a verificação, o sal armazenado é reutilizado com a senha candidata.
Sais únicos impedem que senhas iguais produzam hashes armazenados iguais e tornam tabelas pré-calculadas muito menos úteis. Eles não transformam senhas fracas em fortes; a função de hash de senha ainda precisa de parâmetros de custo adequados.
Sal, chave, pepper e nonce
Um sal fornece unicidade pública, não uma chave secreta de autenticação. Um pepper é um valor secreto separado mantido fora do banco de senhas, e um nonce é um número usado uma vez em um protocolo ou operação de criptografia específica.
Em sistemas novos, gere sais com uma fonte aleatória criptograficamente segura e, quando possível, deixe a biblioteca de hash de senha armazená-los em seu formato codificado padrão.
Não. Ele deve ser único e preferencialmente aleatório, mas pode ser armazenado junto ao hash.
Não deveriam. Sais aleatórios tornam a reutilização improvável e impedem que senhas iguais apareçam como hashes iguais.
Não. Use uma função de hash de senha com parâmetros de custo adequados, sais aleatórios seguros, limitação de tentativas e monitoramento.