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
Ano19912001
Tamanho de saída128 bits / 32 hex256 bits / 64 hex
Resistência a colisõesQuebrada desde 2004Sem ataque prático
Velocidade relativa2 a 3 vezes mais rápidaReferência
Aceleração por hardwareNenhuma dedicadaSHA-NI em CPUs recentes
Uso criptográficoDesaconselhadoRecomendado
Uso integridade não hostilAceitávelRecomendado
Conformidade regulamentarRecusada (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.