Quando você cria uma conta em um site e escolhe uma senha, onde ela vai parar? Muita gente imagina que a senha fica guardada em um banco de dados exatamente como foi digitada. Em sistemas bem construídos, isso não acontece. O que fica armazenado é um hash da senha, normalmente combinado com um salt. Esses dois conceitos são fundamentais em segurança da informação e ajudam a entender por que vazamentos de dados podem ser mais ou menos graves.
Neste artigo, você vai aprender, sem matemática complicada, o que é uma função hash, por que ela é usada para senhas, o que é salt e quais algoritmos são recomendados hoje.
O problema de guardar senhas em texto puro
Se um sistema salva as senhas exatamente como os usuários digitaram (o chamado texto puro), basta um único vazamento do banco de dados para que todas as senhas fiquem expostas. E como muitas pessoas repetem a mesma senha em vários serviços, o estrago vai muito além daquele site: o invasor pode testar as mesmas combinações de e-mail e senha em redes sociais, bancos e lojas virtuais.
Além disso, guardar senhas legíveis significa que qualquer pessoa com acesso interno ao banco de dados, como um funcionário mal-intencionado, consegue vê-las. Por isso, a regra básica é: o sistema não precisa saber qual é a sua senha, só precisa conseguir verificar se você digitou a senha certa.
O que é uma função hash
Uma função hash criptográfica é um algoritmo que recebe uma entrada de qualquer tamanho (uma palavra, um texto ou um arquivo) e produz uma saída de tamanho fixo, uma espécie de “impressão digital” daquele dado. Ela tem algumas propriedades importantes:
- Determinística: a mesma entrada sempre gera o mesmo hash.
- Unidirecional: a partir do hash, não é viável descobrir a entrada original. Não existe um “desfazer”.
- Efeito avalanche: uma mudança mínima na entrada, como trocar uma letra minúscula por maiúscula, gera um hash completamente diferente.
- Resistência a colisões: deve ser extremamente difícil encontrar duas entradas diferentes que produzam o mesmo hash.
Como o login funciona com hash
- No cadastro, você digita sua senha.
- O sistema calcula o hash dessa senha e salva apenas o hash no banco de dados.
- No login, você digita a senha novamente.
- O sistema calcula o hash do que você digitou e compara com o hash armazenado.
- Se os dois forem iguais, a senha está correta e o acesso é liberado.
Repare que, em nenhum momento, o sistema precisa guardar a senha original. É por isso que serviços bem projetados não conseguem “te enviar a sua senha” quando você a esquece: eles não a conhecem. O que oferecem é um link para criar uma senha nova.
Hash não é criptografia
É comum ouvir que as senhas são “criptografadas”, mas há uma diferença importante entre os dois conceitos:
| Característica | Criptografia | Hash |
|---|---|---|
| É reversível? | Sim, com a chave correta | Não |
| Usa chave? | Sim | Não (a função é pública) |
| Tamanho da saída | Varia conforme a entrada | Fixo |
| Uso típico | Proteger dados que precisam ser lidos depois (mensagens, arquivos) | Verificar integridade e armazenar senhas |
Se as senhas fossem apenas criptografadas, quem obtivesse a chave conseguiria recuperar todas elas. Com hash, não há chave a ser roubada.
O ponto fraco do hash simples
Se o hash é irreversível, por que ainda existem senhas descobertas após vazamentos? Porque, embora não seja possível “desfazer” o hash, é possível adivinhar. O atacante pega uma lista enorme de senhas comuns (como “123456”, “senha123” ou nomes seguidos de datas), calcula o hash de cada uma e compara com os hashes vazados. Esse é o ataque de dicionário.
Há ainda uma versão mais eficiente: as tabelas pré-computadas (como as chamadas rainbow tables), em que os hashes de milhões de senhas já foram calculados antecipadamente. E existe outro problema: se dois usuários têm a mesma senha, eles terão o mesmo hash. Assim, quebrar uma senha revela automaticamente todas as contas que a utilizam.
O que é salt e como ele resolve isso
O salt (“sal”, em inglês) é um valor aleatório, diferente para cada usuário, que é combinado com a senha antes de calcular o hash. O salt é armazenado junto com o hash; ele não é secreto. Seu papel é tornar cada hash único.
- Dois usuários com a mesma senha passam a ter hashes diferentes, porque seus salts são diferentes.
- Tabelas pré-computadas deixam de ser úteis, pois o atacante precisaria gerar uma tabela para cada salt.
- O atacante é obrigado a testar as tentativas de senha conta por conta, o que aumenta muito o custo do ataque.
Algumas aplicações também usam um pepper: um valor secreto adicional, igual para todos os usuários, guardado fora do banco de dados. Ele acrescenta uma camada extra, mas não substitui o salt.
Algoritmos rápidos e algoritmos lentos
Aqui está um detalhe que surpreende muita gente: para senhas, um algoritmo de hash rápido é ruim. Funções como MD5 e SHA-256 foram feitas para serem velozes, o que é ótimo para verificar arquivos, mas também permite que um atacante teste bilhões de tentativas com hardware adequado. O MD5 e o SHA-1, além disso, já são considerados inseguros para fins criptográficos.
Para senhas, recomenda-se usar funções criadas especificamente para esse fim, que são propositalmente lentas e permitem ajustar o custo computacional:
- Argon2: vencedor da Password Hashing Competition, em 2015; é configurável em tempo e uso de memória.
- bcrypt: amplamente usado há muitos anos e disponível na maioria das linguagens.
- scrypt: exige bastante memória, o que dificulta ataques com hardware especializado.
- PBKDF2: aplica o hash milhares de vezes seguidas; é comum em sistemas que seguem normas específicas.
Essas funções já incorporam o salt automaticamente, o que reduz a chance de erro do desenvolvedor. Uma regra de ouro da área é nunca criar o próprio algoritmo de segurança: use bibliotecas consolidadas e mantidas pela comunidade.
O que isso significa para você, usuário
Mesmo com hash e salt, senhas fracas continuam vulneráveis, porque estão no topo das listas usadas nos ataques de dicionário. Algumas atitudes fazem diferença:
- Use senhas longas, como frases com várias palavras.
- Não repita a mesma senha em serviços diferentes.
- Use um gerenciador de senhas para não precisar memorizar tudo.
- Ative a autenticação em dois fatores sempre que estiver disponível.
- Desconfie de serviços que conseguem enviar sua senha original por e-mail: isso indica que ela não está protegida com hash.
Conclusão
Hash e salt formam a base do armazenamento seguro de senhas. O hash garante que a senha original não fique guardada; o salt impede que senhas iguais tenham hashes iguais e inutiliza tabelas pré-calculadas; e algoritmos lentos, como Argon2 e bcrypt, tornam as tentativas de adivinhação caras demais. Entender esses conceitos é essencial tanto para quem desenvolve sistemas quanto para quem quer se proteger melhor na internet.
Se você quer ir além e aprender sobre criptografia, autenticação, ataques comuns e boas práticas de defesa, confira os cursos gratuitos de Segurança da Informação disponíveis na Cursa.














