MD5 vs SHA: Qual Usar?

Escolher entre algoritmos MD5 e SHA é crucial para segurança da aplicação. Embora ambos sejam funções hash, têm propriedades de segurança muito diferentes e casos de uso apropriados. Este guia compara os algoritmos e fornece recomendações claras para desenvolvimento moderno.

MD5 (128-bit)

MD5 foi projetado em 1991 por Ronald Rivest como uma melhoria sobre seu algoritmo MD4 anterior. Produz um hash de 128 bits (16 bytes), tipicamente representado como 32 caracteres hexadecimais. Por mais de uma década, MD5 foi o algoritmo hash padrão para checksums, armazenamento de senhas e verificação de integridade de dados. No entanto, a segurança de MD5 foi progressivamente destruída ao longo dos anos. Fraquezas teóricas foram publicadas em 1996. Em 2004, pesquisadores demonstraram ataques práticos de colisão. Até 2008, uma equipe usou fraquezas de MD5 para criar um certificado CA fraudulento. Hoje, colisões MD5 podem ser geradas em segundos em hardware de consumo. As implicações são severas para aplicações de segurança. Se atacantes podem criar colisões, podem criar dois arquivos com o mesmo hash MD5—um malicioso, um inocente. Para hash de senhas, tabelas arco-íris para MD5 são abrangentes e disponíveis gratuitamente, tornando hashes de senha MD5 sem salt trivialmente quebráveis. Apesar de suas fraquezas de segurança, MD5 permanece útil para propósitos não-seguros. É rápido e produz hashes razoavelmente curtos. Casos de uso onde MD5 ainda é aceitável incluem: gerar chaves de cache onde segurança não é uma preocupação, detecção rápida de mudança de arquivo (não proteção contra adulteração), deduplicação não-criptográfica, compatibilidade com sistema legado onde você não pode mudar o algoritmo. Ponto chave: MD5 não está quebrado para resistência a colisões na prática para entradas aleatórias—você ainda pode usá-lo para verificar se dois arquivos são idênticos (se um atacante não está tentando torná-los diferentes com o mesmo hash). Está quebrado no sentido de que um atacante PODE criar dois arquivos diferentes com o mesmo hash se controlar o conteúdo. Para qualquer aplicação sensível à segurança, não use MD5. O algoritmo está fundamentalmente comprometido para propósitos criptográficos.

SHA-1 (160-bit)

SHA-1 (Secure Hash Algorithm 1) foi projetado pela NSA e publicado em 1995. Produz um hash de 160 bits (20 bytes), representado como 40 caracteres hexadecimais. SHA-1 foi o algoritmo hash dominante para aplicações de segurança ao longo dos anos 2000, usado em certificados SSL, Git e incontáveis outros sistemas. Ataques teóricos contra SHA-1 foram publicados em 2005, sugerindo que o algoritmo não era tão seguro quanto previamente acreditado. No entanto, ataques práticos permaneceram inviáveis por anos. Isto mudou dramaticamente em 2017 quando Google e CWI Amsterdam anunciaram "SHAttered"—a primeira colisão SHA-1 prática. Eles criaram dois arquivos PDF diferentes com hashes SHA-1 idênticos. O ataque SHAttered requereu aproximadamente 6.500 anos de CPU de computação—significativo mas alcançável por atacantes bem-financiados. A partir de 2020, pesquisadores demonstraram ataques ainda mais eficientes. Criar colisões SHA-1 agora é viável para grupos de pesquisa acadêmica e certamente para estados-nação. A comunidade de segurança respondeu decisivamente. Navegadores principais depreciaram certificados SHA-1 começando em 2016, e a maioria agora os rejeita inteiramente. Autoridades certificadoras não podem emitir certificados assinados com SHA-1. Padrões de segurança como NIST moveram SHA-1 para status "obsoleto" ou "apenas legado". O uso de SHA-1 pelo Git é uma preocupação notável. Embora Git esteja em transição para SHA-256, muitos repositórios ainda usam SHA-1. O risco prático é um tanto mitigado porque explorar colisões SHA-1 no Git requer cenários de ataque específicos, mas o risco teórico existe. SHA-1 não deve ser usado para novas aplicações de segurança. Pode ser aceitável para compatibilidade com sistema legado ou aplicações não-seguras onde resistência a colisões não é requerida. Para qualquer novo projeto, use SHA-256 ou mais forte.

SHA-256 (256-bit)

SHA-256 faz parte da família SHA-2, projetada pela NSA e publicada em 2001. Produz um hash de 256 bits (32 bytes), representado como 64 caracteres hexadecimais. SHA-256 tornou-se o padrão de fato para hashing criptográfico, usado em TLS/SSL, assinatura de código, Bitcoin e a maioria dos protocolos de segurança modernos. Nenhum ataque prático foi demonstrado contra SHA-256. A margem de segurança é substancial—mesmo com avanços teóricos em criptoanálise, SHA-256 permanece seguro para o futuro previsível. A força bruta de um hash SHA-256 requereria tentar 2^256 possibilidades, um número tão grande que é efetivamente impossível com qualquer tecnologia concebível. SHA-256 oferece excelente desempenho na maioria das plataformas. Implementações modernas aproveitam instruções de hardware em CPUs modernas para computação rápida de hash. Para a maioria das aplicações, o custo de desempenho de SHA-256 é negligível comparado a outras operações como I/O de rede. Use SHA-256 como sua escolha padrão para: verificação de integridade de arquivo, assinaturas digitais, aplicações blockchain e criptomoeda, certificados TLS, chaves de cache onde segurança importa, qualquer aplicação onde ataques de colisão são uma preocupação. SHA-256 atinge o equilíbrio certo entre segurança, desempenho e suporte generalizado. É suportado por toda linguagem de programação moderna e biblioteca criptográfica. A menos que você tenha requisitos específicos (segurança extrema, compatibilidade legada, ou otimização de desempenho), SHA-256 é a escolha certa.

Quando Usar Qual

Use SHA-256 ou SHA-512: Para todos novos projetos que requerem segurança criptográfica. Verificação de integridade de arquivo onde adulteração é uma preocupação. Assinaturas digitais e certificados. Aplicações blockchain. Qualquer contexto onde resistência a colisões importa. Considere MD5: Apenas para aplicações não-seguras onde velocidade importa. Chaves de cache onde segurança não é preocupação. Detecção rápida de mudança de arquivo em ambientes confiáveis. Compatibilidade com sistemas legados que você não pode modificar. NUNCA para senhas ou dados sensíveis. Considere SHA-1: Apenas para compatibilidade legado. Alguns sistemas mais antigos ainda requerem SHA-1. Git ainda usa SHA-1 mas está migrando. Não recomendado para nova implementação de segurança. Para senhas especificamente: NUNCA use MD5, SHA-1 ou SHA-256 diretamente. Use bcrypt, Argon2 ou scrypt—algoritmos projetados especificamente para hash de senha com salting e trabalho computacional ajustável. A regra geral: Quando em dúvida, use SHA-256. É rápido, seguro e universalmente suportado.

Testar a Ferramenta

Gerador de Hash

Gerador de Hash

Artigos Relacionados