MD5 vs SHA-256: diferenças e recomendações
MD5 e SHA-256 são duas funções de hash criptográfico. Produzem uma impressão de tamanho fixo a partir de uma entrada de tamanho arbitrário. Encontram-se em todo o lado: verificação de integridade de ficheiros, assinaturas, identificadores únicos, certificados TLS, blockchain. O seu estatuto em termos de segurança é, no entanto, muito diferente: o MD5 está quebrado desde 2004 para usos criptográficos, o SHA-256 continua seguro em 2026. Este artigo faz o ponto da situação.
Lembrete sobre as funções de hash
Uma função de hash criptográfico transforma uma mensagem de comprimento arbitrário numa impressão de tamanho fixo. Três propriedades esperadas:
- Resistência à pré-imagem: dado um hash, deve ser inviável recuperar a mensagem de origem.
- Resistência à segunda pré-imagem: dada uma mensagem, deve ser inviável encontrar outra que produza o mesmo hash.
- Resistência a colisões: deve ser inviável encontrar duas mensagens distintas que produzam o mesmo hash.
Uma função diz-se quebrada assim que uma destas propriedades falha. Para o MD5, a resistência a colisões caiu em 2004.
MD5: 128 bits, quebrado desde 2004
O MD5 (Message Digest 5) é uma função concebida por Ronald Rivest em 1991 e normalizada pelo RFC 1321. Produz uma impressão de 128 bits (16 bytes, 32 caracteres hexadecimais).
Em 2004, Wang e Yu publicam um ataque que produz colisões MD5 em algumas horas num PC. Desde então, o custo de gerar uma colisão caiu para alguns segundos. Em 2008, investigadores criaram um falso certificado SSL assinado em MD5 reconhecido como válido por todos os navegadores. Em 2012, o malware Flame usou uma colisão MD5 para assinar o seu executável como um binário Microsoft legítimo.
Conclusão: o MD5 já não deve ser usado a partir do momento em que um atacante pode influenciar a entrada. Todos os usos criptográficos (assinaturas, integridade face a um adversário, derivação de chaves) ficam excluídos. Apenas alguns usos sem hostilidade continuam aceitáveis, como um checksum de transferência de rede ou uma chave de cache: o MD5 continua rápido, e a colisão involuntária continua estatisticamente impossível.
SHA-256: 256 bits, seguro em 2026
O SHA-256 pertence à família SHA-2 publicada pelo NIST em 2001 e normalizada pelo FIPS 180-4. Produz uma impressão de 256 bits (32 bytes, 64 caracteres hexadecimais).
Não se conhece nenhum ataque prático contra o SHA-256. O melhor ataque teórico sobre as colisões diz respeito a 31 rondas em 64, sem implicação prática. O custo de força bruta para encontrar uma colisão é da ordem de 2^128 operações, fora do alcance de qualquer infraestrutura conhecida.
O SHA-256 é utilizado em: TLS (certificados X.509), Git (desde a transição SHA-256), Bitcoin (prova de trabalho), assinaturas de pacotes Linux, Windows Update, etc. É hoje o hash recomendado por omissão para a maioria dos usos criptográficos gerais.
Diferenças práticas
Comprimento de saída
MD5("hello") = 5d41402abc4b2a76b9719d911017c592 (32 chars hex)
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (64 chars hex)
Velocidade
O MD5 é cerca de 2 a 3 vezes mais rápido do que o SHA-256 na mesma máquina. Num CPU moderno, o MD5 processa vários GB/s por core, o SHA-256 anda na ordem do GB/s. Em CPUs recentes com extensão SHA-NI, a diferença reduz-se fortemente.
Segurança
É a única diferença que realmente importa: o MD5 está quebrado para colisões, o SHA-256 não. Se a segurança face a um adversário está em jogo, a escolha está decidida.
Tabela comparativa
| Critério | MD5 | SHA-256 |
|---|---|---|
| Ano | 1991 | 2001 |
| Tamanho de saída | 128 bits / 32 hex | 256 bits / 64 hex |
| Resistência a colisões | Quebrada desde 2004 | Sem ataque prático |
| Velocidade relativa | 2 a 3 vezes mais rápida | Referência |
| Aceleração por hardware | Nenhuma dedicada | SHA-NI em CPUs recentes |
| Uso criptográfico | Desaconselhado | Recomendado |
| Uso integridade não hostil | Aceitável | Recomendado |
| Conformidade regulamentar | Recusada (PCI-DSS, FIPS) | Aceite |
Casos de uso
Quando o MD5 continua aceitável
- Chave de cache aplicacional (Redis, memcached) sem implicação de segurança
- Deteção de duplicados num dataset não hostil
- Checksum de uma transferência de rede para detetar uma corrupção acidental
- Impressão de uma cadeia para repartição (sharding) sem restrição adversarial
Quando o SHA-256 se impõe
- Verificação de integridade face a um atacante (downloads assinados, pacotes)
- Assinaturas digitais, certificados X.509
- Identificadores Git de commits e objetos
- Derivação de chaves (em combinação com HKDF)
- Qualquer aplicação sujeita a uma exigência regulamentar (PCI-DSS, ANSSI, FIPS)
Exemplos concretos
Em PHP, ambas as funções estão disponíveis através da função hash():
// Impressao de uma cadeia
$md5 = hash('md5', 'hello world');
$sha256 = hash('sha256', 'hello world');
// Impressao de um ficheiro (leitura em streaming)
$md5File = hash_file('md5', '/path/to/file.iso');
$sha256File = hash_file('sha256', '/path/to/file.iso');
Podes gerar essas impressões diretamente online com o nosso gerador de hash de texto, calcular o hash de um ficheiro com o gerador de hash de ficheiro, ou identificar um tipo de hash desconhecido com o identificador de hash.
Recomendação
A regra de 2026 é simples: SHA-256 por omissão. O MD5 já não deve aparecer no teu código a partir do momento em que um atacante pode influenciar a entrada, o que cobre a quase totalidade dos casos do lado do servidor. O desempenho superior do MD5 já não justifica o seu uso, a diferença tornou-se negligenciável com as acelerações SHA-NI presentes nos CPU x86 e ARM modernos.
Perguntas frequentes
O MD5 ainda é seguro para palavras-passe?
Não, nunca. E este ponto é independente das colisões: o MD5 é demasiado rápido. Uma GPU quebra vários milhares de milhões de hashes MD5 por segundo, o que torna qualquer ataque por dicionário ou força bruta trivial. Para palavras-passe, usa bcrypt, Argon2 ou scrypt (ver o nosso comparativo Bcrypt vs Argon2).
Qual é a diferença entre SHA-256 e SHA-2?
SHA-2 é a família, SHA-256 é um dos seus membros. A família inclui SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 e SHA-512/256. Diferem no tamanho de saída e no tamanho dos blocos internos. O SHA-256 é a variante mais utilizada.
É preciso passar para SHA-3?
Não obrigatoriamente. O SHA-3 (publicado em 2015) assenta numa construção radicalmente diferente (Keccak / sponge), mas o SHA-256 continua seguro. O SHA-3 serve sobretudo como plano B em caso de problema inesperado no SHA-2. Escolhe SHA-3 se uma norma o exigir, ou se quiseres diversidade criptográfica. Caso contrário, o SHA-256 continua a ser a escolha padrão.
É possível inverter um hash MD5 ou SHA-256?
Não, por construção: um hash perde informação. Os sites de « descodificação » MD5 limitam-se a consultar bases gigantescas de hashes pré-calculados (rainbow tables) para entradas comuns. Para dados aleatórios longos, recuperar a entrada é impossível com ambos os algoritmos.
O SHA-256 vai ser quebrado por um computador quântico?
O algoritmo de Grover divide por dois a segurança efetiva dos hashes face a um atacante quântico: o SHA-256 ofereceria então cerca de 128 bits de segurança, o que continua largamente suficiente. Não há urgência do lado do hash, ao contrário da criptografia assimétrica.