Saltar al contenido principal

¿Qué son las llaves GPG?

Las llaves GPG (GNU Privacy Guard) son un método de verificación de identidad basado en criptografía que te permite firmar digitalmente tus commits y tags en Git. Esto proporciona una garantía criptográfica de que los cambios realmente provienen de ti y no han sido modificados por terceros.

¿Por qué usar llaves GPG?

🛡️ Verificación de Identidad

  • Autenticidad: Confirma que los commits realmente provienen del autor indicado
  • Integridad: Garantiza que el contenido no ha sido modificado después de ser firmado
  • No repudio: El autor no puede negar haber realizado los cambios

🏢 Cumplimiento Organizacional

  • Políticas de seguridad: Muchas organizaciones requieren commits firmados
  • Auditoría: Facilita el seguimiento y la auditoría de cambios en el código
  • Confianza: Mejora la confianza en el historial del repositorio

Diferencia entre SSH y GPG

AspectoSSH KeysGPG Keys
Propósito principalAutenticación para conexionesFirma de commits/tags
VerificaciónAcceso al servidorIdentidad del autor
VisibilidadGitHub muestra "Verified" si coincide SSH keySiempre muestra "Verified" para firmas válidas
ExpiraciónOpcionalRecomendada con fecha de expiración
RevocaciónSolo eliminar de la cuentaRevocación criptográfica completa

¿Cómo funcionan las llaves GPG?

🔐 Criptografía de Llave Pública

Las llaves GPG utilizan un sistema de par de llaves asimétricas:

Llave Privada

  • Se mantiene secreta y segura en tu computadora
  • Se usa para firmar tus commits y tags
  • Está protegida con una passphrase
  • Nunca debe compartirse

Llave Pública

  • Se puede compartir libremente
  • Se agrega a tu cuenta de GitHub/GitLab
  • Otros la usan para verificar tus firmas
  • Confirma que la firma proviene de tu llave privada

📝 Proceso de Firma y Verificación

  1. Al hacer commit: Tu llave privada firma el contenido del commit
  2. GitHub recibe: El commit incluye la firma digital
  3. Verificación: GitHub usa tu llave pública para verificar la firma
  4. Resultado: Si la verificación es exitosa, muestra "Verified" 🟢

Estados de Verificación en GitHub

Verified (Verificado)

  • El commit está firmado y la firma es válida
  • La llave pública está asociada a tu cuenta
  • La firma coincide con el contenido del commit

⚠️ Unverified (No verificado)

  • El commit está firmado pero la firma no puede verificarse
  • Posibles causas: llave revocada, expirada, o no asociada a la cuenta

No verification status (Sin verificación)

  • El commit no está firmado
  • Estado normal para commits sin GPG

🔄 Partially verified (Parcialmente verificado)

  • Ocurre cuando hay múltiples autores y solo algunos han habilitado "vigilant mode"
  • La firma es válida pero no todos los autores están verificados

Algoritmos Soportados por GitHub

GitHub soporta los siguientes algoritmos GPG:

  • RSA: Tradicional y ampliamente compatible
  • ElGamal: Para cifrado
  • DSA: Digital Signature Algorithm
  • ECDH: Elliptic Curve Diffie-Hellman
  • ECDSA: Elliptic Curve Digital Signature Algorithm
  • EdDSA: Edwards-curve Digital Signature Algorithm

Casos de Uso Principales

👨‍💻 Desarrolladores Individuales

  • Demostrar autenticidad de contribuciones
  • Protección contra suplantación de identidad
  • Mejores prácticas de seguridad

🏢 Equipos y Organizaciones

  • Políticas de seguridad: Commits firmados obligatorios
  • Compliance: Cumplimiento de regulaciones
  • Auditoría: Trazabilidad completa de cambios

🚀 CI/CD y Automatización

  • Firmar releases automáticamente
  • Verificar origen de deployments
  • Asegurar integridad en pipelines

Ventajas de GPG vs Alternativas

GPG vs SSH para Firma

  • GPG: Diseñado específicamente para firma digital
  • SSH: Más simple, pero menos funcionalidades de gestión

GPG vs S/MIME

  • GPG: Más común en desarrollo open source
  • S/MIME: Requerido en entornos empresariales específicos

Gestión del Ciclo de Vida

🔄 Expiración

  • Las llaves GPG pueden (y deben) tener fecha de expiración
  • Fuerza la renovación periódica de llaves
  • Commits anteriores mantienen su estado verificado

Revocación

  • Permite invalidar una llave comprometida
  • Los commits previos mantienen su estado verificado
  • Importante para gestión de seguridad

info

Persistencia de Verificación: Una vez que un commit es verificado en GitHub, mantiene su estado "Verified" incluso si la llave expira o se revoca posteriormente. Esto asegura un historial consistente del repositorio.

tip

Recomendación: Para la mayoría de usuarios, SSH keys son suficientes para autenticación. Usa GPG keys cuando necesites verificación de identidad para commits o cuando tu organización lo requiera.