Slacktrek Linux

um blog sobre linux, software livre, shell script e afins

O que é GPG - Um Guia Prático - Parte 1

17 de jul de 2024 — SlackTrekBr

Aqui damos início a uma série de artigos sobre o que é GPG? Qual a diferença entre GPG e PGP? Pra que serve? Onde vivem? O que comem? Onde consigo um? Preciso mesmo disso? Etc.

Podemos começar dizendo que GPG é um projeto de código aberto e um acrônimo para GNU Privacy Guard, ou Guardião de Privacidade GNU.
GNU, por sua vez, é um acrônimo recursivo que significa GNU's Not Unix, uma maneira de prestar homenagem às ideias técnicas do Unix, enquanto ao mesmo tempo diz que o GNU é algo diferente. Enquanto o PGP, ou Preatty Good Encryption, tem sua estrutura baseada no Open PGP, um protocolo sem fins lucrativos, onde o PGP é uma solução proprietária pertencente a Symantec.


Esta série de artigos tem como foco o GPG e conta inicialmente os seguintes tópicos:

Introdução

Como dissemos antes, GPG é uma implementação de código aberto do protocolo OpenGPG. É uma alternativa gratuita ap PGP, que foi desenvolvido em 1991 por Phil Zimmermann.

O PGP e o GPG são comumente utilizados para duas coisas:

  • Criptografia: proteger e-mails e arquivos para que ninguém mais, além do remente e o destinatário, possam ter acesso ao conteúdo das mensagens.
  • Assinatura: criar uma assinatura digital para documentos. É possível utilizar essas assinaturas em todos os e-mails enviados para que o destinatário tenha a certeza de que não houve uma adulteração no conteúdo do mesmo. O conteúdo de todo repositório das distribuições Linux também recebe esta assinatura via chave PGP para que os usuários tenham certeza de quem o download de pacotes não contenha nenhum agente mal intencionado, como vírus e malware.

PGP e GPG algumas vezes são intercambiáveis. Você pode que possui uma chave GPG ou PGP, uma vez que o protocolo que as gera é praticamente o mesmo, mudando apenas a forma como são chamados.

Instalando GPG

GPG já vem pré-instalado na maioria das distribuições Linux, mas caso a sua seja a exceção o comanda é bem simples:

  • Debian/Ubuntu/Linux Mint: sudo apt install gpg
  • Fedora/CentOS/RHEL/Rocky Linux: sudo dnf install gpg
  • Arch Linux: sudo pacman -S gpg
  • OpenSUSE: sudo zypper install gpg

Neste artigo iremos nos concentrar na versão 2.2/2.3. A versão legada, 1.x, não será discutida, pois a maioria das distros modernas são embarcadas com a versão 2.x.

OBS: Se você for usuário de Slackware vale lembrar que ambas as versões acompanham esta distribuição, sendo a versão 2.x executada pelo comando gpg2, enquanto o comando gpg executa a versão 1.x. Aqui assumiremos o comando gpg como padrão para a versão 2.x, mas tenha em mente que no Slackware 15.0 o comando para esta versão é o gpg2.
  • Usuário de macOS fazem uso do gpgtools para instalar o GPG.
  • Usuários Windows podem instalar o pacote GPG4Win. (Mas falando sério, você não deveria estar usando o Windows caso se preocupe com sua privacidade)

Verificando a Versão

Para confirmar a versão instalada do GPG acionamos o emulador de terminal na interface gráfica e digitamos:

gpg --version

Como podemos ver estou utilizando a versão 2.2.27 do GPG. Também vemos que o arquivo de configuração encontra-se na pasta .gnu dentro da pasta raiz do usuário slacktrek. É lá onde serão guardadas as informações de nossas chaves privadas e públicas. E por fim temos a informação de quais algorítimos são suportados.

Se olharmos com cuidado veremos que esta versão suporta inclusive a hash insegura SHA1. Embora ainda suportada ela é considerada obsoleta e não recomendada para criação de chaves de assinatura digitais.

Criação do Par de Chaves

Digite o comando abaixo para criar seu par de chaves. O GPG por padrão utiliza a chave RSA, mas usaremos o parâmetro --expert para nos fornecer opções mais avançadas e seguras para a criação das chaves (ED25519).

gpg --expert --full-gen-key
Dica: Se for gerar o par de chaves no console, ou seja, fora do ambiente gráfico, você deve usar o comando: gpg --expert --pinentry-mode=loopback --full-gen-key em seu lugar.

Ele irá perguntar que tipo de chave você deseja criar. Existem 14 opções. Escolha a opção que diz ECC and ECC, no caso a de número 9.

Agora ele pergunta que curva elíptica você deseja. Escolha a primeira para criar a chave com ED25519

Em seguida ele quer saber por quanto tempo essa chave deve ser considerada válida. Dois anos é um tempo razoável. E você sempre pode estender o prazo de validade da chave. Então ele pergunta se as informações estão corretas. Note que a resposta padrão é N (não). Pressione 'y' e Enter para confirmar caso esteja tudo certo.

Agora somos solicitados a entrar com as informações de identificação da chave. Esse passo é importante porque essas informações serão incluídas na chave a ser criada. É uma forma de indicar a quem ela pertence. O endereço de e-mail é um identificados único da pessoa. O campo de comentário pode ser deixado em branco. Na verdade é recomendável nunca preencher o campo de comentário. Digite 'o' e Enter para aceitar.

Por fim é solicitado uma senha para proteger sua chave privada.

Após confirmar, seu par de chaves será criado em poucos instantes.

Podemos ver na imagem acima que a chave GPG foi criada com um identificador único para ela (C27F54B6361DFEDB). Este identificador está em formato hexadecimal. Quando alguém quiser fazer o download de sua chave pública, ele pode usar seu e-mail ou esse valor hexadecimal como identificador único.

O GPG criou também um certificado de revogação.

Sua chave privada fica armazenada na pasta ~/.gnupg/private-keys-v1.d/. Há dois arquivos com a extensão .key. Você jamais deve compartilhar sua chave privada. Se sua chave privada for comprometida você deverá utulizar o certificado de revogação para revogar sua chave pública, o que significa dizer para o resto do mundo que aquela chave pública não deverá ser utilizada, pois teve sua segurança comprometida. Sugiro que abra este certificado de revogação em um editor de texto para ver o que tem dentro.

A ID da chave pública (C27F54B6361DFEDB) corresponde aos últimos 16 bits da impressão digital da chave. A impressão digital é a hash da sua chave pública.

Exportando a Chave Pública

Para que outras pessoas possam enviar mensagens criptografadas para você elas precisam ter acesso a sua chave pública. Mas apenas você pode descriptografar as mensagens através da sua chave privada.
Use o seguinte comando para exportar sua chave pública. O parâmetro --armor indica para o gpg que o arquivo a ser criado deve seguir o padrão ASCII. Caso contrário o arquivo criado será um binário. O user-id aqui se refere ao seu endereço de e-mail usado na chave.

gpg --armor --export user-id > pubkey.asc

Sua chave pública foi escrita no arquivo pubkey.asc. Você pode dar este arquivo para que qualquer pessoa lhe envie mensagens criptografadas, seja por e-mail ou quaisquer outras formas de texto (abordaremos como em próximos artigos).

Exportando a Chave Privada

Através do seguinte comando você pode exportar sua chave privada:

gpg --export-secret-keys --armor user-id > privkey.asc

A chave privada foi escrita no arquivo privkey.asc.

Proteção da Chave Privada e do Certificado de Revogação

Sua chave privada deve ser mantida em um lugar seguro, como um pendrive criptografado e jamais em um serviço de nuvem. Trate-o como a chave da sua casa. Jamais a compartilhe com outra pessoa. Lembre-se da senha que utilizou na sua criação, caso contrário você não será capaz de descriptografar as mensagens geradas através da chave pública.

Você também deve manter seu certificado de revogação em segurança. Caso alguém mal intencionado tenha acesso ao seu certificado de revogação ele poderá revogar seu par de chaves e criar um outro par falso para interceptar sua mensagens.

Próximo Passo

Na parte dois desta série de artigos veremos como fazer o upload de sua chave pública para um servidor de chaves para que outros possam importar sua chave e lhe enviar mensagens criptografadas. :)

Neste artigo veremos como criar um par de chaves GPG para proteger mensagens entre remetente e destinatário.
No primeiro artigo dessa série veremos como criar um par de chaves GPG para criptografar mensagens entre remetente e destinatário.
0.5

Tags: segurança, email, privacidade