Cifrado simétrico y asimétrico
Una clave compartida es rápida pero tiene que viajar; la clave pública resuelve ese transporte. Por qué casi todo usa cifrado híbrido.
Casi toda la confidencialidad que usas a diario se reduce a dos familias de cifrado que resuelven problemas distintos. El cifrado simétricoCifrado simétricoCifrado en el que la misma clave secreta cifra y descifra; muy rápido, pero la clave debe compartirse de forma segura. es rápido pero necesita que ambas partes compartan una clave secreta; el cifrado asimétricoCifrado asimétricoCriptografía con un par de claves matemáticamente ligadas; lo que cifra la pública solo lo descifra la privada (y viceversa). elimina ese problema a cambio de ser lento. Entender cuándo usa cada uno un sistema real —y por qué los combina— es la base para leer un handshake TLS, una política de KMS o un token firmado sin perderte.
Simétrico: una sola clave, mucha velocidad#
En el cifrado simétrico la misma clave cifra y descifra. El estándar es AES (Advanced Encryption Standard), con claves de 128 o 256 bits, y en hardware moderno cifra gigabytes por segundo gracias a instrucciones dedicadas (AES-NI). Por eso todo lo que mueve volumen —discos, backups, bases de datos, el cuerpo de una conexión TLS— va cifrado con AES.
Pero un algoritmo de bloque como AES no se usa “a pelo”: necesita un modo de operación que diga cómo encadenar los bloques. Y aquí está la primera trampa.
El modo que quieres hoy es AEAD (Authenticated Encryption with Associated Data), y en concreto AES-GCM. Un modo AEAD hace dos cosas en una sola operación: cifra (confidencialidad) y produce un tag de autenticación (integridad). Así detectas si alguien manipuló el cifrado antes de descifrarlo, en lugar de confiar a ciegas en bytes alterados.
El problema de fondo del simétrico no es el algoritmo, sino cómo repartes la clave: si tú y yo no compartimos ya un secreto, ¿cómo te hago llegar la clave por un canal que un espía puede leer? Eso es el problema de distribución de claves, y es justo lo que resuelve la otra familia.
Asimétrico: una clave pública y una privada#
El cifrado asimétricoCifrado asimétricoCriptografía con un par de claves matemáticamente ligadas; lo que cifra la pública solo lo descifra la privada (y viceversa). (o de clave pública) usa un par de claves matemáticamente ligadas: lo que cifra la pública solo lo descifra la privada. Repartes la pública a quien quieras —puede ir a la vista de todos— y guardas la privada. Ahora cualquiera puede cifrarte un mensaje sin que hayáis compartido antes ningún secreto.
Hay dos grandes familias:
- RSA, basado en la dificultad de factorizar números enormes. Seguro con claves de 2048 o 3072 bits, pero esas claves son grandes y las operaciones, lentas.
- Criptografía de curva elíptica (ECC), que logra la misma seguridad con claves mucho más cortas (una clave de 256 bits de curva elíptica equivale aproximadamente a RSA-3072). Por eso domina en móvil, TLS moderno y AWS.
El asimétrico se usa para dos cosas: intercambiar o transportar una clave de sesión y firmar (lo veremos en hashing y firmas). Lo que no hace es cifrar datos masivos: es entre cientos y miles de veces más lento que AES.
Por eso se combinan: cifrado híbrido#
Mira cómo encajan las dos piezas: el asimétrico reparte la clave, el simétrico mueve los datos.
Paso 1 de 6El reto
El emisor quiere mandar datos al receptor por un canal que un espía puede leer. Hace falta cifrar, y la pregunta es con qué clave.
Ese patrón se llama cifrado híbrido y es lo que hacen TLS, S3, KMS, PGP y prácticamente todo lo demás:
- El emisor genera una clave de sesión simétrica aleatoria (para AES).
- La cifra con la clave pública del receptor y se la envía.
- El receptor la descifra con su clave privada. Ahora ambos comparten la clave de sesión.
- A partir de ahí, todos los datos viajan cifrados con AES, a toda velocidad.
Obtienes lo mejor de cada mundo: la comodidad de reparto del asimétrico y el rendimiento del simétrico. El coste caro (asimétrico) se paga una vez por sesión; el barato (simétrico), por cada byte.
Cuándo usar cada uno#
Vulnerable
Seguro
# Cifrar un backup de 50 GB con RSA directamente:# lentísimo e imposible (RSA cifra como mucho unos# pocos cientos de bytes por operación).# Compartir una clave AES pegándola en un correo o en# una variable de entorno del repo: el canal es# inseguro, vuelves al problema de distribución.# Datos en reposo y en volumen: simétrico (AES-GCM),# con la clave gestionada por KMS (envelope encryption).# Acordar esa clave entre dos extremos que no se# conocen: asimétrico (ECDHE en el handshake TLS).# Probar quién originó algo: firma asimétrica sobre el# hash (JWT RS256/ES256, firma de código).En la app de referencia Citas, esto aparece por todas partes aunque no escribas criptografía a mano: CloudFront y el ALB terminan TLS (handshake asimétrico + cuerpo simétrico); el bucket citas-adjuntos y la base RDS se cifran en reposo con AES vía KMSAWS KMSServicio gestionado de AWS que crea y controla claves de cifrado; las claves nunca salen en claro y cada una lleva su propia key policy., que a su vez usa cifrado híbrido por debajo (envelope encryption); y los JWT de Cognito van firmados con una clave asimétrica. Tu trabajo rara vez es elegir el algoritmo: es elegir el modo correcto (AEAD, no ECB), no reutilizar nonces y dejar la gestión de claves a un servicio como KMS.
Tu turno
Clasifica el cifrado de un sistema que conozcas
Elige un sistema o servicio con el que trabajes (una app, un pipeline, un bucket, una cola) y responde:
- ¿Dónde hay datos en reposo y con qué se cifran? ¿Es simétrico gestionado por un servicio de claves?
- ¿Dónde hay datos en tránsito? ¿Quién termina el TLS y dónde empieza a viajar en claro otra vez?
- ¿Hay algún punto donde una clave simétrica viaje o se almacene en claro (variable de entorno, fichero de config, repositorio)? Ese es tu problema de distribución de claves.
Para cada punto, anota qué cerrarías primero y con qué control concreto.
Reto
¿Por qué no ciframos directamente todo el tráfico con RSA y nos olvidamos de AES?
▸Mostrar solución
Por rendimiento y por límite de tamaño. RSA es miles de veces más lento que AES y solo puede cifrar un bloque pequeño (del orden del tamaño de la clave) por operación. Cifrar un vídeo o un backup con RSA sería inviable. Por eso RSA (o ECDHE) solo protege la clave de sesión, y AES protege los datos.
Reto
Un compañero usa AES-GCM pero deriva el nonce del propio contenido del mensaje. ¿Qué puede salir mal?
▸Mostrar solución
Que dos mensajes con el mismo contenido (o con contenidos que colisionen al derivar) produzcan el mismo nonce con la misma clave, y eso rompe GCM: se filtra información y se puede falsificar. El nonce debe ser único por cifrado, idealmente un contador que nunca se reinicie o un valor aleatorio de 96 bits de un CSPRNG, independiente del contenido.
En resumen#
- Simétrico (AES): una clave cifra y descifra, rapidísimo, ideal para volumen. Su talón de Aquiles es repartir la clave.
- Usa siempre un modo AEAD (AES-GCM): cifra y autentica a la vez. Nunca ECB, nunca reutilices el nonce.
- Asimétrico (RSA, ECC): par de claves pública/privada, resuelve la distribución de claves y permite firmar, pero es lento.
- Cifrado híbrido: el asimétrico reparte una clave de sesión y el simétrico mueve los datos. Es lo que hacen TLS, KMS, S3 y casi todo.
- No implementes criptografía a mano: usa bibliotecas de alto nivel y delega las claves en un servicio como KMS.
Referencias#
- NIST FIPS 197: Advanced Encryption Standard (AES)
- NIST SP 800-38D: Galois/Counter Mode (GCM) and GMAC
- NIST SP 800-38A: Modes of Operation (y por qué ECB no debe usarse)
- AWS: Cryptographic concepts (envelope encryption, data keys)
- Cloudflare: A relatively easy to understand primer on elliptic curve cryptography