Assinatura de Commits com Chave GPG

Nilson R S Vieira
5 min readMar 18, 2022

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

--

--

Nilson R S Vieira

DevOps | DevSecOps | SRE | Plataform Engineer | Cloud Engineer