Assinatura de Commits com Chave GPG

Nilson VieiraNilson Vieira
4 min read

Para começar esse assunto vou começar como sempre gosto de fazer, com conceitos.

O que é uma Chave GPG?

Em resumo GPG (Gnu Privacy Guard), também conhecido como GnuPG é uma ferramenta de criptografia assimétrica, que usa um par de chaves, sendo uma pública e uma privada que são usadas para identificação do indivíduo.

Ele permite, por exemplo que qualquer pessoa que leia um email assinado possa verificar a autenticidade, garantido que o emissor é realmente quem está enviando.

O Objetivo é evitar que um terceiro possa interceptar e/ou modificar o conteúdo de uma mensagem.

Por que eu devo assinar meus commits?

Assim como as mensagens em e-mails os commits também podem ser assinados e recomenda-se fazer isso para validar que o código foi realmente feito por você.

Por exemplo, ao usar os comandos do git para enviar determinada informação à um repositório você consegue alterar o dono da informação.

git config — global user.email “fulano@gmail.com”
git config - -global user.name “Fulano da Silva”

Ao enviar, o commit vai nomeado com essas informações que podem mudar sempre que você preferir.

Quando você abre o commit ele está como unverified.

Fonte: GitHub

Gerando a Chave GPG

Certo, agora que temos o conceito é o motivo de usarmos, vamos a parte divertida, criar a nossa chave.

Nota: caso ainda não tenha instalado, o faça com o seguinte comando:

sudo apt update && sudo apt install gpg -y

Depois de instalado o pacote vamos executá-lo para criar a nossa chave:

gpg --full-generate-key

Deve aparecer um menu com algumas opções de tipos de chave, como vamos gerar para github, vamos seguir toda a recomendação deles. Então nesse caso vamos escolher a RSA e RSA (padrão) na opção 1.

Por favor selecione o tipo de chave desejado:
 (1) RSA e RSA (padrão)
 (2) DSA e Elgamal
 (3) DSA (apenas assinatura)
 (4) RSA (apenas assinar)
 (14) Existing key from card
Sua opção? 1

No próximo questionamento vamos escolher o tempo que vai durar a chave. indica-se o tempo que você estará no projeto ou algum de acordo com sua necessidade ou da sua empresa, no nosso caso vamos deixar sem expirar. Então vamos de opção 0.

RSA chaves podem ter o seu comprimento entre 1024 e 4096 bits.
Que tamanho de chave você quer? (3072) 4096
O tamanho de chave pedido é 4096 bits
Por favor especifique por quanto tempo a chave deve ser válida.
         0 = chave não expira
      <n>  = chave expira em n dias
      <n>w = chave expira em n semanas
      <n>m = chave expira em n meses
      <n>y = chave expira em n anos
A chave é valida por? (0)

Vai surgir uma pergunta de reafirmação, para saber se é isso mesmo que você quer e escolha S.

A chave não expira nunca
Está correto (s/N)? s

Na próxima etapa você deve preencher com seus dados e afirmar com O caso esteja tudo certo.

GnuPG precisa construir uma ID de usuário para identificar sua chave.Nome completo: Nil********ra
Endereço de correio eletrônico: nil*********ra@gmail.com
Comentário: 
Você selecionou este identificador de usuário:
 “Nil************ra <nil***********ra@gmail.com>”Muda (N)ome, ©omentário, (E)ndereço ou (O)k/(S)air? O

Pronto, sua chave será gerada e surgirá um texto com o ID da mesma, esse será usado mais a frente, então, guarde-o.

gpg: /home/nilson/.gnupg/trustdb.gpg: banco de dados de confiabilidade criado
gpg: chave ID_DA_CHAVE marcada como plenamente confiável
gpg: directory '/home/nilson/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/home/nilson/.gnupg/openpgp-revocs.d/A1B2C3D4E5F6G7H8I9J0A1B2C3D4E5F6G7H8I9J0.rev'chaves pública e privada criadas e assinadas.pub   rsa4096 2022-03-18 [SC]
      A1B2C3D4E5F6G7H8I9J0A1B2C3D4E5F6G7H8I9J0
uid                      Nilson R S Vieira <nil***********ra@gmail.com>
sub   rsa4096 2022-03-18 [E]

Caso tenha perdido, pode buscar novamente com comando:

gpg --list-secret-keys --keyid-format=long

Com o ID da chave em mãos vamos verificar o conteúdo da chave pública, pois usaremos este conteúdo para adicionar ao Github.

gpg --armor --export ID_DA_CHAVE

Deve aparece um conteúdo inciando e terminando assim

-----BEGIN PGP PUBLIC KEY BLOCK-----
<INFORMAÇÃO OCULTADA>
-----END PGP PUBLIC KEY BLOCK-----

Copie todo o conteúdo e vamos ao github.

No canto superior direito de qualquer página, clique na sua foto de perfil e, em seguida, clique em Configurações.

Fonte: GitHub

Na Seção “Access” na barra lateral, clique em SSH and GPG keys.

Clique em New GPG key (Nova chave GPG).

Fonte: GitHub

No campo “Key” (Chave), cole a chave GPG que você copiou.

Fonte: GitHub

Clique em Add GPG key (Adicionar chave GPG).

Fonte: GitHub

Para confirmar a ação, insira sua senha do GitHub.

Pronto! Agora só precisamos assinar nossos commits

Assinando Commits

Para assinar os commits precisamos apenas fazer os passos que já conhecemos, com a mesma sequência, como adicionar os arquivos/modificações, “comitar” e enviar.

git add . 
git commit -S -m "Comentário de Commit Assinado"
git push -o origin BRANCH

Feito isso ao olhar no Github você verá que seu commit está verificado como se fosse criado dentro da própria plataforma.

Fonte: GitHub

Referências

https://docs.github.com/pt/authentication/managing-commit-signature-verification/generating-a-new-gpg-key

https://docs.github.com/pt/authentication/managing-commit-signature-verification/adding-a-new-gpg-key-to-your-github-account

https://docs.github.com/pt/authentication/managing-commit-signature-verification/signing-commits

https://access.redhat.com/documentation/pt-br/red_hat_enterprise_linux/6/html/security_guide/sect-security_guide-encryption-using_gpg-creating_gpg_keys_in_kde

1
Subscribe to my newsletter

Read articles from Nilson Vieira directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Nilson Vieira
Nilson Vieira

Hi there 👋 I'm a DevOps Enginner working in São Luis - MA, Brazil. I have a degree in Information Systems from UNDB - Unidade de Ensino Superior Dom Bosco, a postgraduate degree in Information Security and a passionate by Technology. I had my first contact with a computer when I was 11 years old, in a community course in my neighborhood. At the age of 12, I was intentionally teaching at the same association, which brought me much pleasure and more knowledge. My first CLT job was at the age of 17 and also teaching at several computer schools in the capital of Maranhão. Linux is my Favorite OS, my favorite distribution is Pop!OS, but I work daily with MacOs and Windows OS. ;) 🏢 I'm currently working at Grupo Mateus ⚙️ I use daily: .sh, .js, .cpp, .go, .py, .jar, .tf, .yaml, .json 🌍 I'm mostly active within the DevOps Culture in My Organization 🌱 Reading all about Open Source, DevOps, Clean Architecture, Cloud Computing and more... ⚡️ Fun fact: I'm a huge fan of Harry Potter and Lord Of Kings and Geek Culture. ✨ My Website is nilsonvieira.com.br;