md5sum e sha256sum: Verificando a Integridade de Arquivos

md5sum e sha256sum: Verificando a Integridade de Arquivos

O que você vai conseguir fazer

  • Calcular a impressão digital de um arquivo com `sha256sum`
  • Conferir com `-c` os hashes registrados contra os arquivos atuais
  • Explicar como o hash difere de criptografia e de codificação

Pré-requisitos (leia estes primeiro)

O Que Você Vai Aprender

  • Por que existem checksums (hashes) e que problema eles resolvem
  • Como calcular a impressão digital de um arquivo com sha256sum
  • Como usar -c para conferir se um arquivo está corrompido ou trocado
  • Como distinguir hash, criptografia e codificação

As palavras usadas aqui (organizadas antes)

  • Checksum / valor de hash / impressão digital: três nomes para quase a mesma coisa. Este artigo diz "impressão digital" ao explicar a ideia.
  • Hash: gerar um valor curto a partir do conteúdo. Você não recupera o arquivo a partir dele. Ele responde "é igual ou diferente?".
  • Criptografia: deixar os dados legíveis apenas para quem tem a chave. O objetivo é esconder o conteúdo, que é outro objetivo.
  • Codificação: apenas mudar a forma de escrever. Qualquer um reverte sem chave. O base64 é isto.

O hash não pode ser revertido. A criptografia volta com a chave. A codificação volta para qualquer um. Mantenha os três separados.

Resumo Rápido

  • Só quer a impressão digital → sha256sum file
  • Conferir se bate com o valor oficial → sha256sum -c SHA256SUMS
  • Para proteção contra adulteração, use SHA-256. MD5 / SHA-1 servem só para corrupção acidental

Ambiente

  • SO: Ubuntu / Linux típico
  • md5sum / sha256sum vêm no GNU coreutils e já estão instalados (não precisa instalar)
  • Parentes próximos: sha1sum / sha512sum / b2sum

1. O Que é um Checksum?

Conclusão: Um checksum é uma "impressão digital" calculada do conteúdo do arquivo; mudar um bit já muda tudo.

Lina: Senpai, páginas de download às vezes mostram uma string longa como "SHA256: a1b2c3...". O que é isso?
Veterano Linny: Isso é um checksum, também chamado de valor de hash. É como uma impressão digital calculada lendo todo o conteúdo do arquivo. O mesmo conteúdo sempre gera o mesmo valor.
Lina: Impressão digital. Então é diferente para cada arquivo?
Veterano Linny: Por ora, pode pensar assim. Conteúdos diferentes quase sempre dão impressões diferentes. Digo "quase" por um motivo — falamos disso depois.
Lina: Certo. Vou guardar isso.
Veterano Linny: E se um único bit muda, a impressão digital vira um valor completamente diferente. Assim você confere na hora se o arquivo baixado é idêntico ao original.

O que os checksums permitem

A impressão digital não reconstrói o conteúdo

O hash é uma via de mão única. Você não restaura o arquivo original a partir da impressão digital. Por isso ele não esconde nada. Use criptografia quando precisar esconder algo.

2. Calculando a Impressão Digital com sha256sum

Conclusão: sha256sum file calcula o hash; a saída é "hash + dois espaços + nome do arquivo".

2-1. Básico: Impressão Digital de um Arquivo

$ sha256sum ubuntu.iso
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  ubuntu.iso
Lina: Nossa, saiu uma string bem longa, com o nome do arquivo depois.
Veterano Linny: Essa é a impressão digital SHA-256 — 64 dígitos hexadecimais. Se ela bate, o conteúdo é considerado idêntico. Repare que há dois espaços no meio; isso importa na hora de verificar.

Como ler a saída

e3b0c4...b855  ubuntu.iso
└─── hash ───┘└┘└ nome do arquivo
              dois espacos
  • O primeiro espaço é o separador
  • O segundo caractere marca o modo de entrada ( = texto / * = binário)
  • Em sistemas GNU os dois modos são iguais (mantidos por compatibilidade histórica)

2-2. O md5sum Funciona Igual

$ md5sum ubuntu.iso
d41d8cd98f00b204e9800998ecf8427e  ubuntu.iso

md5sum calcula MD5 e sha256sum calcula SHA-256. Essa é a única diferença; o uso é idêntico. Vale o mesmo para sha1sum / sha512sum.

3. Vários Arquivos e Salvando uma Lista

Conclusão: Dá para calcular vários de uma vez e salvar a lista com > para reusar depois com -c.

3-1. Calcular Vários Arquivos de Uma Vez

$ sha256sum *.iso
e3b0c4...b855  ubuntu.iso
9f86d0...0a08  debian.iso

3-2. Salvar a Lista em um Arquivo

$ sha256sum *.iso > SHA256SUMS

O nome SHA256SUMS é uma convenção comum em sites de distribuição. O arquivo é texto puro, com "hash + nome do arquivo" em cada linha.

Onde ele cai e o risco de sobrescrita

Lina: Para que eu uso essa lista depois?
Veterano Linny: Com o -c do próximo passo, você confere em lote se as impressões digitais salvas ainda batem com os arquivos atuais. É útil para checar de tempos em tempos se um backup não apodreceu.

4. Verificando com -c (o Ponto Alto)

Conclusão: sha256sum -c lista compara os hashes registrados com os arquivos atuais: OK se batem, FAILED se não.

4-1. Conferir Contra uma Lista

$ sha256sum -c SHA256SUMS
ubuntu.iso: OK
debian.iso: OK

Se o conteúdo de um arquivo mudou, você vê:

ubuntu.iso: OK
debian.iso: FAILED
sha256sum: WARNING: 1 computed checksum did NOT match
Lina: Se aparece FAILED, o arquivo está quebrado?
Veterano Linny: Quer dizer que a impressão digital salva e o conteúdo atual diferem. A causa é um download corrompido ou alguém que trocou o arquivo. De qualquer forma, o certo é não usar esse arquivo.

4-2. Conferir Contra um Único Valor Oficial

Às vezes a página de download traz só uma linha, como "SHA256: valor oficial". Transforme essa linha em um arquivo de lista e verifique.

# Escreva o valor oficial e o nome do arquivo em uma linha (dois espacos)
$ echo "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  ubuntu.iso" > check.txt
$ sha256sum -c check.txt
ubuntu.iso: OK

Não redigite o separador

Mantenha o espaço entre o "hash" e o "nome do arquivo" exatamente como o sha256sum imprimiu: dois espaços. Com três ou mais, o branco extra vira parte do nome e aparece No such file or directory. Ao copiar um valor oficial, não acrescente espaços.

4-3. Opções Úteis para Verificar

# Esconder linhas OK, mostrar so as falhas
$ sha256sum -c --quiet SHA256SUMS

# Ignorar arquivos fora da lista (quando confere so alguns)
$ sha256sum -c --ignore-missing SHA256SUMS

# Nao imprimir nada, decidir pelo codigo de saida (para scripts)
$ sha256sum -c --status SHA256SUMS && echo "todos batem"

--status não imprime nada. Ele decide apenas pelo código de saída (0 sucesso / 1 falha). O código de saída é o número que diz se o comando anterior deu certo; veja com echo $?. É ideal para checagens automáticas em shell scripts.

5. Detecção de Corrupção Não é Detecção de Adulteração

Conclusão: Qualquer hash pega corrupção acidental, mas defender de adulteração maliciosa exige SHA-256.

Lina: Detecção de corrupção e de adulteração não são a mesma coisa?
Veterano Linny: Parecidas, mas diferentes. Corrupção é o arquivo quebrar sozinho por erro de transmissão ou disco ruim. Adulteração é um atacante trocar o conteúdo de propósito mantendo a mesma impressão digital. Resistir a isso exige um hash cujas impressões não se possam colidir de propósito.

Dois objetivos

Objetivo O que evita Hashes utilizáveis
Checagem de corrupção Corrupção acidental de rede/disco MD5 / SHA-1 servem
Checagem de adulteração Trocas deliberadas por um atacante SHA-256 ou mais forte

6. Por Que MD5 é Desencorajado Hoje

Conclusão: MD5 e SHA-1 permitem ataques de colisão práticos ("conteúdo diferente, mesma impressão"), então são desencorajados em segurança.

Veterano Linny: Lembra quando eu disse "quase sempre" lá na seção 1? Esse "quase" é o assunto de hoje.
Lina: Vejo MD5 em todo lugar. É proibido usar?
Veterano Linny: Não é "proibido" — depende do uso. MD5 e SHA-1 têm ataques de colisão práticos. Um atacante consegue criar de propósito dois arquivos com conteúdo diferente e a mesma impressão digital.
Lina: Então nem uma impressão digital igual tranquiliza.
Veterano Linny: Isso. Por isso não use MD5 / SHA-1 para proteção contra adulteração. Para só pegar corrupção acidental no transporte, eles ainda servem. Na dúvida, escolha SHA-256 e você não erra.

7. Armadilhas Comuns para Iniciantes

Conclusão: Ler errado maiúsculas e minúsculas, o número de espaços e fins de linha estranhos são as causas típicas de falha.

7-1. Comparar a Olho e Deixar Passar

Lina: Senpai, coloquei lado a lado na tela o valor oficial e a impressão digital do arquivo que baixei. Bateram, então instalei.
Veterano Linny: Você comparou 64 dígitos a olho? Um caractere errado no meio passa fácil.
Lina: Ai. Achei que todos batiam, mas, sinceramente, eu li o meio por cima.
Veterano Linny: O olho humano funciona assim. Por isso você deixa o -c comparar. Ele nunca deixa passar um caractere.
Lina: Entendi. Não é para olhar, é para o comando decidir.
# Ruim: comparar a olho (algo vai passar)
# Bom: fazer uma lista e verificar com -c
$ sha256sum -c SHA256SUMS

7-2. Espaço Extra no Separador

Coloque três ou mais espaços no separador e aparece isto.

sha256sum: ' ubuntu.iso': No such file or directory
 ubuntu.iso: FAILED open or read
sha256sum: WARNING: 1 listed file could not be read

FAILED open or read, em vez de apenas FAILED, não significa conteúdo diferente. Significa que o nome do arquivo não pode ser lido. Uma lista feita com sha256sum file > SHA256SUMS nunca fica nesse formato.

7-3. Uma Lista Feita no Windows Não Verifica

Arquivos vindos do Windows usam fim de linha \r\n (CRLF). O \r final pode causar problema.

# Converter CRLF para LF antes de verificar
$ tr -d '\r' < SHA256SUMS.txt | sha256sum -c -

O - final significa "leia o que vem pelo pipe, e não um arquivo". Pense nele ocupando o lugar do nome do arquivo em sha256sum -c SHA256SUMS.

7-4. Os Hashes Batem mas os Arquivos "Parecem Diferentes"

Se só o nome muda e o conteúdo é idêntico, o hash bate. Um hash olha apenas o conteúdo — não o nome nem a data.

8. Mini Exercícios: Aprenda Fazendo

Conclusão: Crie o seu arquivo e percorra calcular, salvar, verificar e detectar corrupção para fixar.

Lina: A teoria entrou. Quero testar de verdade.
Veterano Linny: O melhor jeito é criar um arquivo de teste e experimentar. Aqui vão três exercícios.

Crie um diretório de prática vazio e trabalhe dentro dele. Assim você nunca sobrescreve um arquivo que já tinha.

# Prepare um diretorio de pratica e entre nele
$ mkdir -p ~/checksum-practice && cd ~/checksum-practice

Exercício 1: Crie um arquivo com echo hello > a.txt e mostre o hash SHA-256 dele.

Ver Dica 1 (Direção)

Passe o nome do arquivo para o comando que calcula a impressão digital. Não precisa de opções.

Ver Dica 2 (Nome do comando)

Use sha256sum.

Ver Resposta
$ echo hello > a.txt
$ sha256sum a.txt
5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03  a.txt

Primeiro vem a impressão digital de 64 dígitos, depois o nome do arquivo, com dois espaços no meio.

Exercício 2: Salve a lista de hash de a.txt em SUMS e verifique para ver OK.

Ver Dica 1 (Direção)

Grave o resultado calculado em um arquivo. Depois faça o comando ler essa lista e conferir.

Ver Dica 2 (Nome do comando)

O comando é sha256sum. Salve com o redirecionamento > e verifique com -c.

Ver Resposta
$ sha256sum a.txt > SUMS
$ sha256sum -c SUMS
a.txt: OK

OK significa que a impressão digital salva e o conteúdo atual são os mesmos.

Exercício 3: Altere a.txt, verifique de novo e confirme que aparece FAILED.

Ver Dica 1 (Direção)

Acrescente uma linha ao arquivo. Depois rode a mesma verificação do Exercício 2.

Ver Dica 2 (Nome do comando)

Acrescente com >> (o > sobrescreveria). A verificação é o mesmo comando do Exercício 2.

Ver Resposta
$ echo world >> a.txt
$ sha256sum -c SUMS
a.txt: FAILED
sha256sum: WARNING: 1 computed checksum did NOT match

Quando o conteúdo muda, a impressão digital muda e a verificação vira FAILED.

9. Templates para Copiar e Colar

Conclusão: As formas padrão para calcular, salvar a lista, verificar e conferir um valor oficial estão prontas para copiar.

Templates de Checksum

# Impressao digital de um arquivo
sha256sum file

# Calcular varios de uma vez
sha256sum *.iso

# Salvar uma lista (sobrescreve um nome existente)
sha256sum *.iso > SHA256SUMS

# Verificar contra uma lista salva
sha256sum -c SHA256SUMS

# Mostrar so as falhas
sha256sum -c --quiet SHA256SUMS

# Para scripts (decidir pelo codigo de saida)
sha256sum -c --status SHA256SUMS && echo OK

# Verificar contra um unico valor oficial (o - final le o pipe)
echo "<hash oficial>  file.iso" | sha256sum -c -

# Quando quiser um hash mais forte
sha512sum file

O que não fazer

  • Usar MD5 / SHA-1 para proteção contra adulteração
  • Comparar 64 dígitos a olho (verifique com -c)
  • Redigitar o separador na mão (copie a própria saída do sha256sum)

Retomando

Conclusão: A impressão digital não volta, e a comparação é do comando, não dos seus olhos.

Lina: Vou resumir. O hash é uma impressão digital feita do conteúdo, e não dá para recuperar o arquivo a partir dele.
Veterano Linny: Isso. Como não dá para reverter, ele não esconde nada. Ele responde "igual ou diferente".
Lina: E eu não devo comparar a olho. Deixo o -c decidir. Foi exatamente o meu erro.
Veterano Linny: Bem colocado. Some "SHA-256 contra adulteração" e você tem tudo o que importa.

Resumo em Três Linhas

Conclusão: Calcule com sha256sum, verifique com -c em vez dos olhos, e escolha SHA-256 contra adulteração.

  1. sha256sum file calcula a impressão digital do arquivo. Um hash não pode ser revertido
  2. Não compare a olho. Deixe sha256sum -c lista decidir
  3. Use SHA-256 ou mais forte contra adulteração. MD5 / SHA-1 só para corrupção acidental

Próximas Leituras