Por Anónimo (no verificado) , 29 Abril 2026

Por qué firmar

Un commit firmado atestigua criptográficamente "este commit fue autorizado por el poseedor de esta llave, sin cambios desde la firma." Las firmas defienden contra suplantación y manipulación, y plataformas como GitHub muestran un badge "Verified" cuando la firma coincide con una llave configurada.

Configuración inicial

gpg --full-generate-key       # elegir RSA 4096 o Ed25519
gpg --list-secret-keys --keyid-format=long
git config --global user.signingkey 0xABCDEF1234567890
git config --global commit.gpgsign true
git config --global tag.gpgsign true

Exporta la llave pública y añádela a GitHub/GitLab/Gitea:

gpg --armor --export 0xABCDEF1234567890

Firmar bajo demanda

git commit -S -m "Cambio importante"
git tag -s v1.0.0 -m "Release 1.0.0"

Verifica un commit individual o todas las entradas:

git log --show-signature
git verify-commit <sha>
git verify-tag v1.0.0

GPG agent y pinentry

# ~/.gnupg/gpg-agent.conf
default-cache-ttl 28800
max-cache-ttl 86400
pinentry-program /usr/local/bin/pinentry-mac

Llaves hardware

YubiKey o tokens similares pueden albergar la llave de firma GPG, requiriendo un toque por commit.

WSL y SSH

Si firmas desde WSL o sobre SSH, configura el agent forwarding correctamente. Establece GPG_TTY=$(tty) en la inicialización de tu shell.

Errores comunes

Establecer commit.gpgsign true sin un agent funcional hace que cada git commit se cuelgue. Olvidar publicar tu llave pública en la plataforma deja badges "Unverified". Las llaves caducan; calendariza un recordatorio.

Verificar un push remoto

git push --signed