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:
- Determinística: o mesmo conteúdo gera sempre o mesmo hash.
- Efeito avalanche: mudar um único bit do conteúdo muda o hash por completo.
- 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.