Criptografía: Conceptos Fundamentales e Implementación con GPG
Resumen de una línea
La criptografía (escritura secreta) protege información mediante cifrado simétrico, asimétrico y firmas digitales, con GPG como herramienta open-source práctica para implementar cifrado, firmas y gestión de claves.
¿Qué es Criptografía?
Criptografía viene de dos palabras:
- Cripto = secreto
- Grafía = escritura
Es la disciplina que permite encriptar mensajes para que solo destinatarios autorizados puedan leerlos.
Flujo Básico
Mensaje original (plaintext)
↓
Algoritmo de cifrado + clave
↓
Mensaje cifrado (ciphertext)
↓
Algoritmo de descifrado + clave
↓
Mensaje original recuperado
Dos Paradigmas de Criptografía
1. Criptografía Simétrica
Una sola clave compartida para cifrar y descifrar.
Persona A Persona B
↓ ↓
Clave secreta común (ej: "mi_contraseña_123")
↓ ↓
Cifra mensaje Descifra mensaje
Ventajas:
- ✅ Muy eficiente (rápida, bajo consumo CPU)
- ✅ Excelente para grandes volúmenes de datos
Desventajas:
- ❌ Problema de distribución: ¿Cómo compartir la clave sin ser interceptada?
- ❌ No autentica quién envía (ambos tienen la misma clave)
Ejemplos:
- AES (Advanced Encryption Standard) — Estándar moderno
- DES (Data Encryption Standard) — Obsoleto
- RC4 — Obsoleto
Uso práctico:
# Cifrar archivo con contraseña
gpg -c archivo.txt # Crea archivo.txt.gpg
# Descifrar
gpg -d archivo.txt.gpg # Solicita contraseña2. Criptografía Asimétrica (PKC)
Dos claves diferentes: pública (conocida) y privada (secreta).
Persona A (privada: d, pública: e) Persona B (privada: d', pública: e')
Cifra con clave pública de B
↓
e' (pública, conocida)
↓
Solo B puede descifrar con su d' (privada)
Ventaja revolucionaria:
- ✅ Distribución segura: Puedo publicar mi clave pública sin riesgo
- ✅ Autenticación: Firma con clave privada → verifica con clave pública
- ✅ No requiere canal seguro previo
Desventajas:
- ❌ Más lenta que simétrica (100-1000x)
- ❌ Mayor consumo CPU
- ❌ Más compleja de implementar
Ejemplos:
- RSA (Rivest-Shamir-Adleman) — Basado en factorización de números grandes
- ECC (Elliptic Curve Cryptography) — Basado en curvas elípticas, más eficiente
- El Gamal — Basado en logaritmos discretos
Uso Híbrido (Práctico Real)
Problema: Asimétrica es lenta pero es segura para distribución de claves.
Solución: Combinar ambas:
┌─ Asimétrica: Intercambiar clave simétrica seguramente
│ A crea clave simétrica aleatoria (ej: AES 256-bit)
│ A cifra con clave pública de B → B descifra con su clave privada
│ Ahora ambos tienen la misma clave simétrica (de forma segura)
│
└─ Simétrica: Usar esa clave para cifrar todo el mensaje (rápido)
A cifra mensaje con AES usando esa clave
B descifra con la misma clave AES
Implementado en:
- HTTPS/TLS
- SSH
- PGP/GPG
- Signal, WhatsApp (end-to-end encryption)
Firmas Digitales: Autenticidad e Integridad
Problema: ¿Cómo pruebo que soy yo quien envía el mensaje?
Solución: Firmar con clave privada, verificar con clave pública.
Proceso
Mensaje M
↓
Hash (SHA-256, MD5)
↓
Hash(M) = ABC123...
↓
Cifra con clave privada del remitente
↓
Firma = RSA_encrypt(Hash(M), private_key)
↓
Envía: [Mensaje original + Firma]
Verificación:
Recibe: [Mensaje M + Firma]
↓
Descifra firma con clave pública del remitente
↓
Firma_descifrada = RSA_decrypt(Firma, public_key)
↓
Calcula Hash(M) nuevo
↓
¿Hash(M) == Firma_descifrada?
✅ SÍ → Mensaje auténtico e íntegro
❌ NO → Mensaje alterado o no es del remitente
Ventajas:
- ✅ Autentica al remitente (solo él puede firmar)
- ✅ Detecta alteraciones (hash no coincide)
- ✅ No repudio (remitente no puede negar que firmó)
Modelos de Confianza
1. Infraestructura de Clave Pública (PKI)
Autoridad Central: Certificate Authority (CA) firma certificados de terceros.
CA (VeriSign, Let's Encrypt, DigiCert)
↓ (firma el certificado)
www.example.com (Certificate)
↓ (incluye)
Clave pública de www.example.com
Identidad verificada de www.example.com
Firma de CA (proof of authority)
Confianza transitiviva:
- Confío en CA (navegadores pre-instalan CAs)
- CA firmó certificado de www.example.com
- Por lo tanto, confío en www.example.com
Ventaja: Escalable, centralizado, compatible HTTPS/TLS
Desventaja: Dependo de CAs (pueden ser comprometidas, censurar)
2. Red de Confianza (Web of Trust)
Sin autoridad central: Confío en personas que conozco, y ellas confían en otras.
Yo (conozco y verifico personalmente)
↓ (firmo clave pública de)
Amigo A
↓ (Amigo A conoce y firma a)
Colega B
↓ (Colega B conoce y firma a)
Desconocido C
Confianza:
- ✅ Directa: Conozco personalmente y verifico huella
- ✅ Por delegación: Amigos en quienes confío, firman por otros
- ✅ Transitiva: La red entera conecta mediante firmas
Ventaja:
- No dependo de autoridades centrales
- Más resistente a censura
- Descentralizado
Desventaja:
- Requiere diligencia (verificar fingerprints)
- Menos escalable (requiere conocimiento previo)
- Más lenta de construir
Implementado en: PGP, GPG, SSH known_hosts
GPG: Criptografía Práctica
GnuPG es “una implementación completa y libre del estándar OpenPGP.”
Permite usar criptografía simétrica, asimétrica, firmas y Web of Trust en la práctica.
1. Cifrado Simétrico (Contraseña)
# Cifrar archivo
gpg -c archivo.txt
# Crea: archivo.txt.gpg
# Solicita contraseña (se pide 2x)
# Descifrar
gpg -d archivo.txt.gpg
# Solicita contraseña y muestra contenido
# Descifrar a archivo
gpg -d archivo.txt.gpg -o archivo_original.txtCaso de uso: Compartir archivo con contraseña por email inseguro.
2. Generar Par de Claves
# Generar nuevo par (público + privado)
gpg --gen-key
# Responde preguntas:
# - Tipo: RSA 2048 (o 4096 para máxima seguridad)
# - Nombre real: "José García"
# - Email: "jose@example.com"
# - Comentario: "Clave laboral"
# - Contraseña para proteger clave privada (importante!)Resultado:
Clave pública: compartible públicamente (fingerprint único)
Clave privada: protegida con contraseña, nunca compartir
3. Cifrado Asimétrico
# Exportar clave pública (enviar a otros)
gpg --export -a jose@example.com > mi_clave_publica.asc
# Alguien me envía su clave pública (importar)
gpg --import clave_de_amigo.asc
# Listar claves
gpg --list-keys
# Cifrar archivo para amigo (con su clave pública)
gpg -r "amigo@example.com" -e documento.pdf
# Crea: documento.pdf.gpg
# Solo amigo puede descifrar (necesita su clave privada + contraseña)
# Descifrar (solo quien tiene clave privada)
gpg -d documento.pdf.gpg
# Solicita contraseña de clave privadaFlujo típico:
Yo → [Cifro con clave pública de Amigo] → Amigo → [Descifra con su clave privada]
4. Firmas Digitales
# Firmar documento (demuestra que es de mi autoría)
gpg --sign documento.txt
# Crea: documento.txt.gpg (binario)
# Firmar en formato ASCII (para email)
gpg --armor --detach-sign documento.txt
# Crea: documento.txt.asc (firma separada, texto)
# Verificar firma
gpg --verify documento.txt.asc documento.txt
# ✅ Good signature from "José García" <jose@example.com>
# o
# ❌ BAD signature - document altered!Caso de uso:
Publico: documento.txt + documento.txt.asc
Otros pueden verificar: gpg --verify documento.txt.asc documento.txt
Resultado: Saben que es genuino y no fue alterado
5. Gestión de Claves
# Listar claves públicas
gpg --list-keys
# Listar claves privadas
gpg --list-secret-keys
# Ver fingerprint (identificador único)
gpg --fingerprint jose@example.com
# Exportar clave pública en formato binary
gpg --export -o mi_clave.gpg jose@example.com
# Exportar clave privada (⚠️ CUIDADO!)
gpg --export-secret-keys -a > clave_privada_BACKUP.asc
# (guardar en lugar muy seguro - USB cifrado, caja fuerte)
# Importar clave
gpg --import clave_amigo.asc
# Firmar clave de otros (validar en Web of Trust)
gpg --sign-key amigo@example.com
# Luego: gpg --send-keys amigo@example.com (publicarla)
# Eliminar clave
gpg --delete-key email@example.com
gpg --delete-secret-key email@example.com # (privada)6. Web of Trust en Práctica
# Yo conozco personalmente a Amigo
# Amigo me muestra su fingerprint (ej: por teléfono, en persona)
# Comparo con mi copia
gpg --fingerprint amigo@example.com
# Firmo su clave (validar identidad)
gpg --sign-key amigo@example.com
# Pregunta confirmación, firmo con mi clave privada
# Publico la firma (para que otros vean que confío en él)
gpg --send-keys amigo@example.com
# (a servidor de claves: keybase.io, keys.openpgp.org, etc.)
# Ahora otros ven:
gpg --list-keys amigo@example.com
# [Firma de yo] [Firma de otros]
# → Amigo está bien conectado en la red de confianzaCasos de Uso Reales
1. Comunicación Privada (Email)
Yo envío email a Amigo:
1. Escrito en cliente de email (Thunderbird + Enigmail)
2. Automáticamente: cifro con clave pública de Amigo
3. Envío email cifrado (servidor no ve contenido)
4. Amigo recibe → descifra con su clave privada
5. Solo Amigo puede leer
2. Verificación de Software
Distribuidor publica:
- software.tar.gz (el archivo)
- software.tar.gz.asc (firma)
Yo descargo ambos y verifico:
gpg --verify software.tar.gz.asc software.tar.gz
✅ Good signature from "Distribuidor Confiable"
→ Sé que es software genuino, no fue alterado
3. Backup Cifrado
Copia de seguridad importante (contraseña de BD, claves privadas):
1. Cifra con contraseña fuerte: gpg -c backup.sql
2. Almacena backup.sql.gpg en nube sin miedo
3. Nadie puede leer sin la contraseña
4. Autenticación Descentralizada (SSH)
SSH usa GPG para autenticar usuarios:
- Clave pública en ~/.ssh/authorized_keys
- Clave privada en ~/.ssh/id_rsa (protegida con contraseña)
- Sin contraseña correcta, no se puede entrar
Similar a GPG pero integrado en SSH
Mejores Prácticas
✅ Clave privada:
- Protege con contraseña fuerte
- Almacena en lugar seguro (no en la nube)
- Haz backup en USB/hardware wallet cifrado
- Nunca compartas con nadie
✅ Clave pública:
- Comparte libremente
- Publica en múltiples servidores de claves
- Incluye en tu email, web, redes sociales
✅ Web of Trust:
- Firma claves solo si verificas personalmente
- Usa fingerprint (no confíes en name solamente)
- Publica firmas (para ayudar a otros a confiar)
❌ Errores comunes:
- ❌ Usar contraseña débil para clave privada
- ❌ Perder backup de clave privada (no puedes recuperar mensajes cifrados)
- ❌ Firmar claves sin verificar fingerprint
- ❌ Dejar clave privada en servidor público
Relaciones
Conecta con
- TLS — Criptografía en HTTPS y comunicación segura
- SPF — Autenticación de email (complementario a GPG)
- DKIM — Firma digital para correo (similar concepto a GPG)
- Configuración de Red en Linux — SSH usa criptografía asimétrica
Fuentes
- Introducción a la Criptografía — Conceptos fundamentales, simétrica vs asimétrica
- Criptografía con GPG — Implementación práctica, gestión de claves, Web of Trust