Cipherbase
BTC— ETH— XMR—
Segurança Entrada 02 de 25

Geração e Gerenciamento de Chaves GPG: Um Guia Prático

GPG é a implementação open-source do padrão OpenPGP, oferecendo ferramentas para criptografar arquivos, assinar releases de software e verificar a identidade de remetentes. Este guia aborda geração de chaves, boas práticas de gerenciamento e padrões de uso no dia a dia. Seja você iniciante em GPG ou querendo melhorar seu fluxo de trabalho, você encontrará passos práticos para construir uma configuração criptográfica durável.

Animated diagram of a message encrypted with a public key and decrypted with a private key.
Animated diagram of a message encrypted with a public key and decrypted with a private key.
Nesta página
  1. Entendendo o GPG e Seu Papel na Segurança
  2. Gerando Sua Chave GPG
  3. Arquitetura de Chaves: Chaves Primárias e Subchaves
  4. Exportando, Fazendo Backup e Distribuindo Chaves
  5. Uso Prático: Assinando, Criptografando e Verificando
  6. Rotação, Validade e Revogação de Chaves
  7. Melhores Práticas e Armadilhas Comuns
  8. Integrando o GPG em Fluxos de Trabalho
  9. Solução de Problemas e Depuração

O GNU Privacy Guard (GPG) é a implementação de código aberto do padrão OpenPGP, oferecendo privacidade criptográfica e autenticação para comunicação de dados. Seja para assinar releases de software, criptografar arquivos sensíveis ou verificar quem enviou algo, o GPG é uma ferramenta fundamental para quem leva segurança a sério. Este guia apresenta a geração, gerenciamento e padrões de uso no mundo real que vão ajudar você a construir uma identidade criptográfica durável e segura.


Entendendo o GPG e Seu Papel na Segurança

O GPG usa criptografia assimétrica — um par de chaves matematicamente vinculado, composto por uma chave pública e uma chave privada. Sua chave pública pode ser compartilhada livremente; outras pessoas a usam para criptografar mensagens destinadas a você ou verificar suas assinaturas. Sua chave privada permanece secreta, e você a usa para descriptografar mensagens ou assinar dados.

Este modelo está no centro da filosofia mais ampla do PGP encryption complete guide que o OpenPGP formaliza. O GPG o estende com uma rede de confiança (web of trust), permitindo que usuários atestem a identidade uns dos outros sem depender de uma autoridade certificadora central.

Na prática, você vai usar o GPG para assinar e verificar commits do Git, criptografar arquivos e e-mails, autenticar pacotes de software (isso é comum nos gerenciadores de pacotes Linux) e proteger comunicações sensíveis entre equipes.


Gerando Sua Chave GPG

Escolhendo o Tipo e Tamanho da Chave

A boa prática moderna é usar Ed25519 para chaves de assinatura e Cv25519 para subchaves de criptografia. Esses algoritmos de curva elíptica oferecem segurança robusta com chaves menores e operações mais rápidas que RSA-4096. Se você precisar de interoperabilidade com sistemas mais antigos, RSA-4096 ainda funciona bem.

gpg --full-generate-key

Selecione (9) ECC and ECC quando solicitado o tipo de chave, depois escolha Curve 25519. Defina uma data de expiração — um a dois anos é um padrão razoável. Uma data de validade força revisões periódicas e limita sua exposição caso a chave seja comprometida.

Definindo uma Senha Forte

Sua chave privada é criptografada no disco usando uma senha. Uma senha fraca é um ponto único de falha. Use uma senha aleatória de pelo menos 20 caracteres, idealmente gerada por um gerenciador de senhas. Essa senha é sua principal defesa em cenários de identity theft onde um invasor obtém acesso ao sistema de arquivos.

Verificando a Chave Gerada

gpg --list-keys --keyid-format LONG

Exemplo de saída:

pub   ed25519/3AA5C34371567BD2 2024-01-15 [SC] [expires: 2026-01-15]
      Key fingerprint = 1234 ABCD 5678 EF01 2345  6789 ABCD EF01 3AA5 C343
uid   [ultimate] Alice Example <[email protected]>
sub   cv25519/4BB6D45482678CE3 2024-01-15 [E] [expires: 2026-01-15]

As flags [SC] significam que a chave primária pode Assinar (Sign) e Certificar (Certify). A subchave [E] lida com Criptografia (Encryption). Essa separação é intencional e importante.


Arquitetura de Chaves: Chaves Primárias e Subchaves

Por Que Subchaves Importam

Uma configuração madura de GPG separa sua chave primária (usada apenas para certificação) das subchaves que você usa no dia a dia. Sua chave primária pode ficar offline ou em um token de hardware. Subchaves podem ser rotacionadas ou revogadas sem perder sua identidade. E uma subchave comprometida não afeta suas certificações na rede de confiança.

Para adicionar subchaves a uma chave existente:

gpg --edit-key [email protected]
gpg> addkey
# Selecione o tipo de chave, defina a expiração
gpg> save

Layout de Chaves Recomendado

Tipo de Chave Flag de Uso Armazenamento Validade
Chave primária Certificar (C) Offline / token de hardware 5+ anos ou nenhuma
Subchave de assinatura Assinar (S) Máquina diária 1–2 anos
Subchave de criptografia Criptografar (E) Máquina diária 1–2 anos
Subchave de autenticação Autenticar (A) Token de hardware 1–2 anos

Este layout é a base para usar o GPG com chaves de segurança de hardware. Para equipes que precisam de armazenamento de chaves baseado em hardware, o Hardware security keys: YubiKey guide cobre a movimentação de subchaves GPG para uma YubiKey, o que torna a extração da chave privada fisicamente impossível.


Exportando, Fazendo Backup e Distribuindo Chaves

Exportando Sua Chave Pública

# Exportação em formato ASCII para compartilhamento
gpg --armor --export [email protected] > alice_public.asc

# Enviar para um servidor de chaves
gpg --keyserver hkps://keys.openpgp.org --send-keys 3AA5C34371567BD2

Fazendo Backup da Sua Chave Privada

# Exportar chave privada — guarde isso offline, apenas em armazenamento criptografado
gpg --armor --export-secret-keys [email protected] > alice_private_backup.asc

# Exportar apenas as subchaves secretas (para configuração da máquina diária)
gpg --armor --export-secret-subkeys [email protected] > alice_subkeys.asc

Armazene a exportação completa da chave privada em um pen drive criptografado em um local fisicamente seguro. Nunca coloque em serviços de nuvem ou controle de versão. A exportação somente de subchaves é o que você importa na sua estação de trabalho para uso cotidiano.

Gerando um Certificado de Revogação

Faça isso imediatamente após gerar a chave, antes de precisar:

gpg --output alice_revoke.asc --gen-revoke [email protected]

Armazene junto com o backup da sua chave privada. Se sua chave for comprometida ou perdida, importar este certificado para servidores de chaves informa a todos que a chave não deve mais ser confiável.


Uso Prático: Assinando, Criptografando e Verificando

Assinando Arquivos e Commits do Git

# Assinatura destacada para um arquivo
gpg --armor --detach-sign release-v1.0.tar.gz
# Produz release-v1.0.tar.gz.asc

# Verificar uma assinatura
gpg --verify release-v1.0.tar.gz.asc release-v1.0.tar.gz

# Assinar um commit do Git
git config --global user.signingkey 3AA5C34371567BD2
git config --global commit.gpgsign true
git commit -S -m "Release assinado"

Commits do Git assinados aparecem no GitHub e GitLab com um selo "Verified", dando aos usuários downstream confiança de que os commits vieram do detentor legítimo da chave. Isso é uma defesa direta contra ataques à cadeia de suprimentos.

Criptografando e Descriptografando Arquivos

# Criptografar um arquivo para um destinatário
gpg --armor --encrypt --recipient [email protected] sensitive.txt
# Produz sensitive.txt.asc

# Criptografar para múltiplos destinatários
gpg --armor --encrypt \
  --recipient [email protected] \
  --recipient [email protected] \
  sensitive.txt

# Descriptografar
gpg --decrypt sensitive.txt.asc > sensitive_decrypted.txt

Comparação de Gerenciamento de Chaves

Operação Comando Observações
Listar chaves públicas gpg --list-keys Mostra todas as chaves no chaveiro
Listar chaves privadas gpg --list-secret-keys Confirma disponibilidade da chave privada
Importar uma chave gpg --import key.asc Adiciona ao chaveiro local
Deletar uma chave pública gpg --delete-key <fingerprint> Deve deletar chave secreta primeiro
Atualizar do servidor gpg --refresh-keys Obtém atualizações de revogação
Editar confiança da chave gpg --edit-key → trust Defina como ultimate para chaves próprias

Rotação, Validade e Revogação de Chaves

Lidando com Validade da Chave

Estender uma data de expiração antes que ela expire é simples e não invalidará assinaturas existentes:

gpg --edit-key [email protected]
gpg> expire
# Siga os prompts para definir nova validade
gpg> save

# Republique a chave atualizada
gpg --keyserver hkps://keys.openpgp.org --send-keys 3AA5C34371567BD2

Revogando uma Chave Comprometida

Se sua chave privada for exposta ou você suspeitar de comprometimento:

“Security is always excessive until it's not enough.”

— Robbie Sinclair
# Importar o certificado de revogação
gpg --import alice_revoke.asc

# Publicar a revogação
gpg --keyserver hkps://keys.openpgp.org --send-keys 3AA5C34371567BD2

A revogação se propaga pelos servidores de chaves e marca sua chave como não confiável. Usuários que atualizarem seus chaveiros verão o status revogado.

Rotacionando Subchaves

Rotacione subchaves regularmente, especialmente se forem usadas em máquinas compartilhadas ou expostas:

gpg --edit-key [email protected]
gpg> key 1  # Seleciona a primeira subchave
gpg> revkey  # Revoga a subchave selecionada
gpg> addkey  # Adiciona uma nova subchave
gpg> save

Distribua a chave pública atualizada. As assinaturas antigas permanecem válidas porque foram feitas com a subchave na época em que ela era válida.


Melhores Práticas e Armadilhas Comuns

Proteção da Chave Privada

  • Nunca compartilhe sua chave privada ou senha
  • Use criptografia de disco completo em qualquer máquina que armazene chaves privadas
  • Considere um token de hardware (YubiKey, Nitrokey) para subchaves críticas
  • Faça backup da chave primária offline em múltiplas localizações físicas

Gerenciamento de Senhas

Uma senha GPG fraca anula toda a segurança criptográfica. Se um invasor copiar seu arquivo de chave, a senha é a única defesa restante. Use um gerenciador de senhas para gerar e armazenar uma senha forte e única.

Erros de Publicação de Chaves

Servidores de chaves públicos não permitem deleção — apenas revogação. Nunca envie uma chave de teste ou temporária para keys.openpgp.org ou servidores públicos similares. Use servidores de chaves privados ou compartilhamento direto para testes.

Verificação de Impressão Digital

Ao importar a chave pública de alguém, sempre verifique a impressão digital através de um segundo canal (chamada de voz, mensagem segura, pessoalmente):

gpg --fingerprint [email protected]

Compare a impressão digital completa. Confiar em uma chave não verificada abre a porta para ataques man-in-the-middle.


Integrando o GPG em Fluxos de Trabalho

Assinatura de Commits no GitHub e GitLab

Ambas as plataformas reconhecem commits assinados com GPG quando você adiciona sua chave pública às configurações da conta. Isso fornece uma cadeia de verificação visível do autor do código até o deploy.

# Adicionar chave pública ao GitHub via CLI
gh gpg-key add alice_public.asc

Criptografia de E-mail com Thunderbird ou Mutt

Clientes de e-mail podem usar o GPG para criptografia e assinatura de mensagens end-to-end. O Thunderbird tem suporte integrado ao OpenPGP; o Mutt requer configuração via .muttrc:

set crypt_use_gpgme = yes
set crypt_autosign = yes
set crypt_replysign = yes

Gerenciamento de Segredos em Pipelines de CI/CD

Armazene chaves GPG como segredos criptografados em runners de CI. Use-as para assinar artefatos de build ou verificar dependências assinadas antes do deploy. Nunca registre chaves privadas em logs ou artefatos de build.


Solução de Problemas e Depuração

"gpg: decryption failed: No secret key"

Sua chave privada não está no chaveiro. Importe-a:

gpg --import alice_private_backup.asc

"gpg: signing failed: Inappropriate ioctl for device"

O agente GPG não consegue solicitar a senha. Defina a variável de ambiente:

export GPG_TTY=$(tty)

Adicione ao seu .bashrc ou .zshrc para permanência.

"gpg: WARNING: This key is not certified"

Você não marcou a chave como confiável. Edite e defina confiança:

gpg --edit-key [email protected]
gpg> trust
# Selecione "5 = I trust ultimately"
gpg> quit

Agente GPG Travando ou Não Respondendo

Reinicie o agente:

```bash gpgconf --kill gpg-agen

Perguntas Frequentes

O que é uma chave GPG e por que preciso de uma?

Uma chave GPG é um par de chaves criptográficas — uma pública e uma privada — usadas para criptografar, descriptografar e assinar dados ou mensagens. Você precisa de uma para verificar sua identidade, assinar seus commits Git ou trocar arquivos e emails com segurança com outras pessoas. Pense na sua chave pública como um cadeado que você compartilha livremente, e na sua chave privada como a única chave que o abre.

Como gero minha primeira chave GPG?

Execute gpg --full-generate-key no seu terminal e siga as instruções — você escolherá um tipo de chave (RSA 4096 é uma boa opção padrão), uma data de expiração e uma senha para proteger sua chave privada. A senha é importante: ela é a última linha de defesa se alguém tiver acesso ao seu arquivo de chave. Depois de gerada, você pode visualizar suas chaves com gpg --list-secret-keys.

O que devo fazer se perder minha chave privada GPG ou esquecer minha senha?

Infelizmente, não há como recuperar uma chave privada perdida ou senha esquecida — a criptografia é projetada para tornar isso impossível. Por isso você deve exportar e fazer backup da sua chave privada com segurança (gpg --export-secret-keys > backup.gpg) e guardá-la em um lugar seguro como um drive criptografado. Você também deve gerar um certificado de revogação antecipadamente com gpg --gen-revoke para poder invalidar publicamente a chave caso ela seja comprometida ou perdida.

Recursos em vídeo

Fontes & Leitura adicional