Segurança

MD5 vs SHA-256: qual usar, e por que o MD5 ainda serve para algo

O MD5 está quebrado no momento em que alguém escolhe a entrada de propósito. O SHA-256 não está. O MD5 ainda pega um download corrompido comum, e saber qual é qual é a pergunta inteira.

As mesmas duas formas entram num bloco MD5 à esquerda e se juntam numa única saída; à direita entram num bloco SHA-256 e ficam como duas saídas separadas.

O MD5 e o SHA-256 transformam qualquer entrada num digest de tamanho fixo, mas só um dos dois resiste quando alguém tenta quebrá-lo de propósito. O MD5 tem 128 bits e é quebrável desde 2004: um atacante consegue construir dois arquivos diferentes que dão o mesmo digest MD5, de propósito, em hardware comum. O SHA-256 tem 256 bits, e até 2026 ninguém publicou uma colisão contra ele. Use SHA-256 sempre que um arquivo, uma mensagem ou uma assinatura possam ser moldados por alguém que quer um resultado específico. O MD5 ainda serve para um único trabalho: avisar que um download não foi corrompido por acidente, quando ninguém envolvido está tentando te enganar.

O que muda de fato entre os dois algoritmos

O tamanho do digest é a diferença visível, mas não é o motivo de um estar quebrado e o outro não.

MD5SHA-256
Tamanho do digest128 bits, 32 caracteres hex256 bits, 64 caracteres hex
Padronizado1992, RFC 13212001, FIPS 180-2, família SHA-2
Colisões encontradasSim, desde 2004Nenhuma publicada
Ataques de pré-imagemNenhum práticoNenhum prático
Serve para assinaturas, certificados, qualquer coisa adversarialNãoSim
Serve para pegar corrupção acidentalSimSim, e mais lento sem ganho nenhum aqui

Um digest curto sozinho não tornaria um algoritmo inseguro — vários designs antigos e mais estreitos nunca foram quebrados. O que aconteceu com o MD5 é específico e tem data: todo o argumento de segurança de uma função hash depende de ninguém conseguir achar duas entradas que colidam, e para o MD5 isso deixou de ser verdade há duas décadas.

Resistência a colisão não é a mesma coisa que resistência a pré-imagem

Duas garantias diferentes acabam jogadas no mesmo saco de "hashes podem ser quebrados", e o MD5 fica em lados opostos de cada uma.

Uma colisão significa que um atacante constrói duas entradas diferentes e escolhe as duas, então ambas caem no mesmo digest. Em agosto de 2004, Xiaoyun Wang, Dengguo Feng, Xuejia Lai e Hongbo Yu publicaram um método que faz isso com o MD5 em cerca de uma hora no hardware daquele ano; em qualquer máquina atual leva segundos. Essa é uma quebra real, repetível e prática.

Um ataque de pré-imagem significa que um atacante parte de um digest que ele não escolheu — um que você já publicou — e precisa achar qualquer entrada que o produza. Ninguém tem um ataque de pré-imagem prático contra o MD5 até 2026. Esse é o motivo inteiro de o MD5 ainda pegar um download corrompido: o checksum do seu arquivo nunca foi um valor que um atacante escolheu com antecedência, então a resistência de que esse trabalho precisa é justamente a que o MD5 ainda tem.

Essa distinção decide tudo sobre se o MD5 é seguro num lugar específico. Se um atacante consegue produzir ou influenciar o arquivo antes de você aplicar o hash, você precisa de resistência a colisão, e o MD5 não tem nenhuma. Se você só está conferindo se os bytes que recebeu batem com os que uma fonte confiável gerou, o trabalho precisa de algo mais parecido com resistência a pré-imagem, e o MD5 ainda tem o suficiente disso.

O que uma colisão de prefixo escolhido realmente dá a um atacante

A quebra de 2004 produz dois blobs colidentes construídos do zero — inúteis a menos que você consiga fazer os dois serem aceitos como documentos legítimos. Uma técnica seguinte, a colisão de prefixo escolhido, foi a que tornou o MD5 perigoso na prática.

Uma colisão de prefixo escolhido deixa um atacante partir de dois documentos arbitrários que ele realmente quer — não blobs inventados para a ocasião — e anexar um preenchimento calculado com cuidado a cada um para que as versões preenchidas compartilhem um digest MD5. Em dezembro de 2008, uma equipe que incluía Alexander Sotirov e Marc Stevens usou exatamente isso para forjar uma autoridade certificadora intermediária impostora: eles conseguiram que uma autoridade certificadora real, que ainda assinava com MD5, assinasse um certificado de aparência comum, e o preenchimento fazia essa mesma assinatura valer igualmente para um segundo certificado que os pesquisadores tinham construído — um com poder de emitir certificados para qualquer domínio, confiável para qualquer navegador que confiasse em assinaturas MD5. É isso que a resistência a colisão garante, dito numa frase só: sem ela, uma assinatura sobre um documento é uma assinatura sobre qualquer outra coisa que o algoritmo do signatário deixou alguém mais colar do lado.

Por que um checksum do lado do arquivo não prova nada

Essa parte não tem nada a ver com qual algoritmo você escolhe. Se uma página de download te mostra um arquivo e um checksum no mesmo fôlego, quem consegue trocar o arquivo consegue trocar o número embaixo dele na mesma edição. Um checksum SHA-256 numa página comprometida é tão convincente quanto um MD5: nada. Você verificou o arquivo contra ele mesmo, não contra algo independente.

Autenticidade de verdade precisa que o checksum — ou melhor, uma assinatura digital completa — chegue por um caminho que quem pode adulterar o arquivo não controle também: uma chave de assinatura em que você já confia, conferida com algo como gpg --verify, ou um checksum publicado em algum lugar separado do download, como uma lista de discussão de segurança ou um domínio completamente diferente. O gerador de hash vai te dizer com honestidade se os bytes que você tem batem com o número que te deram; ele não tem como te dizer se aquele número já foi confiável em algum momento.

Quando o MD5 ainda é a ferramenta certa

Em nenhum lugar adversarial, e em bastante coisa que não é. O MD5 continua bem, e costuma ser mais rápido, para trabalhos onde ninguém está tentando produzir um resultado específico: detectar uma transferência de arquivo truncada, deduplicar arquivos nos quais você já confia pelo conteúdo, marcar objetos em cache, ou conferir contra um checksum publicado pela mesma equipe que fez o software, por um canal em que você já confia por outros motivos. Nada disso exige resistência a colisão, porque ninguém está fabricando uma entrada adversarial: a corrupção que você está procurando é acidental, não projetada.

O que o MD5 nunca mais deveria tocar: uma assinatura digital, um certificado, um token de redefinição de senha, qualquer coisa em que um digest substitua um documento que outra pessoa possa ter moldado para colidir com ele. O SHA-256 quase não custa nada a mais em hardware atual e elimina a questão por completo.

O gerador de hash calcula MD5 e SHA-256 lado a lado para o mesmo texto ou arquivo, então você vê o quanto eles reagem diferente a uma mudança de um único caractere, e pode colar um checksum publicado para conferir contra qualquer um dos dois. Nada sai da sua máquina.

Se você quer o modelo completo por trás de tudo isso — o que um digest realmente é, por que não dá para revertê-lo, e onde o hashing deixa de ser a ferramenta certa — o que é uma função hash e o que não é cobre o resto.

Perguntas frequentes

O MD5 ainda é seguro?

Não para nada adversarial. Um atacante consegue construir dois arquivos diferentes que produzam o mesmo digest MD5 de propósito, o que quebra qualquer uso em que um digest substitua um documento, como uma assinatura ou um certificado. Para pegar um download corrompido por acidente, o MD5 continua bem, porque ninguém projetou seu arquivo para colidir com nada.

Qual é a diferença entre um ataque de colisão e um de pré-imagem?

Um ataque de colisão deixa o atacante escolher duas entradas diferentes e fazer com que compartilhem um digest, que foi o que quebrou o MD5 em 2004. Um ataque de pré-imagem parte de um digest que o atacante não escolheu e tenta achar qualquer entrada que o produza, o que continua impraticável contra o MD5. Quase toda fraqueza real do MD5 é um ataque de colisão, não de pré-imagem.

Posso confiar no checksum publicado ao lado de um download?

Só até onde você confia na página onde ele está. Se quem controla o download também consegue editar o checksum ao lado, uma coincidência só confirma que o arquivo bate consigo mesmo, seja MD5, SHA-256 ou qualquer outra coisa. A verificação de verdade precisa de uma assinatura ou de um checksum entregue por um canal separado e confiável.

Devo trocar o MD5 pelo SHA-256 em tudo?

Para tudo em que alguém possa querer adulterar a entrada — assinaturas, certificados, tokens de segurança — sim, e praticamente não custa nada fazer isso em hardware atual. Para trabalhos não adversariais, como deduplicar arquivos confiáveis ou detectar um download truncado, o MD5 continua funcionando e trocar não traz ganho nenhum.

O que diferenciou o ataque de MD5 de 2008 do de 2004?

A colisão de 2004 produziu dois blobs sem sentido construídos para coincidir entre si. A técnica de prefixo escolhido de 2008 deixou os atacantes partirem de dois documentos que eles realmente queriam, incluindo um pedido de assinatura de uma autoridade certificadora real, e preencherem cada um para que compartilhasse um digest MD5 com o outro — o que foi o que permitiu forjar uma autoridade certificadora impostora confiável para navegadores comuns.

Última atualização 24 de setembro de 2026