Comparison
SHA-256 vs MD5: nunca use MD5 para segurança
Um está morto para segurança. O outro é o padrão moderno. Não os confunda.
By Buğra SözeriPublished
Resumo. MD5 está criptograficamente quebrado desde 2004 — colisões podem ser encontradas em menos de uma hora num laptop — portanto, nunca o use para segurança. SHA-256 não tem colisão prática conhecida e é o padrão moderno para TLS, JWT, Bitcoin, Git (novos repos) e HMAC. Ambos estão bem para checksums não adversariais, mas SHA-256 não é significativamente mais lento em CPUs modernas.
MD5 e SHA-256 são ambas funções de hash criptográfico — recebem entradas de qualquer comprimento e produzem uma saída de comprimento fixo (128 bits para MD5, 256 bits para SHA-256). Ambas são determinísticas, ambas são rápidas e parecem superficialmente intercambiáveis. Não são. MD5 está criptograficamente quebrado desde 2004. SHA-256 está bem.
O resumo
| Propriedade | MD5 | SHA-256 |
|---|---|---|
| Tamanho da saída | 128 bits (32 chars hex) | 256 bits (64 chars hex) |
| Publicado | 1991 | 2001 (NIST FIPS 180-2) |
| Colisão encontrada | 2004 (Wang et al.) | Ainda não (2026) |
| Colisões de prefixo escolhido | Práticas desde 2007 | Nenhuma conhecida |
| Usado para TLS, JWT, cripto? | Não | Sim |
Por que MD5 está quebrado
Uma função de hash criptográfico deve tornar computacionalmente inviável encontrar duas entradas diferentes que produzem a mesma saída (uma “colisão”). Em 2004, Xiaoyun Wang e sua equipe publicaram um método para encontrar colisões MD5 em aproximadamente uma hora em um computador pessoal.
Ficou pior. Em 2007 surgiu um ataque de colisão de prefixo escolhido — dados dois cabeçalhos de arquivo arbitrários, um atacante poderia anexar bytes cuidadosamente elaborados para fazer ambos os arquivos colidirem em MD5. Isso foi usado em 2008 para forjar uma assinatura de autoridade certificadora desonesta usando um cluster de 657 dólares de PlayStation 3.
Para fins de segurança, MD5 está morto. Qualquer pessoa que use MD5 para verificação de assinatura, integridade de conteúdo ou hash de senha está usando criptografia quebrada.
Onde MD5 ainda é aceitável
MD5 não está quebrado de todo; está quebrado para usos criptográficos. Duas categorias onde ainda está bem:
- Checksums não adversariais. Verificar que um download não foi corrompido, ou que uma entrada de cache corresponde a uma chave. Não há atacante; você só precisa de uma impressão digital rápida e determinística. MD5 serve.
- Deduplicação. Detectar que dois arquivos são idênticos, onde forjar uma colisão não ajudaria nenhum atacante plausível (sistema de armazenamento, cache de build).
Mesmo nesses casos, SHA-256 raramente é significativamente mais lento em hardware moderno — CPUs Intel e AMD têm instruções SHA nativas. Não há razão real para usar MD5 como padrão atualmente.
Onde SHA-256 é a escolha certa
- Handshakes TLS e assinaturas de certificados. SHA-256 é o padrão moderno.
- Assinaturas JWT (HS256, RS256, ES256). O 256 refere-se ao SHA-256.
- Hashes de bloco do Bitcoin. Bitcoin usa SHA-256 duas vezes em sua prova de trabalho.
- Hashes de objetos Git. O Git está migrando de SHA-1 (que também foi quebrado) para SHA-256; novos repositórios devem usar SHA-256 desde o início.
- Autenticação de mensagens baseada em HMAC. HMAC-SHA256 é o padrão.
E o SHA-1?
SHA-1 (160 bits) fica entre MD5 e SHA-256 na linha do tempo. Colisões teóricas foram previstas em 2005; a primeira colisão prática (SHAttered) foi publicada em 2017 pelo Google. SHA-1 está descontinuado para usos de segurança, embora o Git ainda o use (com detecção extensiva de colisão por cima) até que a migração para SHA-256 seja concluída.
E o MD5 para senhas?
Não. Também não use SHA-256 diretamente. O hash de senha requer uma função lenta e difícil em memória — bcrypt, scrypt ou argon2. SHA-256 puro é rápido demais: um atacante com GPUs modernas pode calcular ~10 bilhões de SHA-256 por segundo, quebrando senhas fracas em minutos. Funções de hash lentas tornam esse ataque economicamente inviável.
A regra pragmática
Se você está fazendo hash por qualquer razão que toque em segurança — autenticação, verificação de assinatura, integridade de conteúdo que um atacante possa querer enganar — use SHA-256 ou mais forte.
Se você está fazendo hash para impressão digital não adversarial — deduplicação, armazenamento endereçável por conteúdo onde você controla todas as entradas — MD5 é tecnicamente adequado, mas SHA-256 não é mais lento em hardware moderno, então use-o como padrão de qualquer forma. O custo de estar errado sobre qual categoria você está é alto; o custo de simplesmente usar SHA-256 sempre é essencialmente zero.
Use nosso gerador de hash para qualquer um via Web Crypto — embora notavelmente não incluamos MD5 na UI, porque o navegador não o fornece nativamente e preferimos não encorajar seu uso.
Dados numéricos
- Comprimento da saída: MD5 = 128 bits / 32 chars hex; SHA-256 = 256 bits / 64 chars hex — exatamente 2× os bits.
- Resistência à colisão: MD5 ~2¹⁸ hoje (literalmente segundos em um laptop); SHA-256 ~2¹²⁸ — uma razão de 2¹¹⁰×.
- Throughput no AMD Zen 4 com SHA-NI: MD5 ~700 MB/s; SHA-256 ~1,9 GB/s. Com aceleração por hardware, SHA-256 agora é ~2,5× mais rápido que MD5 — o argumento de velocidade para MD5 se inverteu.
- Sem aceleração: MD5 ~500 MB/s, SHA-256 ~250 MB/s — a diferença histórica de 2×.
- Ataque Wang (2004): primeira colisão MD5 prática encontrada em ~1 hora em um único PC. Ataques modernos (HashClash) encontram colisões em menos de 30 segundos em GPUs commodity.
- Exploit de CA desonesta em 2008: Sotirov et al. forjaram um certificado assinado por CA usando 200 consoles PlayStation 3 (~US$657 em computação) e uma colisão de prefixo escolhido MD5.
- Taxa de força bruta por GPU (RTX 4090): ~50 bilhões MD5/s, ~9 bilhões SHA-256/s — ambos destroem hashes de senha sem sal em minutos.
- Custo padrão do Argon2id (OWASP 2024): 19 MiB de memória, 2 iterações, 1 paralelismo — ~50 ms por hash vs nanossegundos para SHA-256 bruto.
Matriz de decisão
| Caso de uso | Hash |
|---|---|
| Assinatura de certificado TLS | SHA-256+ |
| Assinatura JWT | SHA-256 (HS256/RS256/ES256) |
| Assinatura de código / binário | SHA-256 |
| Prova de trabalho Bitcoin / blockchain | SHA-256 (duplo) |
| Assinatura de requisição de API HMAC | HMAC-SHA-256 |
| ETag S3 (upload de parte única) | MD5 — bloqueado por contrato da AWS |
Arquivo md5sums do Linux | MD5 — legado, mas novas distros adicionam SHA-256 |
| Deduplicação interna, entradas confiáveis | Qualquer um; padrão SHA-256 em CPUs modernas |
| Hash de senha | argon2id / bcrypt / scrypt — nenhum bruto |
Fontes
- Wang, X. et al. — Collisions for Hash Functions MD4, MD5, HAVAL-128 and RIPEMD, CRYPTO 2004 — eprint.iacr.org/2004/199.
- Sotirov, A. et al. — MD5 considered harmful today: Creating a rogue CA certificate, 25C3 (2008) — win.tue.nl/hashclash/rogue-ca.
- NIST FIPS 180-4 — Secure Hash Standard (SHS) — csrc.nist.gov.
Frequently asked questions
- MD5 é seguro para hash de senha?
- Não, e mesmo SHA-256 não é a escolha certa para senhas. Ambos são rápidos demais — um atacante com GPUs modernas pode calcular ~10 bilhões de SHA-256 por segundo, quebrando senhas fracas em minutos. Use bcrypt, scrypt ou argon2; eles são deliberadamente lentos e difíceis em memória.
- Quando MD5 ainda é aceitável?
- Apenas para impressões digitais não adversariais, onde nenhum atacante se beneficia de uma colisão: verificações de integridade de arquivo em downloads confiáveis, derivação de chave de cache, deduplicação em um sistema que você controla de ponta a ponta. Em qualquer lugar que a segurança dependa do hash, use SHA-256 ou mais forte.
- SHA-256 é reversível?
- Não — funções de hash criptográfico são unidirecionais por design. Você não pode derivar a entrada da saída. A 'reversão' baseada em busca (rainbow tables) só funciona para entradas que foram hashed antes, e o salting derrota as rainbow tables por completo.
- Por que MD5 ainda está em todo lugar se está quebrado?
- Compatibilidade retroativa e inércia. O cabeçalho Content-MD5, gerenciadores de pacotes Linux, o ETag do S3 para uploads não multipart e inúmeras ferramentas internas ainda emitem MD5 porque o custo de mudar o protocolo excede o custo do risco residual. Novos sistemas devem ter SHA-256 como padrão.
Related
Published May 14, 2026