Fundamentos de GPG: Criptografando, Descriptografando e Assinando Arquivos
O Que Voce Vai Aprender
- Como criptografar e descriptografar arquivos com
gpg - Quando usar modo de chave publica vs modo de senha (simetrico)
- Como assinar arquivos e verificar contra adulteracao
Resumo Rapido
- Proteger com uma senha que voce compartilha ->
gpg -c(simetrico / modo de senha) - Enviar para alguem usando a chave publica dessa pessoa ->
gpg -e -r <destinatario>(modo de chave publica) - Provar que um arquivo nao foi alterado ->
gpg -b(assinatura destacada)
Pre-requisitos
- SO: Ubuntu / familia Debian (
apt install gnupg). Incluso por padrao na maioria das distros. - O nome do comando e
gpg(GnuPG 2.x assumido).
O que e GPG?
Conclusao: GPG e a implementacao GnuPG do OpenPGP. Criptografia torna dados ilegiveis; assinatura detecta adulteracao.
GPG (GnuPG, GNU Privacy Guard) implementa o padrao OpenPGP (RFC 4880). Ele faz duas coisas principais:
- Criptografar / descriptografar: manter o conteudo longe de terceiros
- Assinar / verificar: provar quem criou um arquivo e que ele nao foi alterado
A criptografia vem em dois modos. O modo de chave publica criptografa com a chave publica do destinatario, de forma que apenas a chave privada dele possa descriptografar. O modo de senha (simetrico) usa uma unica passphrase para criptografia e descriptografia. Comecamos com o modo de senha porque nao requer configuracao de chaves.
Como criptografar apenas com senha?
Conclusao: A opcao mais simples e
gpg -c. Criptografa com uma passphrase que voce digita e descriptografa com a mesma passphrase -- sem necessidade de par de chaves.
Nao e necessario criar chaves. Use -c (--symmetric) para criptografar com uma passphrase.
$ gpg -c secret.txt
Voce sera solicitado a digitar uma passphrase, e secret.txt.gpg (binario) e criado. O original permanece no lugar, entao exclua-o separadamente se nao precisar dele.
Descriptografe com -d (--decrypt).
$ gpg -d secret.txt.gpg
O conteudo e impresso na saida padrao. Para gravar em um arquivo, use -o.
$ gpg -o secret.txt -d secret.txt.gpg
Quando voce precisa de uma forma em texto que possa colar em email ou chat, adicione -a (--armor). Voce obtem secret.txt.asc, um formato ASCII (Base64).
$ gpg -c -a secret.txt
O modo de senha assume que voce pode entregar a passphrase de forma segura. Enviar o texto cifrado e a senha lado a lado no mesmo chat anula o proposito. Se a troca de chaves e dificil, use o modo de chave publica abaixo.
Como configurar o modo de chave publica?
Conclusao: Crie um par de chaves primeiro.
gpg --full-generate-keyproduz uma chave privada (sua) e uma chave publica (para distribuir).
O modo de chave publica usa um par: uma chave publica para criptografia e uma chave privada para descriptografia. Crie-o primeiro.
$ gpg --full-generate-key
Voce sera perguntado interativamente sobre tipo de chave, tamanho, expiracao, nome e email. Os padroes (RSA, 3072 bits ou maior) sao adequados. Por fim, defina uma passphrase. Esta protege a chave privada -- um papel diferente de uma senha de criptografia.
Liste suas chaves com:
$ gpg --list-keys # chaves publicas $ gpg --list-secret-keys # chaves privadas
A longa string hexadecimal e o ID da chave / fingerprint. Voce a usa para especificar destinatarios posteriormente.
Como compartilhar sua chave publica?
Conclusao: Exporte sua chave publica como texto com
gpg --export -ae envie-a. O outro lado importa comgpg --import.
Para permitir que alguem criptografe para voce, forneca sua chave publica. Adicione -a ao --export para torna-la texto.
$ gpg --export -a "you@example.com" > my-pubkey.asc
Eles importam:
$ gpg --import my-pubkey.asc
Nunca compartilhe sua chave privada (--export-secret-keys). Sempre distribua a chave publica (--export). Uma chave privada vazada permite que outros descriptografem seu texto cifrado e forjem assinaturas em seu nome.
Como criptografar e descriptografar com chave publica?
Conclusao:
gpg -e -r <destinatario>criptografa com a chave publica do destinatario. Apenas esse destinatario pode descriptografar.
Depois de importar a chave publica do destinatario, criptografe com -e (--encrypt) e -r (--recipient).
$ gpg -e -r "friend@example.com" report.pdf
Isso cria report.pdf.gpg, que apenas o detentor da chave privada de friend@example.com pode descriptografar. Ele executa:
$ gpg -d report.pdf.gpg > report.pdf
Para poder ler voce mesmo depois, adicione-se como destinatario tambem (-r pode ser repetido).
$ gpg -e -r "friend@example.com" -r "you@example.com" report.pdf
Adicione -a para uma saida em formato texto.
$ gpg -e -a -r "friend@example.com" message.txt # message.txt.asc
Como verificar integridade com uma assinatura?
Conclusao: Para provar autenticidade sem ocultar o conteudo, assine em vez de criptografar.
gpg -bcria um arquivo de assinatura separado;--verifyo verifica.
Assinar e diferente de criptografar. O conteudo permanece legivel, enquanto a assinatura prova que foi feita pelo assinante e nao foi alterada. E comum para verificar a autenticidade de arquivos distribuidos.
A forma mais pratica e uma assinatura destacada. Use -b (--detach-sign) para criar um arquivo de assinatura separado do original.
$ gpg -b -a release.tar.gz
Isso cria release.tar.gz.asc. Distribua-o junto com o original. O destinatario verifica com --verify.
$ gpg --verify release.tar.gz.asc release.tar.gz
Uma linha Good signature significa que a verificacao foi bem-sucedida com a chave publica do assinante e o arquivo esta intacto.
Assinatura e criptografia podem ser combinadas: -s -e -r <destinatario> produz saida assinada e criptografada. --clearsign incorpora uma assinatura em texto legivel, frequentemente usado em corpos de email.
Mesmo uma Good signature nao confirma que a chave publica realmente pertence ao remetente. Verifique onde voce obteve a chave (um fingerprint de site oficial, etc.). A verificacao apenas prova "assinado com aquela chave."