Caso você baixe algum arquivo da internet ou receba-o diretamente de alguém, é possível verificar sua integridade para saber se ele é o mesmo que o original ou foi modificado. Se você é quem está enviando o arquivo, então isso irá garantir que o que você mandou é o que foi recebido. Mostraremos duas formas de fazer isso.
Arquivos assinados
Usaremos o GnuPrivacyGuard para assinar arquivos. É preciso ter previamente um par de chaves GPG. Seu par de chaves mais recente será usado por padrão para criar uma assinatura. Caso deseje assinar com outro usuário, utilize o marcado -u. Todos os comandos de assinatura requerem a senha de acesso à chave privada do usuário assinante.
Assinando
Digite o seguinte comando para criar uma assinatura separada do arquivo:
$ gpg -b arquivo
O resultado será a assinatura chamada:
arquivo.sig
Também é possível criar um novo arquivo assinado, dois em um:
$ gpg -s arquivo
O resultado será o seguinte:
arquivo.gpg
Para criar uma assinatura separada em texto claro, execute:
$ gpg --clearsign arquivo
O resultado será um arquivo de mesmo nome com a extensão .asc. O uso desse tipo de assinatura, entretanto, é limitado pois você pode apenas conferir se a assinatura é válida e não o arquivo em si. Utilize as duas primeiras opções.
Verificando
Para verificar um arquivo corretamente, é preciso ter a chave pública do remetente no seu conjunto de chaves públicas.
Se você recebeu o arquivo e sua assinatura separados, execute:
gpg --verify arquivo.sig arquivo
O resultado positivo será algo assim:
gpg: Signature made Sex 19 Mai 2017 14:52:06 -03 using RSA key ID #### gpg: Good signature from "usuario <usuario@email.org>" gpg: AVISO: Esta chave não está certificada com uma assinatura confiável! gpg: Não há indicação de que a assinatura pertence ao dono. Impressão da chave primária: #### #### #### ####
Caso você receba algo assim:
gpg: Signature made Fri 09 Oct 2015 05:41:55 PM CEST using RSA key ID 4F25E3B6 gpg: Can't check signature: No public key
Isso significa que ou você não possui a chave pública da pessoa ou a assinatura foi gerada por outra pessoa e o arquivo deve ser tratado como suspeito.
Se você recebeu um único arquivo com a terminação .gpg, então execute apenas:
$ gpg --verify arquivo.gpg
Comparando os CHECKSUMs
Outra forma de verificar a integridade de um arquivo é comparar o checksum ou hash (resumo) de SHA1 do arquivo recebido com o do original. A função SHA1 é uma função de dispersão criptográfica que gera um código de 160 bits que resume o arquivo.
Se você baixar o arquivo de instalação do GnuPG do site do GnuPG, execute:
$ sha1sum gnupg-2.0.30.tar.bz2
e compare o resultado com o hash anunciado no site. A cara do hash do SHA1 é a seguinte:
a9f024588c356a55e2fd413574bfb55b2e18794a gnupg-2.0.30.tar.bz2
Esse não é tido como um método tão seguro quanto a assinatura, dado que se alguém consegue alterar um arquivo em trânsito, é possível que também consiga alterar o hash anunciado no site. Mas mesmo assim, comparar os valores de checksum é muito mais confiável do que nada.
Exercícios:
Aqui vão dois exemplos para você exercitar o que aprendeu. Lembre-se de baixar as chaves públicas de quem estiver assinando o arquivo que você deseja baixar.