Como criar e assinar commits usando chaves GPG ou chaves SSH para autenticidade
Garanta a integridade do seu código e prove a autoria de cada alteração em repositórios Git usando chaves GPG ou chaves SSH. Entenda o processo prático passo a passo.
Resumo
- Assinaturas digitais blindam o repositório contra falsificação de identidade e commits fraudulentos
- Chaves GPG oferecem um ecossistema maduro de criptografia baseado em rede de confiança
- Chaves SSH simplificam o fluxo ao reaproveitar credenciais já utilizadas para autenticação em servidores
- A interface visual do GitHub e GitLab exibe um selo verde de verificação em commits assinados corretamente
- Configurações incorretas de e-mail local invalidam a assinatura e exigem revisão atenta do escopo Git
O problema da identidade no controle de versão moderno
Trabalhar com desenvolvimento de software em equipe exige confiar na procedência das linhas de código que entram no repositório central. No Git, o sistema de controle de versão mais popular do mundo, o autor de um commit é definido por campos de texto simples contendo nome e endereço de e-mail. Na prática, isso significa que qualquer pessoa pode alterar a configuração local da máquina e fingir ser outra pessoa ao enviar código, inserindo vulnerabilidades silenciosas sem que o sistema a saúde do projeto aponte um alerta imediato.
Para resolver essa brecha de segurança, a comunidade adotou o conceito de assinatura criptográfica. Uma assinatura digital funciona como um carrego de cera inviolável ou uma assinatura de cartaz em um documento legal: ela amarra matematicamente a identidade do desenvolvedor ao conteúdo exato daquele commit específico. Quando plataformas de hospedagem como GitHub ou GitLab recebem esse material, elas verificam a assinatura usando uma chave pública cadastrada e exibem um selo verde de garantia, atestando que o código veio exatamente de quem diz ter enviado.
Entendendo a criptografia por trás de GPG e SSH
Existem dois caminhos principais para realizar essa tarefa de autenticação: o sistema GPG (GNU Privacy Guard), que é o padrão tradicional de criptografia de chaves, e o uso de chaves SSH (Secure Shell), amplamente conhecidas por permitirem conexões seguras com servidores remotos. Ambas as abordagens utilizam pares de chaves assimétricas, compostos por uma chave privada que deve permanecer estritamente secreta no computador do desenvolvedor e uma chave pública que é compartilhada publicamente com o mundo.
A principal diferença prática entre as duas opções reside na complexidade operacional e na experiência diária. O ecossistema GPG é extremamente robusto e gerencia conceitos como redes de confiança e expiração de chaves, mas possui uma curva de aprendizado íngreme e comandos por vezes confusos. Por outro lado, as chaves SSH ganharam suporte nativo recente no Git, permitindo que os desenvolvedores reaproveitem a mesma chave que já utilizam para clonar repositórios via SSH para assinar seus commits, reduzindo o atrito diário.
Gerando e configurando chaves GPG no ambiente local
Se você optar pelo caminho tradicional do GPG, o primeiro passo é gerar o seu par de chaves no terminal do seu sistema operacional. Na prática, você precisa solicitar ao utilitário do GPG que crie uma nova chave usando algoritmos modernos e seguros, associando-a ao mesmo e-mail cadastrado na sua conta do Git.
- Abra o terminal e execute o comando de geração de chave padrão com algoritmo RSA ou ECC.
gpg --full-generate-key - Selecione o tipo de chave desejado (geralmente a opção padrão para RSA e RSA) e defina o tamanho para 4096 bits para garantir alta segurança.
- Informe seu nome real, o endereço de e-mail correspondente ao seu perfil no GitHub ou GitLab e adicione uma frase secreta forte para proteger o uso da chave privada.
- Liste as chaves existentes para copiar o identificador alfanumérico longo da sua chave recém-criada.
gpg --list-secret-keys --keyid-format LONG - Exporte a chave pública correspondente no formato ASCII para colá-la nas configurações da sua plataforma de hospedagem favorita.
gpg --armor --export SEU_ID_DA_CHAVE_AQUI
Com a chave gerada e copiada, o próximo passo exige configurar o Git para reconhecer qual chave deve ser utilizada e habilitar a assinatura automática em todos os seus repositórios locais. Você faz isso informando o identificador da chave ao Git através de comandos de configuração global, garantindo que o sistema aplique a regra de forma transparente a cada novo trabalho salvo.
Utilizando chaves SSH para simplificar o fluxo de trabalho
Caso prefira evitar a gestão de chaves GPG, utilizar uma chave SSH existente para assinar commits representa uma alternativa elegante e moderna. Como a maioria dos engenheiros já utiliza chaves SSH para autenticar conexões com servidores remotos, o esforço de configuração inicial cai drasticamente, eliminando a necessidade de gerenciar múltiplos sistemas de credenciais na mesma máquina.
- Verifique se você já possui uma chave SSH ativa na pasta padrão do seu sistema operacional.
ls -la ~/.ssh - Caso precise criar uma nova chave específica para essa finalidade, execute o gerador definindo o algoritmo Ed25519 para máxima eficiência.
ssh-keygen -t ed25519 -C "[email protected]" - Configure o Git globalmente para informar que você deseja utilizar o método SSH em vez de GPG para as assinaturas.
git config --global gpg.format ssh - Defina qual arquivo de chave pública SSH deve ser o responsável por assinar os commits realizados no seu ambiente.
git config --global user.signingkey ~/.ssh/id_ed25519.pub - Ative a assinatura automática para todos os novos commits executados na sua máquina de desenvolvimento.
git config --global commit.gpgsign true
Validando e solucionando falhas comuns de assinatura
Após concluir a configuração, é fundamental testar se o mecanismo está funcionando corretamente antes de enviar código para produção. Crie um repositório de testes, faça uma alteração simples e utilize o comando de commit passando a flag de assinatura para verificar se o Git executa a operação sem erros e se a plataforma remota reconhece a autenticidade.
Um erro frequente ocorre quando o e-mail configurado no arquivo de configuração local do repositório diverge do e-mail associado à chave criptográfica. O Git rejeita a assinatura caso haja qualquer discrepância nesses dados de identidade. Manter os registros sincronizados e testar regularmente o status dos commits com o comando detalhado de listagem garante que sua cadeia de suprimentos de software permaneça íntegra e confiável.
Considerações finais sobre integridade de código
Adotar a assinatura de commits com GPG ou chaves SSH eleva o nível de maturidade técnica de qualquer projeto, seja ele pessoal ou corporativo. Essa prática protege a base de código contra ataques de falsificação e garante conformidade rigorosa em auditorias de segurança. Implementar esse padrão desde o início do desenvolvimento evita retrabalho e consolida uma cultura de engenharia baseada em confiança verificável e transparência absoluta.