Glossário
O que é um sal? O 'tempero' por usuário adicionado ao hash de uma senha
Um sal é um valor aleatório, diferente para cada usuário, adicionado antes do hash de uma senha. Por que é necessário: faz a mesma senha ser armazenada de forma diferente para cada um, derrotando rainbow tables e quebra em massa.
"Sal" surge no momento em que você fala sobre hashing de senha. Como o sal na culinária, adicionar uma pitada ao hash muda drasticamente o cenário de segurança. Veja como funciona e os pontos-chave (sem passos de ataque).
Por que o "tempero" funciona
Sem um sal, usuários com a mesma senha obtêm o mesmo hash armazenado. Isso entrega ao invasor dois atalhos: uma tabela de consulta pré-computada (uma rainbow table) acerta direto, e "quebrar uma conta serve para todos com a mesma senha".
Adicione um sal e a mesma "password123" é armazenada como algo completamente diferente para cada usuário.
Equívocos comuns vs. a verdade
Equívoco
- Um sal precisa ser mantido em segredo
- Um único sal compartilhado para todos os usuários serve
- Um sal torna até senhas fracas seguras
A verdade
- Um sal pode ser público (armazene-o com o hash)
- Um valor aleatório diferente por usuário (idealmente por senha)
- Um sal defende contra "pré-computação e quebra por reuso"; a força bruta é tratada por um hash lento
A visão deste site: um sal não é uma pimenta
Frequentemente confundida com um sal está a pimenta (pepper): um valor secreto adicionado a todos, mantido em outro lugar que não o banco de dados (configuração da aplicação ou um gerenciador de chaves). Um sal (público, por usuário) e uma pimenta (secreta, global) têm trabalhos diferentes — nenhum substitui o outro. Na prática, porém, a primeira prioridade é simplesmente usar sal + um hash lento corretamente via bcrypt/Argon2.
Leia a seguir
- Glossário: o que é hashing de senha (entenda-o junto com o sal)
- Aprenda: como armazenar senhas com segurança (hashing + sal na prática)
- Fundamentos: armazenando senhas do jeito certo
FAQ
QUm sal precisa ser mantido em segredo?
Não. Um sal não é uma 'chave secreta' — pode ficar armazenado ao lado do hash. Seu propósito não é o sigilo; é fazer a mesma senha ser armazenada de forma diferente para cada usuário, o que derrota a pré-computação (rainbow tables) e a quebra em massa por reuso. A coisa que você mantém em segredo é um conceito diferente, uma 'pimenta' (veja abaixo).
QPosso reutilizar o mesmo sal para todos os usuários?
Não. O sal precisa ser um valor aleatório que difere por usuário (idealmente por senha). Um sal compartilhado faz usuários com a mesma senha armazenarem hashes idênticos, então um invasor consegue quebrar muitas contas com uma única execução de força bruta. Gere um novo com um RNG criptográfico a cada vez.
QPreciso implementar o sal eu mesmo?
Normalmente não. Hashes feitos para isso, como bcrypt, Argon2 e scrypt, geram e armazenam o sal para você (muitas vezes embutido dentro da string do hash). Em vez de adicionar um sal à mão, apoie-se nessas implementações padrão — é mais seguro e confiável.