Você nunca deve armazenar uma senha como está no banco de dados. Então como você a armazena? A resposta é hashing. Veja como funciona e os pontos-chave para fazê-lo com segurança (sem passos de ataque).
Hashing ≠ criptografia
Esses dois são confundidos, mas os objetivos são opostos. A criptografia é "reversível com uma chave, para você poder lê-la de volta depois". O hashing é "de mão única — você não consegue revertê-lo". Uma senha é uma informação que nem mesmo o operador deveria precisar ler de volta, então um hash deliberadamente irreversível é o encaixe certo.
Criptografia (reversível)
texto puro ⇄ texto cifrado. a chave reverte. para dados que você lê de volta
Hashing (mão única)
senha → hash. não pode ser revertido. para armazenar senhas
No login, você verifica "aplicar o hash na senha digitada do mesmo jeito e ver se bate com o hash armazenado." Você nunca precisa recuperar a original.
Por que "MD5/SHA-256 puro" não basta
MD5 e SHA-256 são hashes rápidos. Isso é uma propriedade útil em outros contextos, mas uma fraqueza para o armazenamento de senhas: um invasor consegue computar um número enorme de tentativas por segundo contra um hash vazado.
- Rainbow tables: uma tabela pré-computada gigante de "senha comum → seu hash". Com um hash puro, uma correspondência é encontrada só consultando-a.
- Força bruta: quanto mais rápido o hash, mais tentativas por unidade de tempo — ou seja, mais fácil de quebrar.
Hashes de uso geral vs hashes de senha
Os dois se chamam "hash", mas foram feitos para tarefas diferentes. Só a coluna da direita serve para armazenar senhas.
| Hash de uso geral (MD5, SHA-1, SHA-256) | Hash de senha (Argon2id, bcrypt, scrypt, PBKDF2) | |
|---|---|---|
| Feito para | Detectar alteração de arquivos, assinaturas etc. | Armazenar senhas |
| Velocidade | O mais rápido possível | Deliberadamente lento (ajustável) |
| Sal | Não faz parte do design | Faz parte do design (o PBKDF2 recebe o sal de quem o chama) |
| Ajuste do custo | Não é possível | Custo, iterações ou memória; aumentado com o tempo |
| Para armazenar senhas | Não use | Use |
A NIST SP 800-63B-4 também exige que as senhas sejam armazenadas com um esquema de hashing de senha que receba um sal e um fator de custo como entradas, com o custo tão alto quanto for prático sem prejudicar o desempenho e aumentado com o tempo.
As duas salvaguardas
Adicione um sal (um valor diferente por usuário)
Antes do hashing, misture um valor aleatório que difere por usuário (um sal). Agora a mesma senha é armazenada de forma diferente para cada um, o que derrota as rainbow tables e impede que uma única execução de quebra cubra senhas reutilizadas em várias contas.
Use um hash deliberadamente lento e feito para isso
bcrypt / Argon2 / scrypt permitem tornar o cálculo intencionalmente caro (um parâmetro de custo). Uma lentidão que ninguém percebe em um login legítimo derruba a força bruta do invasor a uma taxa impraticável. O sal também já está embutido neles.
Casos reais: quando um aviso de vazamento diz "com hash"
Os comunicados de vazamento às vezes informam se as senhas estavam em texto puro, com hash ou criptografadas. Estes são casos que este site já cobriu, organizados pelo método de armazenamento.
| Caso | O que foi divulgado sobre as senhas | O que isso significa para os usuários |
|---|---|---|
| Takufile-bin (2019) | Armazenadas em texto puro | Legíveis como estão. Outros serviços com a mesma senha também ficam em risco |
| Sakura Internet (2026) (em inglês) | Algumas senhas iniciais não tinham hash | Quem ainda usa uma senha inicial precisa trocá-la agora |
| Gyazo (2026) (em inglês) | Hashes de senha vazaram; método não divulgado | Podem ser revertidos dependendo do método. A empresa pediu que os usuários trocassem as senhas |
Dois pontos para ter em mente ao ler um aviso:
- "Com hash" sozinho não diz se é seguro. MD5 puro e um hash lento com sal diferem enormemente na facilidade de recuperar as senhas
- Se o método não for informado, aja como se fosse fraco. Troque a senha nesse serviço e em qualquer outro em que você use a mesma
Você pode verificar se seu endereço de e-mail aparece em vazamentos anteriores com como verificar se sua senha vazou.
Como verificar seu próprio site e suas contas
Como usuário: observe como funciona a redefinição de senha
Se o "esqueci minha senha" envia sua senha original por e-mail, o serviço muito provavelmente a armazena em texto puro ou de forma reversível. Não use ali uma senha que você usa em qualquer outro lugar.
Como usuário: verifique a força da sua senha
O hashing protege melhor senhas longas e difíceis de adivinhar. Confira uma estimativa aproximada de força com o verificador de força de senha e deixe o armazenamento com um gerenciador de senhas.
Como desenvolvedor: verifique qual função armazena as senhas
Encontre as funções que seu código usa para armazenar e verificar senhas. O password_hash() do PHP, a autenticação embutida do Django ou uma biblioteca bcrypt/Argon2 são específicos para senhas e cobrem o básico. Qualquer chamada direta a md5(), sha1() ou sha256 é candidata a migração.
Como desenvolvedor: verifique os valores armazenados e as configurações
Como identificar os hashes armazenados, as configurações mínimas da OWASP e como migrar de algoritmos fracos estão em como armazenar senhas com segurança.
A visão deste site: não construa você mesmo
Supor que "MD5 mais um sal já basta" é um erro comum. O armazenamento seguro de senhas também depende de gerar e armazenar o sal, ajustar o custo e lidar com diferenças de tempo. Em vez de montar isso você mesmo, apoie-se na função oficial de senha da sua linguagem/framework (a maioria usa bcrypt/Argon2 por baixo). Para novos sistemas, faça do Argon2id sua primeira escolha.
Fontes (primárias)
- NIST, "SP 800-63B-4 Digital Identity Guidelines: Authentication and Authenticator Management" (agosto de 2025) — pages.nist.gov (esquemas de hashing que recebem um sal e um fator de custo; aumento do custo com o tempo)
- OWASP, "Password Storage Cheat Sheet" — cheatsheetseries.owasp.org (hashing vs criptografia, algoritmos recomendados, fator de trabalho)
- RFC 9106, "Argon2 Memory-Hard Function for Password Hashing and Proof-of-Work Applications" — rfc-editor.org
- As fontes de cada caso (os comunicados das próprias empresas) estão listadas nos artigos deste site indicados nos links
Leia a seguir
- Glossário: o que é um sal (o valor aleatório por usuário que derrota ataques de reuso)
- Aprenda: como armazenar senhas com segurança (hashing + sal na prática)
- Fundamentos: armazenando senhas do jeito certo (chega de texto puro) / escolhendo um gerenciador de senhas
- Caso: o vazamento de dados do Takufile-bin (2019) (armazenamento de senhas em texto puro na prática)