md5sum e sha256sum: Verificando a Integridade de Arquivos

md5sum e sha256sum: Verificando a Integridade de Arquivos

O Que Voce Vai Aprender

  • Por que checksums (hashes) existem e qual problema resolvem
  • Como calcular a impressao digital de um arquivo com sha256sum / md5sum
  • Como usar -c para verificar se um arquivo esta corrompido ou foi trocado
  • A diferenca entre deteccao de corrupcao e deteccao de adulteracao, e por que MD5 e desencorajado hoje

Resumo Rapido

  • Quer apenas uma impressao digital -> sha256sum file
  • Verificar se corresponde ao valor oficial -> sha256sum -c SHA256SUMS
  • Para protecao contra adulteracao use SHA-256. MD5 / SHA-1 sao apenas para corrupcao acidental

Ambiente

  • OS: Ubuntu / Linux tipico
  • md5sum / sha256sum vem com GNU coreutils e estao pre-instalados (sem necessidade de instalacao)
  • Parentes incluem sha1sum / sha512sum / b2sum

1. O Que E um Checksum?

Conclusao: Um checksum e uma "impressao digital" calculada a partir do conteudo de um arquivo; mudar ate um bit o altera drasticamente.

Lina: Senpai, paginas de download as vezes mostram uma string longa como "SHA256: a1b2c3...". O que e isso?
Veterano Linny: Isso e um checksum, tambem chamado de valor de hash. E como uma "impressao digital" calculada lendo todo o conteudo de um arquivo. O mesmo conteudo sempre produz o mesmo valor.
Lina: Uma impressao digital... entao e diferente para cada arquivo?
Veterano Linny: Exatamente. E se ate um unico bit mudar, a impressao digital se torna um valor completamente diferente. Isso permite que voce verifique instantaneamente se um arquivo baixado e identico ao original.

O que checksums permitem fazer

  • Detectar se um arquivo baixado foi corrompido no transito (deteccao de corrupcao)
  • Confirmar que o conteudo corresponde a fonte (detectar trocas / adulteracao)
  • Comparar se dois arquivos sao identicos byte a byte

2. Calculando uma Impressao Digital com sha256sum

Conclusao: sha256sum file calcula o hash; a saida e "hash + dois espacos + nome do arquivo".

2-1. Basico: Impressao Digital de um Unico Arquivo

$ sha256sum ubuntu.iso
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  ubuntu.iso
Lina: Uau, uma string bem longa apareceu, com o nome do arquivo depois.
Veterano Linny: Essa e a impressao digital SHA-256 -- 64 digitos hexadecimais. Se corresponder, os conteudos sao considerados identicos. Note que ha dois espacos entre eles; isso importa depois na verificacao.

Como ler a saida

e3b0c4...b855  ubuntu.iso
└── hash ────┘└┘└ nome do arquivo
              dois espacos
  • O primeiro espaco e um separador
  • O segundo caractere marca o modo de entrada ( = texto / * = binario)
  • Em sistemas GNU ambos os modos sao identicos (mantido por compatibilidade historica)

2-2. md5sum Funciona da Mesma Forma

$ md5sum ubuntu.iso
d41d8cd98f00b204e9800998ecf8427e  ubuntu.iso

md5sum calcula MD5 e sha256sum calcula SHA-256, mas o uso e identico. O mesmo vale para sha1sum / sha512sum.

3. Multiplos Arquivos e Salvando uma Lista

Conclusao: Voce pode calcular hash de varios arquivos de uma vez e salvar a lista com > para reutiliza-la depois com -c.

3-1. Calcular Hash de Varios 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 e uma convencao comum em sites de distribuicao. O arquivo e apenas texto simples com "hash + nome do arquivo" em cada linha.

Lina: Para que eu uso essa lista depois?
Veterano Linny: Com o -c do proximo passo, voce pode verificar em massa se "as impressoes digitais salvas" ainda correspondem aos arquivos atuais. E util para verificacoes periodicas de que um backup nao degradou.

4. Verificando com -c (O Evento Principal)

Conclusao: sha256sum -c arquivo_lista compara hashes registrados com os arquivos atuais: OK se corresponderem, FAILED se nao.

4-1. Verificar Contra uma Lista

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

Se o conteudo de um arquivo mudou, voce obtem:

ubuntu.iso: OK
debian.iso: FAILED
sha256sum: WARNING: 1 computed checksum did NOT match
Lina: Se eu vir FAILED, isso significa que o arquivo esta quebrado?
Veterano Linny: Significa que "a impressao digital salva e o conteudo atual diferem." A causa e ou um download corrompido ou alguem trocando o arquivo. De qualquer forma, o correto e nao usar esse arquivo.

4-2. Verificar Contra um Unico Valor Oficial

Se uma pagina de download lista apenas 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

Sempre dois espacos

Em um arquivo de lista, o espaco entre o "hash" e o "nome do arquivo" deve ser de dois espacos. Com apenas um, a linha esta malformada e a verificacao falha. Usar a propria saida do sha256sum evita o erro.

4-3. Opcoes Uteis para Verificacao

# Ocultar linhas OK, mostrar apenas falhas
$ sha256sum -c --quiet SHA256SUMS

# Ignorar arquivos que nao estao na lista (quando verificar apenas alguns)
$ sha256sum -c --ignore-missing SHA256SUMS

# Nao imprimir nada, julgar pelo codigo de saida (para scripts)
$ sha256sum -c --status SHA256SUMS && echo "all match"

--status nao imprime nada e decide exclusivamente pelo codigo de saida (0 sucesso / 1 falha). E ideal para verificacoes automatizadas em shell scripts.

5. Deteccao de Corrupcao Nao E Deteccao de Adulteracao

Conclusao: Qualquer hash pode detectar corrupcao acidental, mas defender contra adulteracao maliciosa requer SHA-256.

Lina: Deteccao de corrupcao e deteccao de adulteracao nao sao a mesma coisa?
Veterano Linny: Similar, mas diferente. Corrupcao e um arquivo "quebrando sozinho" por erro de transmissao ou disco defeituoso. Adulteracao e um atacante deliberadamente trocando o conteudo enquanto mantem a mesma impressao digital. Resistir a isso requer um hash cujas impressoes digitais nao possam ser deliberadamente colididas.

Dois objetivos

Objetivo O que previne Hashes utilizaveis
Verificar corrupcao Corrupcao acidental de transito/disco MD5 / SHA-1 sao ok
Verificar adulteracao Trocas deliberadas por um atacante SHA-256 ou mais forte

6. Por Que MD5 E Desencorajado Hoje

Conclusao: MD5 e SHA-1 permitem ataques praticos de colisao ("conteudos diferentes, mesma impressao digital"), por isso sao desencorajados para seguranca.

Lina: Vejo MD5 em muitos lugares -- e proibido usar?
Veterano Linny: Nao e "proibido" -- depende do caso de uso. MD5 e SHA-1 tem ataques praticos de colisao, o que significa que um atacante pode deliberadamente criar dois arquivos com conteudos diferentes mas a mesma impressao digital.
Lina: Entao mesmo uma impressao digital correspondente nao e tranquilizador...
Veterano Linny: Certo. Entao nao use MD5 / SHA-1 para protecao contra adulteracao. Mas para simplesmente detectar corrupcao acidental no transito, eles ainda servem. Na duvida, escolha SHA-256 e voce nao vai errar.

7. Armadilhas Comuns para Iniciantes

Conclusao: Confundir maiusculas/minusculas, o numero de espacos e finais de linha extras sao as causas tipicas de falha na verificacao.

7-1. Comparar a Olho e Nao Perceber

Comparar 64 digitos a olho convida erros. Sempre verifique mecanicamente com -c.

# Ruim: comparar a olho (voce vai perder algo)
# Bom: fazer uma lista e verificar com -c
$ sha256sum -c SHA256SUMS

7-2. Um FAILED Causado por Espacos

Se o separador no arquivo de lista e um unico espaco, a linha esta malformada.

sha256sum: SHA256SUMS: 1 line is improperly formatted

Usar uma lista feita com sha256sum file > SHA256SUMS mantem o espacamento correto em dois.

7-3. Uma Lista Feita no Windows Nao Verifica

Arquivos do Windows usam \r\n (CRLF) como finais de linha, e o \r final pode causar problemas.

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

7-4. Hashes Correspondem Mas os Arquivos "Parecem Diferentes"

Se apenas o nome do arquivo difere mas o conteudo e identico, o hash corresponde. Lembre-se que um hash olha apenas o conteudo -- nao o nome do arquivo ou timestamp.

8. Mini Exercicios: Aprenda Fazendo

Conclusao: Crie seu proprio arquivo e percorra o calculo, salvamento, verificacao e deteccao de corrupcao para fixar o conhecimento.

Lina: Tenho o conhecimento -- quero experimentar de verdade.
Veterano Linny: A melhor forma e criar um arquivo de teste e experimentar. Aqui estao tres exercicios.

Exercicio 1: Crie um arquivo com echo hello > a.txt e imprima seu hash SHA-256.

Mostrar Dica

Basta passar o nome do arquivo para o comando SHA-256.

Mostrar Solucao
$ echo hello > a.txt
$ sha256sum a.txt
5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03  a.txt

Exercicio 2: Salve a lista de hash de a.txt em SUMS e verifique com -c para ver OK.

Mostrar Dica

Salve com > SUMS, depois verifique com -c SUMS.

Mostrar Solucao
$ sha256sum a.txt > SUMS
$ sha256sum -c SUMS
a.txt: OK

Exercicio 3: Modifique a.txt, depois verifique novamente com -c e confirme que voce recebe FAILED.

Mostrar Dica

Adicione algo ao arquivo, depois execute -c SUMS novamente.

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

Quando o conteudo muda, a impressao digital muda e a verificacao se torna FAILED.

9. Templates Para Copiar e Colar

Conclusao: Os formatos padrao para calcular, salvar uma lista, verificar e comparar com um unico valor oficial estao prontos para copiar.

Templates de Checksum

# Impressao digital de um unico arquivo
sha256sum file

# Calcular hash de varios arquivos de uma vez
sha256sum *.iso

# Salvar uma lista
sha256sum *.iso > SHA256SUMS

# Verificar contra uma lista salva
sha256sum -c SHA256SUMS

# Mostrar apenas falhas
sha256sum -c --quiet SHA256SUMS

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

# Verificar contra um unico valor oficial
echo "<hash oficial>  file.iso" | sha256sum -c -

# Quando voce quer um hash mais forte
sha512sum file

O que nao fazer

  • Usar MD5 / SHA-1 para protecao contra adulteracao
  • Comparar 64 digitos a olho (verifique mecanicamente com -c)
  • Usar um unico espaco separador (sempre dois)

Proximas Leituras