Ir para o conteúdo
OneKitly

MD5, SHA-1, SHA-256: que hash e para quê

Publicado a 01/07/2026 · 16 min de leitura · Ferramentas para programadores

Daniel Okonkwo

Daniel OkonkwoProgramador front-end e redator de Tecnologia na OneKitly

Desempenho web · Formatos de ficheiro

Verificado a partir de 6 fontes

Ver perfil
Em resumo

A uma função de hash pedem-se três garantias distintas, e elas caem em momentos diferentes. Resistência a pré-imagem: dado um resumo, não consegue encontrar nenhuma entrada que o produza. Resistência a segunda pré-imagem: dada uma entrada, não consegue encontrar outra diferente com o mesmo resumo. Resistência a colisões: não consegue encontrar duas entradas quaisquer que colidam. O MD5 perdeu a resistência a colisões em 2004 (Wang et al.) e o SHA-1 perdeu-a em 2017, quando a Google e o CWI de Amesterdão publicaram dois PDF diferentes com o mesmo resumo SHA-1 após 9 223 372 036 854 775 808 avaliações — exatamente 2^63. Nenhum perdeu a resistência a pré-imagem. É por isso que «o MD5 está partido» é verdade e é constantemente mal aplicado. Conferir um ficheiro descarregado contra uma soma MD5 para apanhar uma transferência truncada continua a funcionar, porque uma corrupção acidental não é um adversário a escolher os dois ficheiros. Aceitar um certificado assinado em MD5 já não, porque aí o adversário escolhe os dois. Use SHA-256 para tudo o que for novo: md5("hello") é 5d41402abc4b2a76b9719d911017c592 e sha256("hello") é 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824. E nenhum destes é um hash de palavras-passe. São feitos para serem rápidos — medidos aqui entre 632 MB/s e 1 357 MB/s num só núcleo — e guardar palavras-passe exige lentidão. Esse trabalho é do bcrypt, do scrypt ou do Argon2.

O MD5 está partido e o MD5 serve muito bem, conforme qual das três propriedades de segurança precisava. Eis o que significam realmente resistência a colisões, a segunda pré-imagem e a pré-imagem, que algoritmo mantém qual, e porque nenhum deles deve chegar perto de uma palavra-passe.

Três propriedades, não uma

Quase toda a discussão sobre funções de hash descarrila na primeira frase, porque a palavra «seguro» está a substituir três garantias diferentes. A resistência a pré-imagem diz que, tendo apenas um resumo, não consegue recuar até nenhuma entrada que o produza. A resistência a segunda pré-imagem diz que, dada uma entrada concreta — este contrato, este binário —, não consegue encontrar outra diferente com o mesmo resumo. A resistência a colisões diz algo mais forte e mais estranho: não consegue encontrar nenhum par de entradas em colisão, mesmo escolhendo as duas, mesmo que nenhuma signifique coisa alguma.

As três ordenam-se por dificuldade para o atacante, e o paradoxo dos aniversários explica porquê. Encontrar uma pré-imagem de um resumo de n bits custa cerca de 2^n operações; encontrar uma colisão custa apenas cerca de 2^(n/2), porque não está a mirar um alvo: está à espera de que dois dos seus candidatos coincidam. Para o SHA-256 isso é 2^256 contra 2^128 — ambos fora de alcance. Para o MD5 é 2^128 contra um 2^64 genérico, e a criptanálise empurrou o número real muito abaixo disso. A resistência a colisões é, portanto, sempre a primeira a cair, e cai muitíssimo antes da resistência a pré-imagem.

O que foi realmente «partido»

O MD5 caiu primeiro. Xiaoyun Wang e coautores publicaram colisões práticas em 2004 e, em poucos anos, a técnica foi refinada em colisões de prefixo escolhido, em que o atacante controla o início das duas mensagens em colisão e pode assim tornar cada uma um documento com sentido. É isso que torna possível forjar uma assinatura: consegue que um terceiro de confiança assine a metade inofensiva de um par em colisão e depois cola a assinatura dele à outra metade. Hoje uma colisão MD5 simples demora segundos em hardware comum.

O SHA-1 aguentou até fevereiro de 2017, quando o CWI de Amesterdão e a Google Research publicaram o SHAttered: dois ficheiros PDF visivelmente diferentes com resumo SHA-1 idêntico. O anúncio deles cifra o custo em 9 223 372 036 854 775 808 cálculos SHA-1. Esse número não é arbitrário: é exatamente 2^63, folgadamente abaixo dos 2^80 que um ataque de aniversário genérico sobre um resumo de 160 bits exigiria. Três anos depois, Leurent e Peyrin estenderam o resultado a colisões de prefixo escolhido e, nesse momento, o SHA-1 ficou liquidado para todo o uso adversarial; as autoridades de certificação e os sistemas de controlo de versões que ainda o emitiam iniciaram a longa migração.

Repare no que nenhum dos resultados dá ao atacante. Ninguém consegue pegar num resumo MD5 que publique e recuperar a entrada. Ninguém consegue pegar num ficheiro existente e fabricar um segundo ficheiro com o mesmo MD5. Ambos os ataques exigem que o adversário construa as duas metades desde o início. É exatamente essa a fronteira entre uma soma de verificação que apanha uma descarga corrompida — a corrupção não escolheu nada — e uma assinatura que tem de sobreviver a alguém que constrói deliberadamente os dois documentos.

Os resumos, lado a lado

Passe a cadeia «hello» por cada algoritmo e as diferenças saltam à vista. O MD5 dá 5d41402abc4b2a76b9719d911017c592, trinta e dois carateres hexadecimais para 128 bits. O SHA-1 dá aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d, quarenta carateres para 160 bits. O SHA-256 dá 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824, sessenta e quatro carateres para 256 bits. Cada carácter hexadecimal transporta quatro bits, por isso o comprimento em carateres é sempre o comprimento em bits a dividir por quatro — uma forma rápida de identificar um hash sem etiqueta num registo ou numa coluna de base de dados.

Agora acrescente um simples ponto final. sha256("hello.") é 1589999b0ca6ef8814283026a9f166d51c70a910671c3d44049755f07f2eb910 — nem um carácter em comum com o resumo de "hello" em qualquer posição previsível. É o efeito de avalanche, e vale com a mesma força no MD5, cujo resumo de "hello." é d94c10e437d18531e122ed0b45badd2a. A avalanche não é a propriedade que falhou. O MD5 continua a baralhar lindamente; só que um atacante suficientemente hábil sabe conduzir dois baralhamentos ao mesmo sítio.

Uma falsificação reproduzível: a extensão de comprimento

O MD5, o SHA-1, o SHA-256 e o SHA-512 partilham todos a construção de Merkle-Damgard: a mensagem é preenchida, dividida em blocos fixos, e cada bloco atualiza um estado interno corrente. O resumo que publica é esse estado interno. O que significa que quem tiver o seu resumo pode recarregá-lo no algoritmo e continuar a fazer hash, como se lá tivesse estado desde o início. É a propriedade de extensão de comprimento, e não é um erro em nenhuma destas funções — é o que a construção faz.

Aqui está executada. Pegue numa etiqueta de autenticação ingénua construída como sha256(segredo + mensagem), com um segredo de 32 bytes e a mensagem user=alice&role=viewer. A etiqueta legítima começa por 0556f5e825e91626. Um atacante que conhece apenas a mensagem, a etiqueta e o comprimento do segredo — não o segredo — pode retomar o SHA-256 a partir dessa etiqueta, acrescentar os dez bytes de preenchimento 800000000000000001b0 que o hash original teria inserido e depois acrescentar &role=admin. A etiqueta que sai é cca75089ae751c4359a577329d74d9ba345ed7e5f83f988583b2baa16cad5efe, e é byte a byte o resumo que o servidor calcula sobre a mensagem estendida. A falsificação passa a verificação. O segredo nunca foi conhecido.

A correção não é um resumo mais longo nem outra variante do SHA-2. É o HMAC, que aninha o hash duas vezes com duas chaves derivadas, de modo que a etiqueta publicada deixa de ser um estado interno retomável. O HMAC-SHA-256 sobre a mesma chave e mensagem dá 2ad69479d608c0fc4c89387db138aebb0bbee3b35d46057726228cacfc8a1478, e nenhum acrescento lhe dá uma extensão válida. O SHA-3 é imune por outra razão: a sua construção em esponja só emite parte do estado interno, pelo que o resumo não diz onde o algoritmo estava.

Nenhum destes é um hash de palavras-passe

Este é o erro que mais custa, e nada tem a ver com colisões. Os hashes de uso geral são desenhados para o débito, e cumprem. Medido num só núcleo sobre um buffer de 64 MB, o MD5 corre a 632 MB/s, o SHA-256 a 1 075 MB/s e o SHA-1 a 1 357 MB/s. A ordem merece um segundo olhar: aqui o SHA-256 é 70 % mais rápido do que o MD5, porque os processadores modernos trazem instruções SHA dedicadas e nenhuma instrução MD5. «O MD5 é mais rápido» deixou de ser fiável há anos.

A velocidade é exatamente a propriedade errada para uma palavra-passe guardada, porque o atacante que tem a sua base de dados beneficia dela muito mais do que si. Faz o hash de uma palavra-passe por início de sessão; ele faz milhares de milhões por segundo num bastidor de GPU. As funções de hash de palavras-passe invertem esse negócio de propósito. Na mesma máquina, o PBKDF2-SHA-256 com 600 000 iterações demora 148 milissegundos por palavra-passe, e o scrypt com N = 131 072 demora 397. São cerca de sete palavras-passe por segundo em vez de milhões — uma penalização deliberada que se paga uma vez por início de sessão e o atacante uma vez por tentativa.

Portanto, a resposta correta a «que hash para palavras-passe» é: nenhum dos deste artigo. Use Argon2id quando puder escolher livremente, bcrypt quando a plataforma não lhe der outra coisa, scrypt ou PBKDF2 quando uma norma os exigir, sempre com um sal aleatório único por utilizador. O SHA-256 mantém o seu lugar dentro dessas construções — o PBKDF2-SHA-256 assenta nele — mas é a primitiva, não o esquema.

O SHA-3 não é um SHA-2 maior

A numeração convida à conclusão errada. O SHA-2 sucedeu ao SHA-1 como um desenho melhorado da mesma linhagem; o SHA-3 não sucedeu ao SHA-2 nesse sentido, de todo. Saiu de um concurso aberto que o NIST lançou em 2007, foi ganho pela equipa Keccak e foi normalizado no FIPS 202 em 2015 — enquanto o SHA-2 se mantinha perfeitamente saudável, e mantém-se. O NIST nunca pediu a ninguém que abandonasse o SHA-2.

O objetivo do SHA-3 é a diversidade arquitetónica. Por ser uma esponja e não uma cadeia de Merkle-Damgard, um ataque que quebrasse o SHA-2 muito provavelmente não lhe tocaria, e o mundo teria um substituto pronto. A esponja também elimina de graça a extensão de comprimento, razão pela qual alguns desenhos já a preferem. O seu custo é a velocidade: o SHA3-256 mediu 317 MB/s no mesmo hardware onde o SHA-256 atingiu 1 075 MB/s, em boa parte porque o hardware acelera um e não o outro. Escolha o SHA-3 quando quiser a construção diferente, não quando quiser mais bits — o SHA3-256 e o SHA-256 oferecem os mesmos 256.

Uma lista curta de decisão

Assinar seja o que for, verificar uma descarga vinda de uma rede hostil, construir uma árvore de Merkle, derivar um endereço de conteúdo: SHA-256. Guardar uma palavra-passe ou dela derivar uma chave: Argon2id, bcrypt ou scrypt, nunca um hash nu. Autenticar uma mensagem com um segredo partilhado: HMAC-SHA-256, não sha256(segredo + mensagem), pela razão demonstrada acima. Desduplicar ficheiros, indexar uma cache, repartir uma tabela de hash, detetar uma transferência truncada: o MD5 continua a servir e continua rápido que baste, desde que ninguém no quadro beneficie de uma colisão.

Um único teste resolve os casos duvidosos. Pergunte se quem beneficia de duas entradas partilharem um resumo pode também escolher essas entradas. Se a resposta for não — uma falha de disco, um cabo caprichoso, um carregamento parcial —, uma resistência a colisões partida não lhe custa nada. Se a resposta for sim, ou puder vir a sê-lo assim que o dado sai da sua máquina, precisa de um hash com a resistência a colisões intacta: SHA-256 ou melhor.

A mesma entrada em cinco algoritmos: comprimento do resumo, que propriedade de segurança se mantém e para que serve hoje
AlgoritmoResumoResistência a colisõesResistência a pré-imagemUso razoável em 2026
MD5128 bits, 32 carateres hexPartida desde 2004; colisões em segundosContinua intactaSomas de verificação não adversariais, chaves de cache, desduplicação
SHA-1160 bits, 40 carateres hexPartida desde 2017 (2^63 avaliações)Continua intactaSó compatibilidade herdada; nenhuma assinatura nova
SHA-256256 bits, 64 carateres hexIntacta; o melhor ataque é genérico, 2^128Intacta, 2^256O padrão para assinaturas, integridade, compromissos
SHA-512512 bits, 128 carateres hexIntacta, 2^256Intacta, 2^512Mesma família do SHA-256; mais rápido em software de 64 bits sem instruções SHA
SHA3-256256 bits, 64 carateres hexIntacta; construção diferente (esponja Keccak)Intacta; imune à extensão de comprimentoUm seguro estrutural contra uma futura quebra do SHA-2, não mais robustez
Gerador de hash SHA-256Gere um hash SHA-256 de qualquer texto no seu navegador, com saída hex ou Base64. O hash seguro mais utilizado.Experimentar a ferramenta

Perguntas frequentes

É seguro usar MD5 em 2026?
Só onde nenhum adversário beneficie de uma colisão. O MD5 perdeu a resistência a colisões em 2004 e hoje uma colisão demora segundos, pelo que qualquer uso em que alguém possa ganhar ao fazer duas entradas diferentes partilharem um resumo — assinaturas, certificados, verificações de integridade sobre uma rede não fiável, desduplicação de ficheiros fornecidos pelo atacante — é inseguro. Os usos cuja única ameaça é o acidente continuam bons: verificar que uma cópia não ficou truncada, indexar uma cache, repartir dados por servidores, comparar cópias de segurança locais. O MD5 não perdeu a resistência a pré-imagem, por isso um resumo publicado também não revela a sua entrada. A regra pragmática: o MD5 é uma impressão digital rápida, não um controlo de segurança. E já nem sequer é a opção mais rápida: medido num núcleo, o SHA-256 correu a 1 075 MB/s contra os 632 MB/s do MD5, porque os processadores trazem instruções SHA. Se a velocidade era o seu motivo, expirou.
Um hash SHA-256 pode ser decifrado ou revertido?
Não, e a palavra decifrar não se aplica — fazer hash não é cifrar, porque não há chave nem caminho de volta previsto. O SHA-256 leva entradas de qualquer comprimento a 256 bits, pelo que infinitas entradas partilham cada resumo e a original não pode ser isolada, nem em princípio. Recuperar uma entrada significa força bruta: adivinhar candidatos e fazer o hash de cada um até haver correspondência. É por isso que os chamados sites de «quebra de hash» funcionam. Não revertem nada; guardam tabelas pré-calculadas de resumos de entradas comuns e procuram o seu. Perante um valor aleatório de 32 bytes a procura falha e restam 2^256 tentativas. Perante a cadeia «password» acerta de imediato. Consequência prática: o resumo de um segredo de baixa entropia é quase já não um segredo, que é exatamente a razão pela qual o armazenamento de palavras-passe acrescenta um sal por utilizador (contra as tabelas partilhadas) e uma função deliberadamente lenta (contra a adivinha rápida).
Devo usar SHA-512 em vez de SHA-256 para mais segurança?
Raramente compensa. O SHA-256 oferece 128 bits de resistência a colisões e 256 de resistência a pré-imagem; o SHA-512 duplica ambos, para 256 e 512. Como nenhum ataque contra o SHA-256 chega perto de 2^128, a margem extra não compra nada que se aponte, ao passo que o resumo duplica para 128 carateres hexadecimais em cada coluna, URL e linha de registo que o tenha de transportar. Há duas razões reais para escolher o SHA-512. O desempenho em software de 64 bits sem aceleração SHA por hardware, onde as palavras de 64 bits do SHA-512 podem ultrapassar o SHA-256 — embora em hardware que acelera o SHA-256 a ordem se inverta, como aqui, 1 075 MB/s contra 516 MB/s. E uma especificação que o exija. O SHA-512/256, variante truncada definida no FIPS 180-4, dá a velocidade das palavras de 64 bits com saída de 256 bits e é o compromisso mais limpo quando precisa das duas coisas.
Porque não posso simplesmente usar SHA-256 com um sal para palavras-passe?
Um sal resolve um problema e deixa o maior intacto. Trava as tabelas pré-calculadas e obriga o atacante a atacar cada conta em separado — o que tem valor real. O que não pode mudar é o custo por tentativa. O SHA-256 é feito para ser barato, e um atacante com a sua base salgada ataca cada conta ao ritmo que o hardware dele permita, o que num bastidor de GPU é enorme. A defesa tem de encarecer cada tentativa individual, e é isso que uma função de hash de palavras-passe faz. Medido aqui, o PBKDF2-SHA-256 com 600 000 iterações custa 148 ms por palavra-passe e o scrypt com N = 131 072 custa 397 ms; o Argon2id acrescenta por cima um custo de memória, de modo que uma GPU não pode simplesmente correr milhares de instâncias em paralelo. Sal e lentidão são ambos necessários, e só a segunda depende do algoritmo escolhido. Use Argon2id, bcrypt ou scrypt e deixe o SHA-256 lá dentro, onde pertence.
O que é a extensão de comprimento e afeta-me?
Só o afeta se construiu uma etiqueta de autenticação como hash(segredo + mensagem). Como o MD5, o SHA-1 e a família SHA-2 publicam o seu estado interno sob a forma de resumo, quem tiver esse resumo pode retomar o cálculo e produzir uma etiqueta válida para a mensagem com dados acrescentados, sem nunca ficar a saber o segredo. Não é teórico: partindo de uma etiqueta real sobre um segredo de 32 bytes e user=alice&role=viewer, acrescentando os dez bytes de preenchimento 800000000000000001b0 e depois &role=admin, sai cca75089ae751c4359a577329d74d9ba345ed7e5f83f988583b2baa16cad5efe, exatamente o que o servidor calcula. Como os analisadores de consulta costumam ficar com a última ocorrência de uma chave repetida, essa extensão vira o papel. Duas correções funcionam: usar HMAC, desenhado para autenticação com chave e não extensível, ou usar SHA-3, cuja esponja nunca expõe o estado completo. Se está apenas a fazer o hash de um ficheiro sem segredo nenhum, a extensão de comprimento não lhe faz nada.
Preciso de migrar do SHA-2 para o SHA-3?
Não. O NIST normalizou o SHA-3 no FIPS 202 como alternativa, não como substituto, e continua a aprovar a família SHA-2 no FIPS 180-4 sem obsolescência à vista. O SHA-3 existe porque depender de uma só construção é um risco sistémico: o SHA-1 e o SHA-2 partilham linhagem de desenho, pelo que um avanço contra um levantou preocupação razoável quanto ao outro. A esponja do Keccak é um mecanismo inteiramente diferente, e é esse todo o propósito. Recorra ao SHA-3 em três situações. Quando um protocolo ou um regulador o exigir. Quando quiser imunidade à extensão de comprimento sem envolver tudo em HMAC. Quando estiver a desenhar algo destinado a sobreviver ao consenso criptográfico atual e quiser diversidade de construção. De resto, o SHA-256 continua a ser o padrão sensato, e costuma ser mais rápido porque os processadores o aceleram: aqui 1 075 MB/s contra 317 MB/s do SHA3-256. Note ainda que o nível de segurança é idêntico — o SHA3-256 e o SHA-256 dão resumos de 256 bits e 128 bits de resistência a colisões.

Artigos que podem interessar-lhe

Todos os guias
ExplicaçãoEntropia de palavras-passe: o que um medidor de robustez não pode saberA entropia mede o processo que produziu uma palavra-passe, não os carateres que a compõem. H = L x log2(R) só é verdade quando cada carácter foi escolhido ao acaso — e é precisamente por isso que um medidor que pontua uma palavra-passe inventada por um humano pelas suas classes de carateres está a medir a coisa errada.ExplicaçãoO que está dentro de um JWT — e o que não protegeUm JWT é assinado, não cifrado. Quem tiver o token pode descodificar a carga útil e ler todas as suas reivindicações. Eis um token real, descodificado sem chave nenhuma, mais os três ataques que a assinatura deve travar e o único problema que não consegue resolver.ComparaçãoAs somas de verificação não são hashes: CRC-32, Adler-32 e para que servemUma soma de verificação apanha acidentes. Um hash criptográfico resiste a um atacante. Um hash de tabela distribui chaves. Três trabalhos diferentes, três famílias diferentes — e eis uma colisão CRC-32 construída à mão em 0,11 segundos que mostra exatamente porque não pode substituir uma pela outra.GuiaCifrar um ficheiro e enviar a chave por outra viaA cifragem é a metade fácil. Eis exatamente o que a ferramenta faz ao seu ficheiro — cifra, derivação de chave, sal, nonce — e porque é que um anexo cifrado com a palavra-passe no mesmo fio não protege nada.TutorialEnviar um documento para assinatura: o processo, não o direitoSe uma assinatura desenhada vale decide-se noutro lado. O que decide se o seu documento é mesmo assinado é a ordem por que pede as assinaturas, o que a trilha de auditoria regista e seis modos de falha que nada têm de jurídico.ExplicaçãoO que é uma função de hash? (MD5, SHA-256)Uma função de hash transforma qualquer entrada numa impressão de tamanho fixo. Eis o que faz, as suas propriedades-chave, usos comuns e que algoritmos são seguros.

Ferramentas relacionadas

Fontes

Detetaste um erro neste artigo?

MD5, SHA-1, SHA-256: que hash e para quê — OneKitly