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.
Nesta página
- Entendendo o GPG e Seu Papel na Segurança
- Gerando Sua Chave GPG
- Arquitetura de Chaves: Chaves Primárias e Subchaves
- Exportando, Fazendo Backup e Distribuindo Chaves
- Uso Prático: Assinando, Criptografando e Verificando
- Rotação, Validade e Revogação de Chaves
- Melhores Práticas e Armadilhas Comuns
- Integrando o GPG em Fluxos de Trabalho
- 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
- GnuPG Documentation — Manuals and how-tos for GPG key management and encryption.
- Wikipedia: Pretty Good Privacy — Background on PGP, OpenPGP and the web of trust.
- EFF Surveillance Self-Defense — Threat-model based guides from the Electronic Frontier Foundation.
- EFF — Digital rights organisation with security explainers.
- OWASP — Open standards and cheat sheets for application security.
- NIST Cybersecurity Framework — Reference framework for identifying, protecting and responding to threats.
- CISA — US cybersecurity agency guidance for individuals and organisations.