Slacktrek Linux

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

GPG: Um Guia Prático - Parte 2

23 de jul de 2024 — SlackTrekBr

Cá estamos nós para a segunda parte desta série sobre chaves GPG.

Na primeira parte aprendemos sobre chaves GPG e como criá-las em um ambiente Linux. Agora veremos como gerenciar essas chaves, como fazer upload da chave pública para um servidor de chaves permitindo assim que outras pessoas possam encontrá-la para lhe enviarem mensagem criptografadas que apenas você possa descriptografar com sua chave privada, e como importar e verificar a chave pública de outras pessoas.


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

Exibindo Sua Chave Pública

Para exibir as informações da sua chave pública execute o seguinte comando em um terminal:

gpg --list-sigs user-id

Em seguida teremos como retorno:

Como podemos ver a ID da minha chave é C27F54B6361DFEDB e sua impressão digital DC40D72FAA89257FD8ECB11BC27F54B6361DFEDB.

Compartilhando Sua Chave Pública

Vale a pena lembrar que você não deve jamais compartilhar sua chave privada, apenas sua chave pública. Para facilitar este compartilhamento exitem vários servidores de chaves públicas ao redor do mundo. Para compartilhar sua chave pública com um servidor público basta executar o comando:

gpg --send-key key-id

Caso queira utilizar um outro servidor público você pode informar ao gpg inserindo o parâmetro --keyserver e o endereço do mesmo:

gpg --keyserver hkps://keyserver.ubuntu.com --send-key key-id

Ou indo diretamente ao site do servidor, se este possuir um.
Um deles é o próprio openpgp.org, que permite realizar o upload direto do arquivo da sua chave pública (como dado o exemplo da pubkey.asc).

Ao enviar sua chave pública para o servidor de chaves você receberá uma confirmação no e-mail cadastrado na chave, informado que ela foi recebida pelo servidor, mas que ainda não está disponível para consulta pública, sendo necessário confirmar que ela realmente lhe pertence.

Basta seguir os passos indicados no e-mail resposta. Isso garante que um impostor não use seu endereço de e-mail para se passar por você com uma chave falsificada.

Ao confirmar, sua chave estará disponível para que outros a encontrem.

Você pode verificar isso ao buscá-la através do comando:

gpg --search user-id

Aqui vimos que minha chave pública foi encontrada. Ao ser perguntado o que fazer eu digitei 'n' e ele saiu, pois a chave já estava no sistema. Se você não verificar seu e-mail sua chave não estará disponível para busca pelo endereço de e-mail.

Importando as Chaves de Outras Pessoas

Para enviar mensagens criptografadas para uma pessoa você necessariamente precisa da chave pública dessa pessoa. Para isso deveremos encontrar e importar a chave pública para seu chaveiro (local onde ficam armazenadas todas as suas chaves e dos contatos com quem deseja trocar mensagens seguras).
O arquivo de chaveiro fica localizado na sua pasta de usuário, dentro de ~/.gnupg/pubring.kbx.

Importando de um arquivo

Você pode solicitar ao contato que lhe envie um arquivo com sua chave pública, como no exemplo que demos na primeira parte dessa série de como exportar sua chave pública para um arquivo. Usando o comando:

gpg --import arquivo-da-chave-pública

Importando de um servidor

Caso seu contato tenha feito o upload da chave para um servidor de chaves, você pode fazer uma busca pelo ID do usuário (endereço de e-mail):

gpg --search user-id

Caso já saiba o ID da chave antecipadamente, pode importá-la direto com o comando:

gpg --recv-keys key-id

Para especificar a busca em um determinado servidor de chaves uso o parâmetro --keyserver:

gpg --keyserver hkps://keyserver.ubuntu.com --search user-id

Validando a Chave Pública

Ainda existe um problema ao se receber a chave pública de alguém: como garantir que ela realmente pertence aquela pessoa?
Ao importar a chave pública para seu chaveiro será possível validar a autenticidade da chave.

Funciona assim:

  1. Para visualizar impressão digital (ou fingerprint) de uma chave pública utilizamos o comando gpg --fingerprint user-id
  2. Você entra em contato direto com o dono da chave, seja pessoalemnte ou por outros meios, desde que você tenha a certeza de que está falando com o verdadeiro dono, e confirma com ele a assinatura da chave.
  3. Compare ambas as assinaturas. Se elas forem iguais, então a chave de fato pertence ao contato.
  4. Agora você já pode assinalar a chave como válida. Para tal use o comando gpg --sign-key key-id

Essa assinatura é uma hash da chave pública. Seu tamanho e bem menor do que o tamanho da própria chave, por tanto é bem mais simples de confirmarmos de que são iguais ou não. A figura abaixo mostra a saída do comando gpg --fingerprint user-id que exibe a hash da chave pública:

Após assinar a chave como confiável você pode, opcionalmente, realizar o upload dessa chave para um servidor de chaves. Isso informa ao servidor de chaves de que você confia na chave chave pública dessa pessoa, assim sendo outros terão mais confiança nessa chave pública.
Para enviar a chave uso o comando:

gpg --send-key key-id
Lembrete: A diferença entre key-id e user-id é que a primeira é uma hash da chave pública - entenda isso como um "resumo", pois a chave pública é composta por várias linhas de caracteres - e a segunda é o endereço de e-mail associado a chave pública. Abaixo vemos ambas, sendo que marcamos apenas os últimos 16 caracteres da id da chave, que pode ser usada também para simplificar o processo, embora toda a id seja o ideal.

Listar as Chaves do Seu Chaveiro

Tanto a chave pública quanto a chave privada devem possuir o mesmo key-id.
Você pode confirmar isso solicitando as informações do seu próprio par de chaves com:

Para sua chave pública:

gpg --list-key

Como resposta temos:

----------------------------------
pub   ed25519 2024-07-17 [SC] [expira: 2026-07-17]
      DC40D72FAA89257FD8ECB11BC27F54B6361DFEDB
uid           [final] Slacktrek da Silva <[email protected]>
sub   cv25519 2024-07-17 [E] [expira: 2026-07-17]

Para sua chave privada:

gpg --list-secret-keys

Para listar todas as aches com assinatura:

gpg --list-sigs

Como resposta temos:

----------------------------------
pub   ed25519 2024-07-17 [SC] [expira: 2026-07-17]
      DC40D72FAA89257FD8ECB11BC27F54B6361DFEDB
uid           [final] Slacktrek da Silva <[email protected]>
sig 3       C27F54B6361DFEDB 2024-07-17 Slacktrek da Silva <[email protected]>
sub   cv25519 2024-07-17 [E] [expira: 2026-07-17]
sig         C27F54B6361DFEDB 2024-07-17 Slacktrek da Silva <[email protected]>

Para deletar uma chave use:

gpg --delete-key key-id

Gerenciando as Chaves com Seahorse

Se você for usuário do desktop GNOME no Linux então poderá usar o Seahorse para gerenciar suas chaves. Ele é uma ferramente gráfica que permite o gerenciamento e uso de chaves de criptografia, senhas e certificados. O KDE possui uma ferramente semelhante chamada KGph.

Ao abrirmos o Seachorse (em português está listado como Senhas e Chaves) temos essa interface:

Antes de utilizá-lo precisamos configurar o servidor de chaves. Vá no menu com três linhas horizontais e selecione Preferências.

Aqui no nosso exemplo vemos que existem dois servidores de chaves já configurados:

  • ldap://keyserver.pgp.com
  • hkps://keys.openpgp.org

Caso não haja servidores configurados no gerenciador pode adicionar um dos citados.

Para importar uma chave de um servidor de chaves clique novamente no menu com as três linhas e selecione Localizar chaves remotas.

Entre com o e-mail do contato e faça uma busca.

Aqui vemos que minha chave está disponível para download no servidor de chaves.

Como ele já está no meu chaveiro não preciso importá-lo.
Se for a chave de outra pessoa você pode clicar no botão de importar para que a mesma seja adicionada ao seu chaveiro.

Por padrão o Seahorse exibe apenas as suas chaves. Para exibir outras chaves use a opção Mostra todos.

Ao clicar na chave de alguém e selecionar Propriedades vemos a impressão digital (fingerprint) e o ID da chave.
Lembrando que é com essa impressão digital, ou com o ID da chave, que você deve comparar com a do seu contato para confirmar que são idênticas.

Se ambas as digitais conferem você pode assinar a chave como confiável.

Para assinar chaves através da linha de comando execute:

gpg --edit-key user-id

No prompt que se abre digite trust, escolha como desejar marcar esta chave e depois save. Com isso a chave passa a ser confiável de acordo com sua escolha.
Para sair digite quit.

Por favor decida quanto você confia neste usuário para
verificar corretamente as chaves de outros usuários
(olhando em passaportes, checando impressões digitais
de outras fontes...)

     1 = Eu não sei ou nem direi
     2 = Eu NÃO confio
     3 = Eu tenho pouca confiança
     4 = Eu confio totalmente
     5 = Eu confio ao extremo
     m = voltar ao menu principal

Como Alterar o Prazo de Validade das Chaves

É sempre uma boa prática colocar um prazo de validade em suas chaves. Mas por que? Imagine se alguém tem acesso a sua chave privada, ou você simplesmente perce acesso a ela. Você fica impossibilitado de descriptografar as mensagens enviadas a você. Por estes motivos é bom deixar informado na chave para que as pessoas não utilizem esta chave após o período de validade estipulado na mesma.

Para estender o período de validade de uma chave execute o comando:

gpg --pinentry-mode=loopback --edit-key user-id

Seleciona a chave primária:

gpg> key 0

Mude o prazo de validade:

gpg> expire

Em seguida será solicitado a senha da chave privada.

Agora seleciona a subchave:

gpg> key 1

Mude o prazo de validade:

gpg> expire

Um mesmo menu será apresentado. Selecione o novo prazo de validade e salve as alterações.

gpg> save

Agora só resta atualizar sua chave pública no servidor de chaves com:

gpg --send-key key-id

O servidor de chaves irá substituir sua chave anterior automaticamente pela nova chave.

Como Usar o Certificado de Revogação

Caso sua chave pública seja comprometida ou perdida além de qualquer esperança em reavê-la, você pode gerar um novo par de chaves e com o certificado de revogação informar a todos com sua chave pública de que ela se tornou inválida e deve ser descartada.

No Linux o certificado de revogação fica armazenado dentro de ~/.gnupg/openpgp-revocs.d/ na pasta de usuário.
Para gerar um novo certificado de revogação execute o comando:

gpg --output revocation.rev --gen-revoke key-id

Agora importe o arquivo gerado (revocation.rev) para seu chaveiro:

gpg --import revocation.rev

Basta agora fazer o upload para o servidor de chaves

gpg --send-key key-id

O servidor de chaves irá remover seu e-mail da lista de endereços em seu banco de dados. Outras pessoas ainda poderão buscar essa chave pela sua key-id, mas ao importar para o chaveiro será informada que a mesma foi revogada.

Próximo Passo

Na parte três dessa série veremos como a criptografia funciona e como proteger mensagens em arquivos de texto simples para que somente o destinatário consiga lê-las.


Na parte 2 desta série de artigos veremos como compartilhar sua chave pública com o mundo.
Na parte 2 desta série de artigos veremos como compartilhar sua chave pública utilizando um servidor de chaves e como importar chaves de terceiros.
0.5

Tags: segurança, email, privacidade