Como verificar a integridade de arquivos com hashes

· 9 min de leitura

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:

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

  1. 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".
  2. 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.
  3. 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.
  4. 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.
  5. 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

Algoritmos suportados

AlgoritmoComprimento do hashBits de saídaRecomendação
MD532 hex128Apenas legado, quebrado, só corrupção acidental
SHA-140 hex160Apenas legado, quebrado, não confiar para segurança
SHA-22456 hex224De nicho; prefira SHA-256
SHA-25664 hex256Padrão geral recomendado
SHA-38496 hex384Alta segurança, usado em suites de cifra TLS 1.3
SHA-512128 hex512Força máxima do SHA-2, rápido em CPUs 64 bits
SHA3-25664 hex256Design interno diferente do SHA-2, à prova de futuro
BLAKE2b/BLAKE3varia256 ou 512Hashes modernos mais rápidos, usados pelo rsync, restic
CRC328 hex32Só 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

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.

FerramentaPlataformaForçaA vigiar
Calculador de hash webBrowserSem instalação, ficheiro nunca sobeUm ficheiro de cada vez
sha256sumLinuxRápido, scriptável, GNU coreutils--check lê ficheiros SHA256SUMS
shasum -a 256macOS, BSDIncluído, mesmo formato de saídaNome de binário diferente do Linux
Get-FileHashWindows PowerShellDe primeira classe no WindowsFormato de saída difere de sha256sum
certutil -hashfileWindows cmdDisponível em todo WindowsSaída verbosa precisa de parsing
openssl dgst -sha256MultiplataformaSe já tem OpenSSLMais lento que ferramentas dedicadas
b3sumMultiplataformaBLAKE3, débito multi-GB/sMais recente, menos ubíquo
rhashMultiplataformaCalcula muitos algoritmos de uma vezInstalaçã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.