Saltar al contenido

Cifrado simétrico y asimétrico explicado con las manos

    Cifrado simétrico y asimétrico

    explicado con las manos

    Fundamentos de criptografía  |  unfantasmaenelsistema.com

    Casi todos los artículos de seguridad mencionan el cifrado simétrico y el asimétrico de pasada, dan por hecho que ya sabes la diferencia y siguen adelante. TLS «usa criptografía de clave pública», SSH «tiene una clave privada», WireGuard «intercambia claves», las passkeys «firman un reto». Si esas frases te suenan pero no terminarías de explicárselas a alguien, este artículo es para ti.

    Vamos a ver los dos tipos de cifrado con analogías físicas, sin una sola fórmula: qué problema resuelve cada uno, por qué se usan siempre juntos (el llamado cifrado híbrido), y un par de detalles que separan una implementación correcta de una vulnerable: la autenticación del mensaje y el uso único del nonce.

    Qué aprenderás en este artículo

    Cómo funciona el cifrado simétrico y cuál es su único gran problema: repartir la clave · Cómo el cifrado asimétrico resuelve ese reparto usando un par de claves pública y privada · Por qué TLS, SSH, PGP, WireGuard y las passkeys usan cifrado híbrido y no uno solo · Qué es AEAD y por qué «cifrar sin autenticar» es un fallo de seguridad, no un descuido · Qué son el nonce y el IV, y por qué reutilizar uno puede tumbar todo el cifrado

    1. Cifrado simétrico: una sola llave para cerrar y abrir

    En el cifrado simétrico, la misma clave secreta sirve para cifrar y para descifrar. La analogía es una caja fuerte con una única llave: quien la tiene puede meter documentos y sacarlos; quien no la tiene, ve una caja de acero y nada más.

    Es el caballo de batalla de la criptografía moderna porque es rápido: cifrar y descifrar gigabytes con AES o ChaCha20 apenas cuesta a un procesador actual, en parte porque las CPU traen instrucciones dedicadas. Todo lo que ocupa volumen —el contenido de tus mensajes, los ficheros de un disco cifrado, el tráfico de una VPN— viaja protegido con cifrado simétrico.

    AlgoritmoTipoDónde se ve
    AES-GCMCifrado de bloque autenticadoTLS, discos (BitLocker, LUKS), casi todo
    ChaCha20-Poly1305Cifrado de flujo autenticadoTLS y SSH en móviles, WireGuard
    AES-CBC / AES-CTRModos sin autenticación integradaHeredado; requiere un HMAC aparte

    1.1 El problema del reparto de clave

    El cifrado simétrico tiene un talón de Aquiles: las dos partes necesitan compartir la misma clave antes de empezar, y esa clave no puede viajar en claro por el mismo canal inseguro que se quiere proteger. Si te la envío por correo, cualquiera que lea el correo la tiene. Si somos dos personas en la misma sala, podemos acordarla en persona; si somos un navegador y un servidor que no se han visto nunca, no. Ese es exactamente el hueco que rellena el cifrado asimétrico.

    2. Cifrado asimétrico: un candado abierto que cualquiera puede cerrar

    En el cifrado asimétrico (o de clave pública) cada parte tiene dos claves distintas y matemáticamente ligadas: una pública, que se reparte sin problema, y una privada, que no sale nunca de su dueño. Lo que una cierra, solo la otra abre.

    La analogía: imagina que reparto por todo el mundo candados abiertos con mi nombre, pero me quedo yo con la única llave. Cualquiera puede coger uno de mis candados, meter un mensaje en una caja, cerrarla y enviármela. Solo yo, con mi llave privada, puedo abrirla. No hemos tenido que acordar ningún secreto de antemano.

    • Cifrar para alguien: usas su clave pública; solo su clave privada descifra
    • Firmar algo: usas tu clave privada; cualquiera verifica con tu clave pública que fuiste tú (esto es el tema del artículo de firmas digitales)
    • Acordar una clave compartida: con Diffie-Hellman, dos partes combinan su material público y privado y llegan cada una, por su lado, al mismo secreto, sin haberlo transmitido nunca
    FamiliaSe apoya enUso típicoNota
    RSAFactorizar números enormes es difícilFirmas, cifrado de clavesClaves grandes (3072+ bits); en retirada lenta
    Diffie-Hellman (DH/ECDH)Logaritmo discretoAcordar clave de sesiónLa base del handshake de TLS 1.3
    Curva elíptica (Ed25519, X25519)Logaritmo discreto en curvasFirmas y acuerdo de claveClaves pequeñas y rápidas; opción por defecto hoy

    El precio del cifrado asimétrico es que es lento y limitado: cientos o miles de veces más costoso que el simétrico, y solo puede cifrar directamente mensajes más cortos que la propia clave. Nadie cifra un vídeo con RSA. Por eso no se usa solo.

    3. Cifrado híbrido: lo mejor de cada uno

    La solución que usa absolutamente todo el software serio es combinar los dos: el asimétrico resuelve el arranque (acordar un secreto sin haberse visto antes) y el simétrico hace el trabajo pesado (cifrar los datos rápido).

    3.1 El patrón, paso a paso

    • Las dos partes usan criptografía asimétrica (Diffie-Hellman de curva elíptica, normalmente) para acordar una clave de sesión simétrica que solo ellas conocen
    • A la vez, se autentica al servidor: presenta un certificado y firma con su clave privada un resumen del intercambio, de modo que el cliente sabe que habla con quien dice y no con un intermediario
    • A partir de ese momento, todo el tráfico se cifra con la clave de sesión simétrica (AES-GCM o ChaCha20-Poly1305)
    • Al terminar la conexión, la clave de sesión se descarta. La siguiente conexión negocia otra nueva
    SistemaParte asimétricaParte simétrica
    TLS 1.3 (HTTPS)ECDHE para acordar clave + firma del certificadoAES-GCM / ChaCha20-Poly1305
    SSHIntercambio de clave (curve25519) + clave del host y del usuarioAES-GCM / ChaCha20
    WireGuardHandshake Noise con claves X25519 estáticas y efímerasChaCha20-Poly1305
    PGP / correo cifradoRSA o ECC para cifrar la clave de sesiónAES para el cuerpo del mensaje
    Passkeys (WebAuthn)El dispositivo firma un reto con su clave privadaEl canal ya va sobre TLS

    Forward secrecy: por qué las claves son efímeras

    Si la clave de sesión se deriva de valores de un solo uso que se destruyen al acabar, un atacante que grabe hoy tu tráfico cifrado y consiga dentro de un año la clave privada del servidor seguirá sin poder descifrar aquellas conversaciones. En TLS 1.3 y en WireGuard esto es obligatorio

    4. Cifrar no basta: hay que autenticar (AEAD)

    Un error histórico, y todavía frecuente en código hecho a mano, es cifrar los datos y no comprobar que nadie los ha tocado. El cifrado por sí solo oculta el contenido, pero no impide que un atacante modifique el texto cifrado. Según el modo, cambiar bytes concretos del mensaje cifrado produce cambios predecibles en el descifrado, y observar cómo reacciona el sistema (¿error de formato? ¿error de relleno?) permite ir recuperando el texto original poco a poco.

    La respuesta moderna es AEAD (Authenticated Encryption with Associated Data): un cifrado que, además de ocultar, incluye una etiqueta de autenticación. Si al descifrar la etiqueta no cuadra, la operación falla entera y no se devuelve ni un byte. AES-GCM y ChaCha20-Poly1305 son AEAD; por eso son los recomendados.

    • Regla práctica: usa siempre un modo AEAD. No combines a mano «cifrar» y «comprobar» salvo que sepas exactamente lo que haces
    • La parte de «associated data» permite autenticar sin cifrar metadatos que deben ir en claro pero no deben poder falsearse (cabeceras, números de secuencia)

    5. El nonce y el IV: úsalo una vez y solo una

    Los cifrados simétricos modernos necesitan, además de la clave, un valor llamado nonce (number used once) o IV (initialization vector). Su función es hacer que cifrar dos veces el mismo mensaje con la misma clave produzca resultados distintos. No es secreto y viaja junto al mensaje.

    La condición crítica: con una misma clave, nunca se repite un nonce. Reutilizarlo tiene consecuencias graves según el algoritmo:

    • En cifrados de flujo (ChaCha20, AES-CTR), repetir nonce con la misma clave permite combinar dos mensajes cifrados y eliminar el cifrado de ambos por completo
    • En AES-GCM, repetir nonce además filtra material que permite falsificar mensajes con etiqueta válida: se rompe la autenticación, no solo la confidencialidad

    De dónde salen los nonce en la práctica

    Un contador que nunca vuelve atrás, o un valor aleatorio de suficiente tamaño (los 96 bits de AES-GCM se quedan cortos para volúmenes enormes; XChaCha20 usa 192 bits precisamente para poder sortearlos sin miedo). El fallo aparece cuando alguien fija el nonce a ceros «para simplificar», o cuando una máquina se clona con su estado y dos instancias empiezan a contar desde el mismo punto

    6. Resumen operativo

    Necesito…UsoEjemplo concreto
    Cifrar muchos datos rápido entre dos que ya comparten claveSimétrico AEADAES-256-GCM para un fichero, un backup, un disco
    Que dos que no se conocen acuerden una clave por un canal abiertoAsimétrico (Diffie-Hellman)El handshake de TLS al abrir una web
    Enviar algo cifrado a alguien conociendo solo su clave públicaHíbridoPGP, Age, mensajería cifrada
    Demostrar que un mensaje es mío y no se ha alteradoFirma asimétricaCommit de Git firmado, paquete de distribución
    Autenticar un mensaje entre dos que comparten un secretoHMAC (simétrico)Tokens de sesión, webhooks firmados

    Referencias

    «Serious Cryptography» (Jean-Philippe Aumasson) — el libro divulgativo de referencia sobre esto · RFC 8446 (TLS 1.3) y la documentación de WireGuard (whitepaper del protocolo Noise) · Cryptographic Right Answers (Latacora) — qué usar hoy para cada necesidad, en una página · libsodium / age — librerías modernas que aplican estas decisiones por ti y son difíciles de usar mal · Nuestros artículos sobre TLS y PKI, SSH hardening, WireGuard y passkeys, que se apoyan en todo esto

    Conclusión

    El cifrado simétrico es rápido y se usa para todo el volumen de datos, pero exige que las dos partes compartan una clave de antemano. El asimétrico resuelve ese arranque —acordar un secreto o autenticar a la otra parte sin haberla visto nunca— a cambio de ser lento y limitado. Por eso no se elige uno u otro: se combinan, y a esa combinación se le llama cifrado híbrido. Es lo que hacen TLS, SSH, WireGuard, PGP y las passkeys.

    Dos detalles convierten una implementación en segura o en vulnerable: usar siempre cifrado autenticado (AEAD), para que nadie pueda manipular el mensaje cifrado sin que se note, y no repetir jamás un nonce con la misma clave. La buena noticia es que las librerías modernas —libsodium, age, las primitivas de cada lenguaje— toman esas decisiones por ti si no intentas montártelo a mano.

    unfantasmaenelsistema.com | Seguridad, sistemas y todo lo que no debería funcionar (pero funciona)

    Resumen de privacidad

    Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.