Padrões de Hashing de Palavras-passe: Porque MD5 e SHA-256 Não São Suficientes
Se é um programador, uma das suas responsabilidades mais sagradas é proteger as palavras-passe dos utilizadores. Armazenar palavras-passe em texto simples é um desastre óbvio, mas muitos programadores ainda cometem o erro de utilizar hashes criptográficos "rápidos" como MD5 ou mesmo SHA-256 para o armazenamento de palavras-passe.
Este guia explica porque é que esses métodos estão obsoletos e quais são os padrões atuais da indústria para o hashing seguro de palavras-passe.
1. O Problema com Hashes "Rápidos"
Algoritmos como MD5, SHA-1 e SHA-256 foram concebidos para serem rápidos. Destinam-se a verificar a integridade de ficheiros grandes em milissegundos.
Embora a velocidade seja excelente para verificações de ficheiros, é um pesadelo para palavras-passe. Um GPU moderno pode computar milhares de milhões de hashes SHA-256 por segundo. Se um atacante roubar a sua base de dados de palavras-passe com hash SHA-256, pode utilizar "força bruta" para adivinhar quase todas as palavras-passe simples em questão de horas.
2. Algoritmos Modernos de Hashing Lento
Para derrotar ataques de força bruta, utilizamos algoritmos concebidos especificamente para serem computacionalmente dispendiosos. Estes são hashes "adaptativos" que permitem aumentar o "fator de trabalho" à medida que o hardware se torna mais rápido.
Argon2: O Padrão de Ouro
O Argon2 venceu a Password Hashing Competition em 2015 e é atualmente o padrão recomendado pela OWASP e NIST.
- Argon2id: Esta é a variante preferida. É resistente tanto ao cracking baseado em GPU como a ataques de canal lateral.
- Configurável: Pode ajustar a utilização de memória, iterações e paralelismo para garantir que o hashing de uma palavra-passe demora, por exemplo, 500ms no seu servidor.
bcrypt: O Clássico Testado em Batalha
Desenvolvido em 1999, o bcrypt é um dos algoritmos mais utilizados e confiáveis da história.
- Fator de Trabalho: Utiliza um parâmetro de "custo". Cada vez que aumenta o custo em 1, o tempo que demora a fazer o hash da palavra-passe duplica.
- Ainda Seguro: Apesar da sua idade, o bcrypt continua a ser altamente seguro contra ataques modernos.
scrypt: O Pioneiro da Dureza de Memória
O scrypt foi o primeiro grande algoritmo a introduzir a "dureza de memória". Requer uma quantidade significativa de RAM para ser computado, tornando extremamente dispendioso para os atacantes construírem hardware especializado (ASICs) para o quebrar.
3. Além do Algoritmo: Salt e Pepper
Mesmo com um algoritmo forte, precisa de camadas extra de proteção.
O Salt: Derrotar Rainbow Tables
Um Salt é uma string aleatória adicionada à palavra-passe antes do hash.
- Porquê: Sem um salt, se dois utilizadores tiverem a mesma palavra-passe ("password123"), terão o mesmo hash. Um atacante pode utilizar "Rainbow Tables" (listas pré-computadas de hashes) para os quebrar instantaneamente.
- Regra: Cada utilizador deve ter um salt único e aleatório gerado no momento da criação da conta.
O Pepper: A Camada Secreta
Um Pepper é semelhante a um salt, mas em vez de ser armazenado na base de dados, é guardado num ficheiro de configuração seguro ou num Módulo de Segurança de Hardware (HSM).
- Porquê: Se um atacante roubar a sua base de dados mas não as chaves secretas da sua aplicação, continuará a não conseguir quebrar os hashes porque não conhece o pepper.
4. Melhores Práticas para Programadores
- Nunca utilize MD5 ou SHA-1: Estão completamente quebrados para segurança.
- Evite o SHA-256 simples: É demasiado rápido e facilmente quebrado por GPUs.
- Escolha Argon2id ou bcrypt: Utilize Argon2id para novos projetos; o bcrypt é uma alternativa sólida com excelente suporte de bibliotecas.
- Ajuste o seu Fator de Trabalho: Tente obter um tempo de hashing entre 250ms e 500ms. É suficientemente rápido para um humano esperar por um login, mas suficientemente lento para travar um atacante.
- Utilize sempre Salt: A maioria das bibliotecas modernas (como
bcryptem Node.js ou Python) lida com o salting automaticamente.
Resumo Comparativo
| Algoritmo | Tipo | Memória-Dura | Recomendado |
|---|---|---|---|
| MD5 | Hash Rápido | Não | ❌ NUNCA |
| SHA-256 | Hash Rápido | Não | ❌ NÃO (para pass) |
| PBKDF2 | Hash Lento | Não | ⚠️ Apenas Legado |
| bcrypt | Hash Lento | Não | ✅ SIM |
| scrypt | Hash Lento | Sim | ✅ SIM |
| Argon2id | Hash Lento | Sim | 🏆 MELHOR |
Conclusão
Proteger palavras-passe não se trata apenas de escolher um algoritmo aleatório; trata-se de utilizar ferramentas concebidas para resistir ao poder bruto do hardware moderno. Ao utilizar Argon2id com um salt e fator de trabalho adequados, está a fornecer aos seus utilizadores o nível mais alto de segurança disponível hoje.
Precisa de testar um hash ou gerar uma palavra-passe segura para as suas próprias contas? Consulte a nossa Ferramenta Gerador de Palavras-passe e Gerador de Hash para manter os seus dados seguros.