Gerador de Hash MD5
O hash MD5 do texto The quick brown fox jumps over the lazy dog é 9e107d9d372bb6826bd81d3542a419d6. MD5 produz uma saída fixa de 128 bits (32 caracteres hex) a partir de qualquer entrada. É rápido, amplamente suportado e criptográficamente quebrado para propósitos de segurança desde 2004.
Resultado do Hash
9e107d9d372bb6826bd81d3542a419d6
Você pode verificar issó em qualquer lugar:
# Linux / macOS
echo -n "The quick brown fox jumps over the lazy dog" | md5sum
# Alternativa macOS
echo -n "The quick brown fox jumps over the lazy dog" | md5
# Python
import hashlib
hashlib.md5(b"The quick brown fox jumps over the lazy dog").hexdigest()
# Node.js
const crypto = require('crypto');
crypto.createHash('md5').update('The quick brown fox jumps over the lazy dog').digest('hex');
A flag -n no echo suprime a quebra de linha final. Sem ela, você estaria hasheando uma string diferente e obtendo um resultado diferente.
Por Que MD5 Está Criptograficamente Quebrado
O ataque fundamental é uma colisão: duas entradas diferentes que produzem o mêsmo hash MD5. O artigo de Xiaoyun Wang de 2004 demonstrou que issó podia ser alcançado com uma quantidade razoável de computação. Em 2008, o ataque era prático o suficiente para que uma equipe de pesquisadores o usasse para falsificar um certificado de Autoridade Certificadora. Eles geraram um par de solicitações de assinatura de certificados que colidiam em MD5, fizeram uma CA legítima assinar uma, e obtiveram uma assinatura válida que também cobria o certificado maliciosó que haviam preparado. Issó permitiu que emitissem certificados SSL confiáveis para qualquer domínio.
O malware Flame em 2012 usou a mêsma técnica para fazer atualizações maliciosas do Windows parecerem assinadas pela Microsoft. A colisão foi calculada em um cluster, mas a técnica estava estabelecida.
O Que Issó Significa na Prática
Uma colisão MD5 é uma colisão de prefixo escolhido: um atacante pode criar dois documentos com o mêsmo hash MD5, onde ambos os prefixos estão sob controle do atacante. Esse é o ataque que torna possível a falsificação de certificados. Se um sistema confia em MD5 para verificar que o documento A não foi substituído pelo documento B, essa confiança é quebrável.
Onde MD5 Ainda é Aceitável
O status quebrado do MD5 se aplica a contextos de segurança adversarial. Muitos usos legítimos não envolvem um adversário tentando produzir colisões:
Deduplicação de arquivos
Sistemas de armazenamento usam MD5 para detectar arquivos duplicados. Um atacante que pode enviar arquivos com colisões MD5 forjadas é um problema muito maior que o risco de colisão de hash. Amazon S3 aceita checksums MD5 para integridade de upload na rede (detecção de bit flip, não verificação adversarial).
Chaves de cache e ETags
Servidores web frequentemente usam MD5 do conteúdo do arquivo como ETag. Issó é uma otimização de performance é um mecanismo acidental de deduplicação, não uma garantia de segurança.
Distribuição de tabelas hash e sharding de banco de dados
A saída do MD5 é bem distribuída e rápida. Sistemas que fazem sharding de dados por hash de uma chave frequentemente usam MD5 para isso, sem implicação de segurança.
Sistemas legados
Muito código ainda usa MD5 porque foi escrito antes dos ataques serem demonstrados, ou porque nunca precisou ser alterado. Se você está lendo um digest em um log que diz MD5, a pergunta a fazer é: qual é o modelo de confiança real aqui?
Onde MD5 Não Deve Ser Usado
Hash de senhas
MD5 é muito rápido. Um atacante com uma GPU pode calcular bilhões de hashes MD5 por segundo. Mesmo MD5 com salt é quebrável contra um banco de dados vazado. Use bcrypt, Argon2 ou scrypt, que são deliberadamente lentos e memory-hard.
Assinaturas digitais
Esquemas de assinatura hasheiam o documento antes de assinar. Se um atacante pode criar dois documentos com o mêsmo hash, ele pode obter uma assinatura no inofensivo e aplicá-la ao malicioso.
Certificados TLS
SHA-256 é exigido para assinaturas de certificados desde 2017. Hash MD5 em certificados é rejeitado por todos os navegadores modernos.
Integridade de arquivos para downloads de segurança
Se você pública um checksum SHA-256 junto com um binário, o usuário pode verificar que baixou exatamente o que você publicou. Um checksum MD5 não pode fornecer essa garantia contra um atacante motivado.
Comparando MD5, SHA-1 e SHA-256
| Algoritmo | Saída | Status |
|---|---|---|
| MD5 | 128 bits (32 hex chars) | Quebrado. Ataques de colisão práticos desde 2004 |
| SHA-1 | 160 bits (40 hex chars) | Quebrado. Ataque de colisão SHAttered demonstrado em 2017 |
| SHA-256 | 256 bits (64 hex chars) | Seguro. Nenhuma fraqueza conhecida |
Para checksums não relacionados à segurança onde você só precisa de detecção de erros (não integridade adversarial), MD5 é adequado. Para qualquer coisa onde um adversário possa interferir, use SHA-256. Veja o gerador de hash SHA-256 para mais sobre como SHA-256 funciona.