Segurança · 4 min de leitura ·

MD5, SHA-1 ou SHA-256: qual hash você deve usar?

Checksums, integridade de arquivos, senhas e assinaturas pedem coisas diferentes. Um guia curto para escolher o hash certo, e o erro que você precisa evitar.

Uma função hash transforma qualquer entrada numa impressão digital curta e de tamanho fixo. A mesma entrada sempre gera o mesmo hash, e mudar um único byte muda o resultado por completo. O que diferencia os algoritmos é o quanto é difícil enganá-los.

"hello"  MD5      5d41402abc4b2a76b9719d911017c592
"hello"  SHA-256  2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

MD5 e SHA-1: quebrados para segurança

Dá para criar em segundos duas entradas diferentes com o mesmo hash MD5, e colisões práticas de SHA-1 são públicas desde 2017. Não os use para assinaturas, certificados ou qualquer coisa que um atacante possa adulterar. Eles ainda servem como checksums rápidos, por exemplo para achar arquivos duplicados ou montar chaves de cache.

SHA-256: o padrão seguro

Para conferir integridade, verificar downloads, assinaturas digitais e endereçamento por conteúdo, o SHA-256 da família SHA-2 é a escolha padrão. SHA-3 e BLAKE2 são alternativas modernas com nível de segurança parecido.

CRC32: para acidentes, não para ataques

CRC32 e Adler-32 são checksums rápidos que detectam corrupção acidental em transferências e arquivos compactados. Qualquer um pode fabricar de propósito um valor igual, então eles não protegem contra adulteração.

Nunca guarde senhas com um hash rápido

Esse é o erro mais comum. Velocidade é exatamente o que você não quer para senhas: uma placa de vídeo testa bilhões de hashes SHA-256 por segundo. Use um algoritmo lento e com salt feito para senhas, como Argon2, bcrypt ou scrypt, pela biblioteca de senhas do seu framework.

Hash, criptografia e codificação são coisas diferentes

Codificação   Base64, hex, URL   reversível por qualquer um, sem chave
Criptografia  AES, RSA           reversível só com a chave
Hash          SHA-256, MD5       mão única, não pode ser revertido

Um hash não pode ser "descriptografado". Os sites que dizem reverter MD5 apenas procuram o hash em tabelas enormes de entradas conhecidas, o que funciona para palavras comuns e senhas curtas e falha com qualquer coisa longa e aleatória.

Verificar um download

Muitos projetos publicam um checksum SHA-256 ao lado dos downloads. Calcule o hash do arquivo que você recebeu e compare os dois valores; se um único caractere for diferente, o arquivo está corrompido ou não é o que o autor publicou. Todo sistema operacional tem um comando embutido:

Linux        sha256sum file.iso
macOS        shasum -a 256 file.iso
Windows      certutil -hashfile file.iso SHA256
PowerShell   Get-FileHash file.iso -Algorithm SHA256

Tamanhos dos hashes

O MD5 gera 128 bits (32 caracteres hexadecimais), o SHA-1 160 bits (40), o SHA-256 256 bits (64) e o SHA-512 512 bits (128). Se você precisa provar quem criou uma mensagem, e não só que ela não mudou, use um HMAC ou uma assinatura digital: qualquer pessoa que altere o conteúdo pode recalcular um hash simples.

Qual usar, em uma linha

  • Conferir um download ou um backup: SHA-256.
  • Assinaturas, certificados e tudo que envolve segurança: SHA-256 ou mais forte, nunca MD5 ou SHA-1.
  • Encontrar arquivos duplicados ou criar chaves de cache: MD5 ou SHA-1 servem e são rápidos.
  • Detectar erros de transmissão em um protocolo ou arquivo compactado: CRC32.
  • Guardar senhas: nenhum deles; use Argon2, bcrypt ou scrypt.

Por que seus hashes não batem

Se duas ferramentas dão hashes diferentes para o “mesmo” texto, a entrada quase nunca é a mesma: uma quebra de linha no final, finais de linha do Windows ou outra codificação de texto mudam o resultado inteiro. O gerador de hash da 4Dev calcula o hash do texto como bytes UTF-8, igual ao md5sum, ao sha256sum e ao hashlib do Python, e suporta 17 algoritmos, entre eles MD5, SHA-1, SHA-2, SHA-3, BLAKE2 e CRC32.

Abrir o gerador de hash

LinkedInXFacebook