Skip to content
Latchkey

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.

Guias relacionados