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
-cpara 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/sha256sumvem 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.
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 filecalcula 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
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.
-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_listacompara hashes registrados com os arquivos atuais:OKse corresponderem,FAILEDse 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
FAILED, isso significa que o arquivo esta quebrado?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.
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.
Quando NAO usar MD5 / SHA-1
- Verificar a autenticidade de um arquivo baixado (e genuino?)
- Fazer hash de senhas
- Qualquer coisa relacionada a seguranca como assinaturas ou certificados
Para estes, use SHA-256 ou mais forte (sha256sum / sha512sum).
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.
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)