¿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
| Aspecto | SSH Keys | GPG Keys |
|---|---|---|
| Propósito principal | Autenticación para conexiones | Firma de commits/tags |
| Verificación | Acceso al servidor | Identidad del autor |
| Visibilidad | GitHub muestra "Verified" si coincide SSH key | Siempre muestra "Verified" para firmas válidas |
| Expiración | Opcional | Recomendada con fecha de expiración |
| Revocación | Solo eliminar de la cuenta | Revocació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
- Al hacer commit: Tu llave privada firma el contenido del commit
- GitHub recibe: El commit incluye la firma digital
- Verificación: GitHub usa tu llave pública para verificar la firma
- 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
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.
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.