Fundamentos de GPG: Criptografando, Descriptografando e Assinando Arquivos

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-key produz 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 -a e envie-a. O outro lado importa com gpg --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

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 -b cria um arquivo de assinatura separado; --verify o 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."

Resumo: Folha de Referencia de Comandos

Conclusao: Modo de senha e -c, modo de chave publica e -e -r, assinatura e -b. Adicione -a para saida em texto e -d para descriptografar -- isso cobre o uso diario.

Objetivo Comando
Criptografar com senha gpg -c file
Criptografar com chave publica gpg -e -r <ID> file
Descriptografar gpg -d file.gpg
Criar um par de chaves gpg --full-generate-key
Exportar uma chave publica gpg --export -a <ID>
Importar uma chave publica gpg --import key.asc
Criar assinatura destacada gpg -b -a file
Verificar uma assinatura gpg --verify file.asc file