2020-05-19

Una característica relativamente desconocida y subutilizada de Git es la capacidad de firmar criptográficamente commits. Es una feature opcional que proporciona una forma para que el autor de un commit demuestre su autoría.
Utiliza la clave GPG del autor para dejar una firma en el commit que puede ser verificada posteriormente. Si eres usuario de Keybase , es muy fácil usar la clave GPG de Keybase para firmar tus commits de Git.
Después de que firmes tus commits, GitHub proporciona una interfaz agradable para verificar si los commits fueron firmados y por quién.
Git aceptará cualquier nombre y dirección de correo electrónico como autor de un commit, y GitHub también. Por lo tanto, si defines el autor en un commit como una dirección de email válida, parecerá que esa persona hizo el commit. Esto se debe a la naturaleza distribuida de Git, que permite a cualquiera hacer push de commits de otras personas. Sin embargo, desde el punto de vista de la seguridad, esto es un problema.
Desafortunadamente, no hay forma de impedir que alguien haga un commit con tu nombre y email. Sin embargo, Git soporta commits firmados criptográficamente usando una clave GPG. Esto permite que GitHub marque tus commits como Verificados cuando puede hacer coincidir tu email verificado con tu clave GPG. Esto no impedirá que alguien intente falsificar tus commits, pero garantizará que tus commits reales puedan ser verificados correctamente.
curl --remote-name https://prerelease.keybase.io/keybase_amd64.deb
sudo apt install ./keybase_amd64.deb
run_keybase
curl --remote-name https://prerelease.keybase.io/keybase_i386.deb
sudo apt install ./keybase_i386.deb
run_keybase -g # run without GUI; it is not supported on 32-bit Linux
Instala el Keybase.dmg disponible aquí
apt gnupg
brew install gnupg
A partir de aquí asumo que has creado cuentas en GitHub y Keybase.
GitHub proporciona una página de configuración para definir tu clave GPG; sin embargo, si envías tu clave GPG bruta de Keybase, probablemente contendrá una referencia de usuario de Keybase: username@keybase.io.
Esta no es una dirección de correo electrónico activa y, por lo tanto, GitHub no podrá verificarla. Tampoco coincide con la dirección de correo electrónico en tus commits. Entonces, necesitamos hacer algunas cosas más para que todo funcione.
Primero, exporta tus claves pública y privada de Keybase usando el comando:
keybase pgp export > keybase-public.key
keybase pgp export --secret > keybase-private.key
Durante el proceso de exportación, Keybase solicitará la contraseña de tu cuenta y te pedirá que definas una nueva contraseña para el archivo de clave privada.
En el siguiente paso, necesitas importar las claves en GPG:
gpg --allow-secret-key-import --import keybase-private.key
gpg --import keybase-public.key
El proceso de importación solicitará la contraseña que acabas de asignar a tu clave privada.
Ahora que has importado la clave en GPG, necesitas modificar la clave para incluir tu correo personal o el correo de la empresa. Si no has configurado nada, probablemente tu identificador es <username>@keybase.io, de lo contrario, es el correo que definiste en Keybase.
gpg --edit-key <username>@keybase.io
Este comando abre el prompt gpg> y, desde ahí, necesitarás ejecutar el comando adduid. Te pedirá tu nombre real (Real name) y dirección de correo electrónico (Email address), siéntete libre de dejar el comentario (Comment) en blanco.
gpg> adduid
Real name: <your name>
Email address: <your email>
Comment:
You selected this USER-ID:
"<your name> <your email>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?
Después de proporcionar tu nombre y correo, confirma con O y save para cerrar gpg>.
Hecho esto, puedes enviar tu clave actualizada de vuelta a Keybase.
keybase pgp update
En este momento, tu clave no es confiable para GPG y está marcada como desconocida (unknown).
Si estás siguiendo este tutorial justamente para firmar commits de git, es importante que, al auditar firmas (por ejemplo, con git log --show-signatures), no veas tus firmas marcadas como no confiables (untrustworthy).
Esto se puede hacer abriendo gpg> nuevamente usando gpg --edit-key <clave> y seleccionando la opción trust. Sugiero usar el nivel de confianza 5 = I trust ultimately, ya que es tu propia clave. Después de aplicar el cambio, usa save para cerrar.
Esta es la parte más fácil, ve a tu perfil de Keybase (https://keybase.io/<username>) y haz clic en la clave pública en la lista de identidades.
Ve a
Settings > SSH and GPG keys
en GitHub y agrégala con New GPG Key.
Finalmente, lo último necesario es indicarle al comando git que firme los commits con tu clave.
Usa la opción git config user.signingkey para especificar el ID de la clave para que git la use. Puedes obtener esto en la página de claves GPG de GitHub donde la agregaste, si no estás seguro de cuál es el ID.
También puedes requerir que Git firme todos los commits con la opción commit.gpgsign:
git config --global user.signingkey <ID de la Clave>
git config --global commit.gpgsign true

Cualquier commit futuro de este sistema/usuario será verificado, demostrando que tú eres el autor. La firma de commits de git no inhibirá la falsificación, pero proporcionará garantía de commits reales para que puedan ser verificados correctamente.