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
-cpara 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/sha256sumvê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.
O que os checksums permitem
- Detectar se um arquivo baixado se corrompeu no caminhoUma sequência de texto que descreve a localização de um arquivo ou diretório. (detecção de corrupção)
- Confirmar que o conteúdo bate com a origem (detecção de troca / adulteração)
- Comparar se dois arquivos são idênticos byte a byte
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 filecalcula 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
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
- O
SHA256SUMSé criado no diretórioUm local que organiza arquivos. É a mesma ideia da "pasta" do Windows ou macOS. em que você está agora. Confira compwd >apaga o conteúdo e sobrescreve se o nome já existir. Nada pede confirmação (dobrado como>>, ele acrescenta no fim)- Para não perder uma lista importante, rode
ls SHA256SUMSantes para ver se ela existe - O
sha256sumnão roda no terminalUm programa interativo que interpreta os comandos digitados e os executa. virtual deste site. Execute-o no terminal da sua máquina - Pratique dentro do diretório vazio criado em "8. Mini Exercícios". Lá nada do que você já tinha pode quebrar
-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 listacompara os hashes registrados com os arquivos atuais:OKse batem,FAILEDse 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
FAILED, o arquivo está quebrado?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.
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.
Quando NÃO usar MD5 / SHA-1
- Verificar a autenticidade de um arquivo baixado (é o original?)
- Fazer hash de senhas
- Qualquer coisa de segurança, como assinaturas ou certificados
Nesses casos, use SHA-256 ou mais forte (sha256sum / sha512sum).
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
-c comparar. Ele nunca deixa passar um caractere.# 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.
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.
-c decidir. Foi exatamente o meu erro.Resumo em Três Linhas
Conclusão: Calcule com sha256sum, verifique com -c em vez dos olhos, e escolha SHA-256 contra adulteração.
sha256sum filecalcula a impressão digital do arquivo. Um hash não pode ser revertido- Não compare a olho. Deixe
sha256sum -c listadecidir - Use SHA-256 ou mais forte contra adulteração. MD5 / SHA-1 só para corrupção acidental