
🌐 También en: English · Deutsch · Français
🌐 Criptografía en la práctica
Si usas internet, estás interactuando constantemente con sistemas criptográficos —handshakes TLS, firmas de paquetes, claves SSH—, te des cuenta o no.
💡 La criptografía no va solo de secretos: va de autenticidad, integridad y de cómo repartir la confianza en entornos hostiles.
En esencia, la criptografía moderna se apoya en dos primitivas:
- Cifrado simétrico (secreto compartido)
- Cifrado asimétrico (pares de claves pública/privada)
🧠 Cifrado simétrico
La criptografía simétrica usa una única clave secreta tanto para cifrar como para descifrar. Es eficiente desde el punto de vista computacional y constituye la columna vertebral de los sistemas de cifrado de alto rendimiento.
plaintext → [E_k] → ciphertext
ciphertext → [D_k] → plaintext⚡ Ventajas
- Rendimiento O(n) con una sobrecarga mínima
- Aceleración por hardware (AES-NI, ARMv8 Crypto Extensions)
- Ideal para grandes volúmenes de datos (discos, carga útil de TLS)
⚠️ El problema de fondo: la distribución de claves
Necesitas un canal seguro para intercambiar la clave… lo cual no tiene mucho sentido si no lo tienes ya.
🔧 Ejemplo
- AES-256 (cifrado por bloques, bloques de 128 bits)
- Modos: GCM (autenticado), CBC (heredado), CTR
🧬 Cifrado asimétrico
La criptografía asimétrica resuelve el problema de la distribución de claves separando identidad y secreto:
- Clave pública → se puede compartir libremente
- Clave privada → debe permanecer en secreto
plaintext → [encrypt with public key] → ciphertext
ciphertext → [decrypt with private key] → plaintext🔐 La seguridad se basa en problemas matemáticos difíciles (p. ej., la factorización en RSA o el logaritmo discreto en ECC).
📐 Algoritmos
- RSA (veterano, pero aún muy extendido)
- ECC (Curve25519, Ed25519 → estándar moderno)
⚠️ La contrapartida
- Más lento que la criptografía simétrica
- No apto para cifrar directamente grandes volúmenes de datos
⚙️ Cifrado híbrido (lo que pasa de verdad)
Los sistemas del mundo real combinan ambos enfoques:
- Generar una clave de sesión aleatoria (simétrica)
- Cifrar los datos con AES
- Cifrar la clave de sesión con la clave pública del destinatario
👉 Así es exactamente como funcionan por dentro TLS, PGP y los sistemas de mensajería modernos.
🐧 Instalación (Debian)
GnuPG es la implementación de referencia de OpenPGP.
sudo apt update
sudo apt install gnupggpg --versionCon esto compruebas tu backend criptográfico, los algoritmos soportados y la versión.
🛠️ GnuPG y el almacenamiento de claves por dentro
GnuPG guarda el material criptográfico en un anillo de claves estructurado:
~/.gnupg| Componente | Función |
|---|---|
| private-keys-v1.d/ | los blobs de las claves privadas propiamente dichos (protegidos) |
| pubring.kbx | base de datos de claves públicas (formato keybox) |
| trustdb.gpg | grafo de confianza / Web of Trust |
🚨 Si tu clave privada queda comprometida, toda tu identidad queda comprometida.
🌍 Exportar tu clave pública
gpg --list-keysgpg --armor --export KEY_ID > publickey.ascEl ASCII armor es Base64 más cabeceras, lo que permite enviarla sin problemas por sistemas basados en texto.
🔍 Huella digital (la raíz de la confianza)
gpg --fingerprint👉 La huella digital (fingerprint) es un hash criptográfico de la clave pública: en la práctica, su identidad inmutable.
Es lo que verificas por un canal independiente (p. ej., en persona, por Signal o en una tarjeta de visita).
🔐 Cifrar un mensaje (paso a paso)
📥 Importar la clave del destinatario
gpg --import publickey.asc✉️ Cifrar un archivo
echo "Attack at dawn" > message.txt
gpg --encrypt --recipient "email@example.com" message.txtEsto genera un archivo con cifrado híbrido que contiene:
- La clave de sesión cifrada
- La carga útil cifrada
- Metadatos (algoritmo, ID de la clave)
📨 Cifrar directamente en la terminal (ASCII armor)
gpg --armor --encrypt --recipient "email@example.com"Termina la entrada con CTRL + D.
🔓 Descifrado
gpg --decrypt message.txt.gpgNunca confíes en una clave sin verificar su huella digital; si no, quedas expuesto a ataques MITM.
🌐 Publicar tu clave
PGP Public Key
Key ID: 75CA893CEF68BC6B
Fingerprint:
15AD 43D9 20A3 BDBA B2EF
AD59 75CA 893C EF68 BC6B
Download:
https://example.com/publickey.asc
Buena práctica: alojarla tú mismo y, si quieres, replicarla en servidores de claves.
📡 Servidores de claves y distribución
gpg --send-keys KEY_ID
gpg --recv-keys KEY_IDLos servidores de claves modernos son append-only → las claves no se pueden borrar de verdad.
✍️ Firmas digitales
gpg --sign file.txt
gpg --verify file.txt.gpgLas firmas proporcionan:
- Integridad → los datos no se han modificado
- Autenticidad → firmados por el titular de la clave privada
- No repudio → no se puede negar la autoría
🏛️ Modelos de confianza
Centralizado (PKI)
- Autoridades de certificación (CA)
- Se usa en HTTPS
Descentralizado (Web of Trust)
- Los usuarios se firman las claves entre sí
- La confianza es transitiva
👉 GPG usa un grafo de confianza descentralizado en lugar de una autoridad central.
🧾 Conclusión
- Simétrico → rápido, eficiente
- Asimétrico → resuelve la identidad y el intercambio de claves
- Híbrido → el estándar en el mundo real
- GnuPG → implementación práctica de OpenPGP
La criptografía no elimina la confianza: solo cambia dónde la depositas.
📬 Pruébalo tú mismo
He hecho personalmente todos los ejemplos anteriores para entender mejor cómo funciona la criptografía en escenarios reales.
Si quieres probarlo tú también, descárgate mi clave pública desde la página del aviso legal:
🔐 Me encantaría recibir un mensaje cifrado tuyo. Te responderé lo antes posible y, por supuesto, también cifrado 😉
Es una forma estupenda de poner a prueba tu configuración y vivir en la práctica todo el flujo de la criptografía de clave pública.




