O que é um salt? Derrotando ataques de hash pré-computados
Um salt é um dado aleatório misturado a um valor antes de passar pelo hash, de modo que entradas idênticas produzam hashes diferentes e ataques pré-computados falhem.
Um salt é um pequeno trecho de aleatoriedade que torna o hashing de senhas seguro. Sem ele, dois usuários com a mesma senha obtêm o mesmo hash, e atacantes podem usar tabelas pré-computadas para reverter hashes instantaneamente. Adicionar um salt exclusivo por senha força o atacante a atacar cada uma separadamente. Entender salts esclarece como as credenciais são armazenadas com segurança.
O problema que os salts resolvem
Um hash simples é determinístico: a mesma senha sempre gera o mesmo valor de hash. Atacantes exploram isso com rainbow tables, buscas pré-computadas de hash para senha. Um salt torna cada hash único, de modo que essas tabelas pré-computadas se tornam inúteis.
Como o salting funciona
- Gere um salt aleatório para cada senha.
- Aplique o hash ao salt combinado com a senha.
- Armazene o salt junto do hash para que possa ser verificado depois.
Salts não são secretos
Um salt não precisa ser oculto; ele é armazenado com o hash. Sua função é garantir unicidade, não sigilo. O que ele assegura é que um atacante não pode reutilizar trabalho entre contas nem depender de tabelas pré-computadas.
Salts versus peppers
Um pepper é um valor secreto separado adicionado a todos os hashes e mantido fora do banco de dados, muitas vezes em um secrets store. Salt mais pepper significa que um atacante que roube o banco de dados ainda não tem o pepper. Os dois se complementam.
Salts no contexto de CI/CD
Se um serviço que você constrói armazena senhas de usuários, ele deve aplicar salt e hash a elas com um algoritmo forte. Em pipelines, quaisquer fixtures de teste ou dados de seed nunca devem embutir credenciais reais, e o código de tratamento de senhas merece uma revisão de segurança dedicada antes do deploy.
O salting é necessário, mas não suficiente
Um salt impede a pré-computação, mas um hash rápido ainda permite que atacantes adivinhem rapidamente. O salting deve ser combinado com uma função de hashing de senha deliberadamente lenta como bcrypt para tornar a força bruta impraticável.
Principais conclusões
- Um salt é um dado aleatório exclusivo adicionado antes do hashing para tornar cada hash distinto.
- Ele derrota rainbow tables e impede que atacantes reutilizem trabalho entre contas.
- Salts precisam de uma função de hashing lenta como bcrypt para proteger totalmente as senhas.