Trabalhando com OpenPGP: assinatura digital e criptografia

 
Introdução

PGP é um sistema de criptografia e assinatura digital de dados: documentos, mensagens, diretórios e partições de disco, que utiliza o padrão OpenPGP de chaves assimétricas: uma chave pública, compartilhada na Rede, e uma chave privada. A chave pública é utilizada para que qualquer pessoa criptografe um objeto e o envie ao possuidor de seu par privado, o que permitirá que ele, e somente ele, realize a descriptografia.

É possível enviar a chave pública às pessoas com quem se deseja trocar mensagens criptografadas (nunca envie a chave privada), ou ascendê-las a servidores de chaves online, para que a disseminam no mundo, o que é importante para ajudar a criar uma rede global de usuários confiáveis (existem, inclusive, protocolos para reconhecimento da fidelidade das informações pessoais de uma chave pública, feitas em encontros presenciais, para certificar os usuários. A coisa é tão importante que se exige que, ao se criar uma chave, um indivíduo utilize seu nome completo, tal e qual é exibido em seu passaporte).

Para além da criptografia, o sistema de chaves públicas também é interessante porque permite que as mensagens eletrônicas sejam assinadas, de modo a que o destinatário possa ter certeza de que o remetente realmente é quem diz ser. Esse sistema é muitíssimo utilizado internacionalmente para certificar a autoria de documentos.

Criando chaves PGP np Ubuntu:

Para criar as chaves PGP, abra o Terminal (Ctrl+Alt+T) e rode o comando abaixo:


gpg --gen-key

A partir da versão 2.1.15 do gnupg, presente no Ubuntu 16.10, o comando acima rodará um script de geração de chaves com criptografia de 2048 bits, que lhe fará algumas perguntas (se desejar maior controle da criação da chave, use o comando "gpg --full-gen-key " no lugar do comando acima):

  Nome completo: 
Entre com o seu nome verdadeiro, completo; como no passaporte. Isso é importante para a confiabilidade internacional na chave.
 Endereço de correio eletrônico:  
Entre com seu endereço eletrônico principal. Após apertar “enter”, o programa exibirá um resumo das informações inseridas e perguntará se você quer mudar alguma coisa, se confirma ou se deseja encerrar o programa.
 Change (N)ame, (E)mail, or (O)kay/(Q)uit?  
Após confirmar, e esperar alguns segundos, as chaves são geradas e chega a informação final:
 gpg: chave L37JAD68SK3M marcada como plenamente confiável  

gpg: directory '/home//.gnupg/openpgp-revocs.d' created gpg: revocation certificate stored as '/home//.gnupg/openpgp-revocs.d/350781AFB L37JAD68SK3MED57.rev'

chaves pública e privada criadas e assinadas.
No conjunto de informações acima, o nome da sua chave é L37JAD68SK3M.

Nota: no restante deste tutorial, esta chave será utilizada para preencher os códigos. Lembre-se que é um mero exemplo. Não esqueça de substituí-la pelo nome de sua chave.

O seu Ubuntu já possui um programa para geração e administração de chaves PGP. Chama-se “Seahorse”, e pode ser encontrado, no Dash do Unity sob o nome “Senhas e chaves”.

Você poderia ter utilizado o Seahorse para criar, graficamente, seu conjunto de senhas, mas como resolveu já ir fazendo na medida em que lia, fê-las pelo Terminal.

Alterando as chaves: incluindo outro endereço de e-mail

Endereço de correio eletrônico:  
Caso deseje, é possível alterar sua chave para incluir outros endereços de e-mail. Para tanto, rode o seguinte comando, no Terminal:

gpg --edit-key L37JAD68SK3M

Você vai entrar no modo de edição da sua chave. Digite:

adduid

Em seguida, responda às perguntas:
  Nome completo:
Endereço:
Comentário:
Muda (N)ome, (E)ndereço, or (O)k/(S)air?  
Será requerida sua senha.

Se quiser adicionar mais e-mails, rode o comando adduid novamente. Quando estiver satisfeito, digite “q” (sem as aspas), para invocar a saída, e digite “y”, para salvar as alterações.

Utilizando sua chave em e-mails:

.Thunderbird:
Para usar as chaves criptográficas para assinar, criptografar ou descriptografar e-mail no Thunderbird, é preciso instalar e habilitar a extensão Enigmail, que tanto pode ser instalada pela aba de complementos do programa, quanto pelos repositórios do Ubuntu, neste caso, com o comando a seguir, no Terminal:


sudo apt install enigmail

Abra o Thunderbird e siga o passo a passo de configuração. Super simples.

Ah, ele também permite a criação das chaves, portanto, escolha a opção de importação, já que você já criou as suas.

.Assinando as mensagens por padrão, no Thunderbird:

Para que seus e-mails sejam assinados por padrão no Thunderbird, o que facilita a vida bastante, abra o programa, acesse o menu “Editar”, escolha a opção “Configurações da Conta” e, para cada conta que deseje tenha suas mensagens assinadas por padrão, clique na opção “Segurança OpenPGP”, na coluna da esquerda, e marque as opções desejadas. Não esqueça de clicar em “OK” para salvar as alterações.


.Gmail no Firefox ou no Chrome:
Para assinar, criptografar ou descriptografar e-mail no webmail do Gmail, no Firefox ou no Chrome, é preciso instalar uma extensão livre chamada Mailvelope, diponível neste link. Instale a versão correspondente ao seu navegador.

O Mailvelope também permite a criação das chaves privada e pública, mas os salva numa pasta própria do navegador. Melhor, então, criar por outros meios, como pelo Terminal (como fizemos), usando o Seahorse ou o Enigmail. Todos eles criarão as chaves na mesma pasta padrão que usamos.


Para levar as chaves para o Mailvelope, no entanto, dá um certo trabalhinho. Ele até consegue importar a chave pública da Web, se você já a tiver compartilhado (veremos o compartilhamento mais à frente), mas a chave privada só pode ser importada em modo texto. Para isso, primeiro, temos que criar as versões em texto ACII das chaves.

 

 

No caso da chave pública, é realmente interessante gerar uma cópia em texto ASCII, especialmente porque é desejável participar de um evento de certificação de chaves (veja a nota final para um link com maiores explicações). Já no caso da chave privada, tome muito cuidado para não enviá-la por engano.

Para criar a chave pública, digite:

gpg --export -a L37JAD68SK3M > public.key

Para criar a chave privada, digite:

gpg --export-secret-key -a L37JAD68SK3M > private.key

Dica: deixe a chave pública gravada na raiz do diretório “.gnupg”, em /home/<seu-usuário>/.gnupg, e transfira a chave privada para o subdiretório “private-keys-v1.d”, em /home/<seu-usuário>/.gnupg/, para garantir que não enviará a chave errada, por engano.

.Configurando o Mailvelope:

De posse das chaves pública e privada, em ASCII, hora de introduzi-las no Mailvelope. Clique no ícone do cadeado, na barra de ferramentas, e, em seguida, em “Opções”. Na aba que se abre, selecione a opção “Importar chaves”. Em seguida, clique em “Selecione um arquivo de texto chave para importar” e, no menu que se abre, aponte para sua chave pública em texto ASCII, recém criada. Repita a operação com a chave privada.

Compartilhando a chave pública na rede:

Para que terceiros possam te enviar e-mails criptografados, e você possa descriptografá-los, é preciso que eles tenham acesso a sua chave pública (só à pública, hein? Nunca compartilhe sua chave privada). Você pode enviá-la para cada pessoa, uma a uma, ou pode – e deveria – ascendê-la à Rede.

O objetivo do sistema PGP é criar uma rede global de identidades confiáveis, dentro da Internet. Não há porque desconfiar de sua segurança, as chaves são duplas e assimétricas justamente para que uma seja divulgada e a outra seja mantida em segurança. A pública deve realmente ser disseminada, pois ela é usada para criar a criptografia, e você deseja que as pessoas tenham como lhe enviar mensagens embaralhadas, para que ninguém mais consiga lê-las. E ninguém conseguirá descriptografá-las mesmo, pois só você possui a chave certa para isso: a sua chave privada que, portanto, deve ser guardada com segurança.

Há várias formas de se compartilhar as chaves:

.No Thunderbird:

No menu de ferramentas, no alto, clique em “Enigmail” e selecione “Gerenciamento de chaves OpenPGP”. Na janela que se abre, clique com o botão direito em sua chave e selecione a opção “Enviar Chaves Públicas para Servidor de Chaves”.

.No Seahorse:

Clique em “Remoto/Sincronizar e publicar chaves...”, clique em “Servidores de chaves” e, na janela que se abre, selecione um servidor da lista e clique em “Concluído”. Por fim, clique em “Sincronizar”.

.No Terminal:
Para enviar ao servidor do Ubuntu, digite o comando:


gpg --send-keys --keyserver keyserver.ubuntu.com L37JAD68SK3M 


Se achar outros endereços de servidores, basta utilizá-los no comando acima, no lugar do servidor do Ubuntu.

Chaves de revogação:

A chave de revogação é importantíssima: se alguém tiver acesso à sua chave privada, a chave de revogação deve ser enviada aos servidores, pelos métodos acima, para revogar sua chave pública, com isso evitando que alguém use sua identidade maliciosamente na Rede.

Copie sua chave de revogação para um pendrive, deixe-o guardado em um local seguro e certifique-se de que uma ou duas pessoas de extrema confiança saibam sua localização, e como utilizá-la. Assim, se algo lhe acontecer, sua chave privada poderá ser revogada e ninguém poderá assumir sua identidade.

Para criá-la, use o seguinte comando, no Terminal:

gpg --output revoke.asc --gen-revoke L37JAD68SK3M

Siga as instruções do assistente de criação.

Revogando uma chave comprometida:

Para revogar sua chave, é preciso importar a chave de revogação criada acima, com o comando:

gpg --import revoke.asc L37JAD68SK3M

Isso vai substituir sua chave GPG pela chave revogada. Agora, faça o upload de sua chave de revogação para a Rede. Aqui um exemplo de upload para o servidor do Ubuntu:

gpg --keyserver keyserver.ubuntu.com --send-key L37JAD68SK3M

Fazendo backup de suas chaves:

É mais simples que você pensa: copie a pasta com as chaves para um pendrive, guarde-o em local secreto e seguro. Só um detalhe: tendo em vista a importância da chave de revogação, o realmente ideal seria gravá-la em um pendrive próprio, separada das demais, e guardar os dois pendrives em locais diferentes, compartilhando o local da chave de revogação com pessoas de confiança, como explicado acima.

Outros comandos úteis:

Listar as chaves públicas:


gpg --list-keys

Listar as chaves privadas:


gpg --list-secret-keys

Em vez de usar o primeiro comando deste tutorial para criar as chaves, se quiser um comando com mais controle das etapas de criação, use:


gpg --full-gen-key

Nota final: para mais detalhes sobre o sistema PGP, e mais comandos, dê uma olhada nesta página  da documentação do Ubuntu, e nesta página de dicas.