Como verificar a integridade de arquivos com hashes
Quando descarrega software, firmware ou documentos importantes, como sabe que o ficheiro é exatamente o que o editor pretendia? O hashing de ficheiros dá-lhe uma impressão digital criptográfica, uma string única que muda se até um único byte do ficheiro for diferente. Verificar um hash leva segundos e pode salvá-lo de instalar software adulterado, gravar um firmware corrompido que estraga um dispositivo, ou confiar num backup alterado que falha quando realmente precisa de o restaurar.
Uma breve história das funções de hash
A ideia de uma checksum é mais antiga que a própria computação, os contabilistas usavam somas de dígitos para detetar erros de transcrição muito antes de haver ficheiros para verificar. Os hashes criptográficos apareceram no final dos anos 80. Ron Rivest publicou o MD4 em 1990 e o MD5 em 1991, que se tornou a checksum de facto durante duas décadas. O NIST padronizou o SHA-0 em 1993, depois retirou-o rapidamente em favor do SHA-1 em 1995 após se descobrir uma falha. A família SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512) veio em 2001 para responder à fraqueza iminente do SHA-1.
Cada geração foi reformada por ataques que se revelaram mais baratos do que o previsto. As colisões MD5 foram demonstradas em 2004, tornadas práticas para certificados digitais em 2008, e são agora triviais. O SHA-1 caiu com o ataque SHAttered da Google em 2017, quando investigadores produziram dois PDFs diferentes com digests SHA-1 idênticos. O SHA-2 aguentou desde 2001, e o SHA-3 (Keccak, padronizado em 2015) fornece uma alternativa estruturalmente diferente caso o SHA-2 alguma vez quebre. A lição é que os algoritmos de hash têm prazo de validade; o algoritmo certo hoje pode precisar de ser substituído dentro de uma década.
Como funciona o hashing de ficheiros
Uma função de hash lê cada byte de um ficheiro e produz uma string de comprimento fixo. O mesmo ficheiro produz sempre o mesmo hash. Mude um byte, e o hash muda completamente, isto chama-se efeito avalanche e é a propriedade que torna os hashes úteis para verificação.
Exemplo:
- Ficheiro original (SHA-256):
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 - Mesmo ficheiro, um byte alterado:
d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592
Os dois hashes não partilham nenhum padrão reconhecível mesmo que os ficheiros difiram num único bit. Essa sensibilidade é o que torna a verificação possível: gere o hash, compare com o hash publicado, e saberá instantaneamente se o ficheiro é autêntico.
Internamente, as funções de hash modernas dividem o ficheiro em blocos de tamanho fixo (64 bytes para SHA-256, 128 para SHA-512), passam cada bloco por uma função de compressão e encadeiam o estado para a frente. A saída é o estado final depois de o último bloco ter sido incorporado. Como a cadeia depende de cada byte, nenhum atalho permite a um atacante mudar conteúdo sem reescrever o hash inteiro.
Como verificar um ficheiro
- Encontre o hash oficial, o editor de software lista tipicamente os hashes de ficheiro na sua página de download, frequentemente rotulados como "checksum SHA-256" ou "ficheiro SHA256SUMS".
- Carregue o seu ficheiro descarregado: selecione o ficheiro no calculador de hash. O hash é computado localmente no seu browser; o ficheiro nunca sai da sua máquina.
- Compare os hashes: se o seu hash calculado coincide exatamente com o hash oficial, o ficheiro é autêntico e não está corrompido. Copie-cole ambos para uma ferramenta de diff de texto se as strings forem longas.
- Faça corresponder o algoritmo: hashes SHA-256 só correspondem a outros hashes SHA-256. Se o editor lhe der SHA-512, gere também SHA-512; misturar algoritmos é o erro de "não coincidem" mais comum.
- Verifique o próprio hash publicado quando possível: um ficheiro SHA256SUMS assinado (assinado com a chave GPG do editor) diz-lhe que a lista de hashes não foi adulterada, o que o hash nu numa página de download não faz.
Quando verificar hashes de ficheiro
- Downloads de software: verifique que instaladores e atualizações não foram adulterados ou corrompidos durante o download. Qualquer pessoa que lhe sirva o binário, o seu ISP, uma CDN, um espelho, podia em teoria trocá-lo por algo hostil.
- Atualizações de firmware: um ficheiro de firmware corrompido pode estragar um dispositivo. Verifique sempre antes de gravar um router, dispositivo IoT ou BIOS de motherboard, a recuperação requer frequentemente hardware especial.
- Imagens ISO: imagens de sistema operativo devem ser verificadas antes de gravar para USB ou instalar. As distribuições Linux publicam universalmente tanto hashes SHA-256 como assinaturas GPG sobre esses hashes; verifique ambos.
- Documentos legais e financeiros: verifique que contratos, relatórios de auditoria ou demonstrações financeiras não foram alterados após assinatura ou partilha. Os hashes fornecem um recibo à prova de adulteração.
- Verificação de backups, confirme que ficheiros de backup são idênticos aos originais. A corrupção silenciosa de disco é real, e um backup cujo hash tenha derivado desde a criação pode não restaurar limpamente.
- Artefactos CI/CD: fixar um artefacto de build pelo seu SHA-256 num pipeline de implantação garante que o binário que testou é o binário que implanta. Imagens de contentor fazem isto por desenho com os seus digests endereçáveis por conteúdo.
- Auditorias de cadeia de fornecimento de software: quando um aviso de segurança diz "esta versão tem o hash X", a única forma de confirmar o que está nos seus servidores é fazer o hash do ficheiro lá e comparar. Sem isso, confia na string de versão, que o atacante controla.
Algoritmos suportados
| Algoritmo | Comprimento do hash | Bits de saída | Recomendação |
|---|---|---|---|
| MD5 | 32 hex | 128 | Apenas legado, quebrado, só corrupção acidental |
| SHA-1 | 40 hex | 160 | Apenas legado, quebrado, não confiar para segurança |
| SHA-224 | 56 hex | 224 | De nicho; prefira SHA-256 |
| SHA-256 | 64 hex | 256 | Padrão geral recomendado |
| SHA-384 | 96 hex | 384 | Alta segurança, usado em suites de cifra TLS 1.3 |
| SHA-512 | 128 hex | 512 | Força máxima do SHA-2, rápido em CPUs 64 bits |
| SHA3-256 | 64 hex | 256 | Design interno diferente do SHA-2, à prova de futuro |
| BLAKE2b/BLAKE3 | varia | 256 ou 512 | Hashes modernos mais rápidos, usados pelo rsync, restic |
| CRC32 | 8 hex | 32 | Só deteção de erro, não é um hash de segurança |
Se pode escolher, SHA-256 é o default correto. Use SHA-512 em máquinas de 64 bits para um desempenho ligeiramente melhor (o algoritmo é afinado para palavras de 64 bits). Recorra a BLAKE3 quando o débito for o que mais importa, pode saturar SSDs NVMe modernos de uma forma que SHA-256 não consegue.
Hash vs assinatura digital
Um hash diz-lhe se um ficheiro mudou. Uma assinatura digital diz-lhe se mudou E quem criou o hash. Uma assinatura é um hash que foi cifrado com a chave privada do editor; descifra-o com a chave pública dele, recomputa o hash e verifica que ambos coincidem. Se coincidem, sabe que o ficheiro está intacto E que o editor (ou alguém com a chave privada dele) o aprovou.
Quando uma página de download mostra tanto um hash SHA-256 como um ficheiro .sig ou .asc, o hash protege contra corrupção e adulteração acidental, mas a assinatura é o que protege contra um atacante que violou o servidor de download. O atacante pode trocar o ficheiro e atualizar o hash exibido; não pode forjar uma assinatura válida sem a chave do editor.
Armadilhas comuns
- Comparar o algoritmo errado, MD5 e SHA-256 produzem strings de comprimento diferente; algoritmos mal emparelhados nunca coincidirão, mesmo em ficheiros idênticos.
- Confiar no hash servido do mesmo sítio que o ficheiro, se ambos estão no mesmo espelho comprometido, ambos podem ser substituídos. Sempre que possível, obtenha o hash de um domínio diferente (a página de releases do GitHub do projeto, um ficheiro SHA256SUMS assinado).
- Sensibilidade a maiúsculas hex, os hashes são insensíveis a maiúsculas (
a3feA3Frepresentam o mesmo byte). A comparação de strings pode ainda assim marcá-los como diferentes. Passe ambos os lados a minúsculas ou compare por bytes. - Espaços finais e BOMs, um hash copiado com uma nova linha final ou carácter invisível parecerá idêntico mas não coincidirá. Apare ambos os lados antes de comparar.
- Fazer hash do ficheiro errado, no Windows o caminho de download pode ser
Transferências\ficheiro (1).exeem vez deTransferências\ficheiro.exese o descarregou duas vezes. Verifique o caminho antes de fazer hash. - Tratar MD5 ou SHA-1 como garantias de segurança, um atacante pode produzir um ficheiro de aparência benigna com o mesmo MD5 que um malicioso em segundos. Para segurança, use sempre SHA-256 ou mais forte.
- Verificar a coisa errada, se o editor faz hash do
.tar.gzcomprimido e você faz hash do conteúdo extraído, nenhum coincidirá. Faça hash do que foi feito hash; normalmente o arquivo descarregado em si. - Ignorar a assinatura GPG, muita gente verifica o hash mas salta a assinatura. A assinatura é o que defende contra o atacante que controla o espelho.
- Falhas silenciosas de corrupção de rede, um download truncado pode coincidir com um hash de ficheiro parcial se ambos foram truncados de forma idêntica. Faça sempre hash do ficheiro completo que pretende usar, não de um pedaço.
- Caching do browser de downloads antigos, um ficheiro em cache desatualizado pode enganar um passo de verificação. Force um download fresco se o hash não coincide e suspeita do cache.
Ferramentas e contextos alternativos
Um calculador de hash web é o caminho mais rápido quando tem um ficheiro para verificar. Para uso repetido ou scripting, as ferramentas de linha de comandos são o padrão.
| Ferramenta | Plataforma | Força | A vigiar |
|---|---|---|---|
| Calculador de hash web | Browser | Sem instalação, ficheiro nunca sobe | Um ficheiro de cada vez |
sha256sum | Linux | Rápido, scriptável, GNU coreutils | --check lê ficheiros SHA256SUMS |
shasum -a 256 | macOS, BSD | Incluído, mesmo formato de saída | Nome de binário diferente do Linux |
Get-FileHash | Windows PowerShell | De primeira classe no Windows | Formato de saída difere de sha256sum |
certutil -hashfile | Windows cmd | Disponível em todo Windows | Saída verbosa precisa de parsing |
openssl dgst -sha256 | Multiplataforma | Se já tem OpenSSL | Mais lento que ferramentas dedicadas |
b3sum | Multiplataforma | BLAKE3, débito multi-GB/s | Mais recente, menos ubíquo |
rhash | Multiplataforma | Calcula muitos algoritmos de uma vez | Instalação extra |
Em pipelines CI/CD a mesma tarefa normalmente corre como sha256sum file > file.sha256 durante o build e sha256sum -c file.sha256 durante a verificação, por vezes embrulhada num manifesto assinado. O princípio (computar, publicar, comparar na recuperação) é idêntico ao que a ferramenta de browser faz interativamente.
Privacidade e o calculador de hash
O calculador de hash corre inteiramente no seu browser. O ficheiro que seleciona é lido com a API FileReader, alimentado pela interface SubtleCrypto da Web Crypto, e o hash resultante é-lhe mostrado. Os bytes do ficheiro nunca viajam para os nossos servidores, não há upload, não há registo de quais ficheiros foram feitos hash, e não há analítica sobre tamanhos ou extensões de ficheiro. Para material sensível, contratos, registos médicos, chaves privadas, a diferença entre uma ferramenta que faz upload e uma que faz hash localmente é a diferença entre confiar num terceiro e não confiar em nenhum. Um hash é uma saída minúscula (64 caracteres hex para SHA-256), mas a entrada que resume pode ser muito reveladora. Manter essa entrada do lado do cliente é o default correto para qualquer tarefa de verificação.
Perguntas frequentes
Como comparo um hash de arquivo com o oficial?
Após gerar o hash, compare-o caractere por caractere com o hash publicado pela fonte do arquivo (geralmente na página de download). Se cada caractere corresponder, o arquivo é autêntico e não corrompido. Mesmo uma diferença de um caractere significa que o arquivo foi modificado.
Qual algoritmo de hash devo usar?
SHA-256 é o padrão para verificação de arquivos. Use o algoritmo que o publicador fornecer. Se tiver escolha, SHA-256 oferece um bom equilíbrio entre segurança e desempenho.
Um arquivo corrompido pode ter o hash correto?
É teoricamente possível (uma colisão), mas estatisticamente insignificante com SHA-256. As probabilidades são tão astronomicamente baixas que, para todos os fins práticos, hashes coincidentes garantem arquivos idênticos.
Meu arquivo é enviado a um servidor?
Não. O hash é calculado inteiramente no seu navegador. Seu arquivo nunca sai do seu dispositivo, tornando-o seguro para qualquer arquivo, incluindo documentos sensíveis.
What is the difference between a hash and a digital signature?
A hash proves a file has not changed since the hash was computed; anyone can verify it. A digital signature proves both integrity AND identity, the publisher signs the hash with their private key, and you verify with their public key. Hashes alone do not protect against a hacker who replaced both the file and the published hash on the same compromised mirror.
Why are MD5 and SHA-1 considered insecure?
Researchers have demonstrated practical collision attacks for both. In 2017 Google produced two different PDFs with identical SHA-1 hashes (the SHAttered attack), and MD5 collisions can be generated in seconds on a laptop. For deliberate-tamper detection use SHA-256 or stronger; MD5 and SHA-1 still work for catching accidental corruption but should never be trusted as security boundaries.