RTZ Ferramentas Segurança defensiva

MD5, SHA-1 e SHA-256: o que é hash e qual a diferença

Entenda o que é uma função de hash, para que ela serve em segurança, as diferenças entre MD5, SHA-1 e SHA-256 e como calcular o hash de um arquivo.

Por Nonato Rios ·

Hashes estão em toda parte na segurança da informação: na verificação de downloads, no armazenamento de senhas, nos relatórios de malware e nas ferramentas forenses. Mesmo assim, muita gente usa os termos MD5, SHA-1 e SHA-256 sem saber exatamente o que eles significam. Este guia explica de forma simples.

O que é uma função de hash

Uma função de hash é um cálculo que transforma qualquer quantidade de dados (um texto, uma foto, um programa de 2 GB) numa sequência de tamanho fixo, chamada hash, resumo ou digest. Por exemplo, o SHA-256 do texto ola é sempre o mesmo valor de 64 caracteres hexadecimais.

Uma boa função de hash criptográfica tem três propriedades:

  1. Determinística: o mesmo conteúdo gera sempre o mesmo hash.
  2. Efeito avalanche: mudar um único bit do conteúdo muda o hash por completo.
  3. Resistente a colisões: deve ser praticamente impossível encontrar dois conteúdos diferentes com o mesmo hash.

É por isso que o hash funciona como uma impressão digital do arquivo.

Para que servem os hashes em segurança

  • Identificar arquivos: relatórios de ameaças listam os hashes dos malwares para que qualquer pessoa possa procurá-los. A Consulta de hash usa exatamente isso.
  • Verificar integridade: sites de software publicam o hash dos instaladores. Se o hash do arquivo baixado bate com o publicado, o arquivo não foi corrompido nem adulterado.
  • Guardar senhas: sistemas bem feitos não guardam a sua senha, e sim um hash dela (com algoritmos próprios para isso, como bcrypt e Argon2, e não MD5 ou SHA puros).
  • Perícia digital: o hash comprova que uma evidência não foi alterada desde a coleta.

MD5, SHA-1 e SHA-256 lado a lado

Algoritmo Tamanho do hash Caracteres hex Situação atual
MD5 128 bits 32 Quebrado para colisões; ainda usado para identificar arquivos
SHA-1 160 bits 40 Colisões práticas demonstradas; em desuso
SHA-256 256 bits 64 Padrão atual e recomendado

Dá para reconhecer o tipo pelo tamanho: 32 caracteres é MD5, 40 é SHA-1 e 64 é SHA-256.

MD5

Criado em 1991, o MD5 é rápido e ainda aparece em muitos relatórios e antivírus. Porém, desde os anos 2000 é possível criar dois arquivos diferentes com o mesmo MD5 (uma colisão). Para identificar um malware conhecido ele ainda funciona, mas não deve ser usado para garantir integridade contra um adversário.

SHA-1

O SHA-1 foi o padrão por muitos anos, mas em 2017 pesquisadores demonstraram uma colisão prática. Navegadores e autoridades certificadoras abandonaram o SHA-1 em certificados digitais. Ainda aparece em sistemas legados e no Git.

SHA-256

Parte da família SHA-2, o SHA-256 é o padrão atual. Não há ataques práticos de colisão conhecidos. Se você puder escolher, use SHA-256.

Como calcular o hash de um arquivo

Windows (PowerShell):

Get-FileHash .\arquivo.exe
Get-FileHash .\arquivo.exe -Algorithm MD5
Get-FileHash .\arquivo.exe -Algorithm SHA1

Linux:

sha256sum arquivo.bin
md5sum arquivo.bin

macOS:

shasum -a 256 arquivo.bin
md5 arquivo.bin

Depois, cole o resultado na Consulta de hash para saber se o arquivo é conhecido pelas bases de reputação, sem precisar enviá-lo.

Uma limitação importante

Como qualquer alteração muda o hash, basta o atacante modificar um único byte do malware para gerar um hash novo, sem histórico nas bases. Por isso, o hash é ótimo para encontrar ameaças conhecidas, mas não substitui um antivírus com análise de comportamento.

Resumo

Hash é a impressão digital de um arquivo. MD5 (32 caracteres) e SHA-1 (40) são antigos e têm colisões conhecidas; SHA-256 (64) é o padrão atual. Para verificar se um arquivo é malicioso, calcule o hash e consulte as bases de reputação.

Leia também