Cómo generar una clave GPG para firmar nuestros commits en Github

GPG es la sigla de GNU Privacy Guard, una implementación criptográfica que permite la transimisión de mensajes cifrados y verificación de identidad.

Por la manera en la que fue diseñado, git no verifica la información de autoría que le brindamos al configurar nuestro usuario local. Por este motivo podríamos agregar cualquier nombre / email en esos campos y al enviar código al remoto aparecer con el nombre de cualquier otro usuario.

En muchos contextos eso puede ser un problema, por eso GitHub nos permite verificar identidad a través de claves GPG. De este modo asociaremos una clave pública a nuestro mail verificado y podremos firmar cada commit asegurando nuestra identidad.

Github permite al dueño de cada repositorio elegir si permite commits no verificados, y en caso de que estos no esten permitidos la única alternativa que tendremos que contribuir a esos repositorios es firmando nuestros commits.

Generar una clave GPG

Requisitos: tener una cuenta de github con mail verificado

Si no tenés cuenta creala acá y si no sabés si tu mail está verificado podés revisar acá

1) Instalación

Primero debemos descargar e instalar la CLI de GPG → https://www.gnupg.org/download/, existen dos opciones, obtener el código fuente y generar un build o ir a la sección GnuPG binary releases y buscar el ejecutable del sistema operativo que se corresponda a nuestra computadora.

Al elegir la segunda opción encontramos un wizard de instalación y seguimos las instrucciones hasta el final

Antes de seguir con el resto de los pasos reiniciamos nuestra terminal (en caso de que esté abierta) para asegurarnos que los nuevos comandos instalados se encuentren disponibles

Verificamos que la instalación fue exitosa corriendo el comando

$ gpg -help

lo cual nos dará un listado de todas las opciones que tenemos para utilizar gpg

2) Generando la clave:

Desde la terminal ejecutamos el siguiente comando $ gpg --full-generate-key

al correr el comando nos va a preguntar que tipo de clave deseamos utilizar. En este caso presionamos la tecla enter lo cual dejará el valor por defecto (1) RSA and RSA

A continuación nos pedirá el largo deseado de la clave, en este caso debemos elegir 4096 ya que es el tamaño mínimo que nos exige GitHub

Al presionar nos preguntará si queremos que nuestra clave expire, otra vez iremos por la opción por defecto que en este caso es 0 = key does not expire

Una vez elegido el tiempo de expiración nos pedirá que confirmemos nuestra selección.

A continuación nos va a pedir algunos datos personales, el primero es nombre

seguido de mail

En este paso es importante utilizar un email verificado en GitHub. Si por motivos de seguridad no deseamos exponer nuestro mail real podemos utilizar la dirección de no reply que genera GitHub. La misma se ve similar a esta: 33739951+doomling@users.noreply.github.com y se puede obtener en esta página

A continuación nos pedirá un comentario que podemos dejar vacio y finalmente que confirmemos nuestros datos:

Una vez confirmados los datos nos solicitará una contraseña: ¡Que sea algo que no te vayas a olvidar!

Al finalizar, si todo salió como esperamos deberíamos ver en la terminal una confirmación de que la clave se creo correctamente.

3) Asociar la clave a nuestra cuenta de GitHub

Para agregar la clave a nuestra cuenta de github debemos imprimir su contenido, para eso ejecutamos el siguiente comando

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

Ahora necesitamos copiar el id de la llave que queremos utilizar, en el ejemplo de abajo el id es la secuencia de caracteres en color: 675F57B031D35FAB

plain text code
$ gpg --list-secret-keys --keyid-format=long
/Users/hubot/.gnupg/secring.gpg
------------------------------------
sec   rsa4096/

Una vez que tenemos el id vamos a correr el siguiente comando donde XXXXXXXXXXXXXXXX será el ID copiado en el paso anterior

gpg --armor --export XXXXXXXXXXXXXXXX

bash code
$ gpg --armor --export 

El resultado es nuestra llave pública impresa en la terminar, ahora para llevarla a GitHub vamos a hacer copy paste de todo su contenido desde -----BEGIN PGP PUBLIC KEY BLOCK----

hasta -----END PGP PUBLIC KEY BLOCK-----

En github.com navegamos hasta Settings > SSH and GPG keys, buscamos el título que contiene la palabra GPG y allí le damos click al botón para agregar una nueva

En el área de texto pegaremos el contenido de nuestra clave pública comenzando con

-----BEGIN PGP PUBLIC KEY BLOCK---- hasta -----END PGP PUBLIC KEY BLOCK-----

Le damos al botón de agregar y ¡listo! nuestra clave ya está lista para usar

4) Firmando commits

Habiendo realizado todos estos pasos solo nos queda probar nuestra nueva firma. Para firmar los commits podemos agregar la flag -S al commando git commit

git commit -S -m ‘esto es un commit’

Para no tener que agregar -S en cada commit podemos configurar la firma por defecto con el comando

git config --global commit.gpgsign true

Si recibimos algún error al momento de firmar los commits, lo primero que debemos confirmar es que el mail de nuestro usuario local de git se corresponda con el de la clave que acabamos de crear. Podemos verificar que mail estamos utilizando con el comando: git config --global user.email

Eso es todo, la próxima vez que realicemos un push al remoto deberiamos poder ver los commits verificados en la interfaz de github:

Y eso es todo, ¡Nos vemos en el próximo artículo!

Sigamos en contacto: suscribite a Sin códigos, mi newsletter quincenal. También podés seguirme en redes para estar al tanto de todo mi nuevo contenido