// ESTACIÓN 02 · CAPA 7 · SHELL REMOTO

SSH — el acceso remoto

Lo usas todos los días: ssh prod-server, git push, scp. Bajo el capó hay un handshake criptográfico que en su modo por defecto ya es post-cuántico desde abril de 2025 — pero con un asterisco grande llamado autenticación.

// 01 · EL PROBLEMA

Una shell sobre una red hostil

SSH (Secure Shell) resuelve un problema más amplio que TLS: no solo cifrar tráfico, sino ejecutar comandos en una máquina remota como si estuvieras delante de ella, sobre una red en la que cualquiera puede estar mirando.

El handshake SSH cubre tres asuntos, parecidos a los de TLS pero con matices propios. Acuerdo de clave: cliente y servidor establecen una clave de sesión sin que un atacante en medio pueda obtenerla — históricamente con Diffie-Hellman, hoy con curvas elípticas o ya con híbridos post-cuánticos. Autenticación del servidor: el cliente verifica la host key del servidor — si es la primera conexión, la guarda en ~/.ssh/known_hosts (el famoso "Trust On First Use"); si ya existe y no coincide, salta la alerta de man-in-the-middle que todos hemos visto alguna vez. Autenticación del cliente: típicamente con clave pública/privada — tú demuestras al servidor que tienes la clave privada cuya pública está en authorized_keys.

El atacante a derrotar es similar al de TLS — un MitM en la red — pero hay un actor adicional: el atacante que captura tráfico hoy y lo descifra mañana. Las sesiones SSH suelen contener cosas como credenciales de bases de datos, claves de cifrado, código fuente propietario — datos cuyo valor sobrevive perfectamente 10, 20 o 30 años. Justo lo que un Estado quiere guardar para Q-Day.

SESIÓN SSH · CIFRADO + AUTENTICADO CLIENTE DEV LAPTOP ~/.ssh/id_ed25519 SERVIDOR SSHD /etc/ssh/ssh_host_* $ cat git push psql vim tail -f exit KEX acuerdo de clave HOST KEY ¿es el servidor real? USER KEY ¿eres tú?
Tres asuntos criptográficos en cada conexión: acuerdo de clave, identidad del servidor, identidad del usuario

Estos tres asuntos no envejecen igual. El KEX ya está en pleno proceso de migración a PQC. La identidad del servidor (host key) y del usuario (user key) están mucho más atrasadas — y son problema. Veremos por qué en la sección 5.

// 02 · LA HISTORIA

De SSH-1 al default post-cuántico

Igual que TLS, SSH ha tenido que ir tirando algoritmos rotos por el camino. Pero a diferencia de TLS, SSH llegó antes a la era post-cuántica: dos versiones por delante en el calendario.

// 03 · ESTADO DEL ARTE CLÁSICO

Lo que hoy se considera "bien hecho"

Sin entrar todavía en post-cuántica, esta es la línea base de un SSH bien configurado en 2026.

Versión
OpenSSH 9.0+ en cliente y servidor (idealmente 10.0+). Nunca SSH-1.
Key exchange
curve25519-sha256 como mínimo. Nunca diffie-hellman-group1-sha1, diffie-hellman-group14-sha1 ni grupos DH menores de 2048.
Host keys
Ed25519 preferido. RSA-3072+ aceptable. Eliminar DSA y ECDSA-NIST de la oferta del servidor cuando sea posible.
User keys
Ed25519 preferido. RSA-3072+ si compatibilidad lo exige. Nunca RSA-1024 ni firmas ssh-rsa (con SHA-1).
Cifrado simétrico
AEAD: chacha20-poly1305@openssh.com o aes256-gcm@openssh.com. Nunca CBC ni 3DES.
MAC
Innecesario si usas AEAD (ya integra autenticación). Si no, HMAC-SHA-256 mínimo. Nunca HMAC-MD5 ni HMAC-SHA1.
Auth de password
Deshabilitada. Solo claves públicas o, mejor, certificados SSH firmados por una CA interna.

Esto define el "bien hecho" clásico. La trampa es que SSH es tan compatible hacia atrás que muchos servidores siguen ofreciendo algoritmos legacy "por si acaso". Y aquí viene la era cuántica.

// 04 · LA AMENAZA CUÁNTICA

Tres asuntos, tres veredictos distintos

Aquí SSH se parte en tres frentes con destinos cuánticos muy diferentes. La parte simétrica está bien; el KEX ya migró; la autenticación todavía está en RSA/ECDSA y eso es un problema.

DH clásico · curve25519 (KEX)
Shor lo rompe. Sin migración a KEX híbrido, todo el tráfico capturado hoy se podrá descifrar el día Q.
Roto · Shor
RSA · ECDSA · Ed25519 (firmas)
Shor las rompe todas, incluida Ed25519 (que es ECC). Un atacante podría falsificar host keys y user keys el día Q.
Roto · Shor
~
aes128-gcm
Grover reduce a ~64 bits efectivos. Insuficiente. Solución: AES-256.
Débil · Grover
aes256-gcm · chacha20-poly1305
Claves de 256 bits. Grover los deja en ~128 bits efectivos. Aguantan.
Resiste

Hay un matiz que conviene resaltar y que el público suele pasar por alto: Ed25519 también cae. Ser una curva moderna, segura y bien diseñada no le sirve de nada frente a Shor. Cualquier criptografía basada en logaritmo discreto — sea sobre enteros, curvas NIST o curvas de Edwards — se rompe.

Tus host keys son el archivo más comprometedor de tu infraestructura. Llevan años sin rotarse, son Ed25519 o RSA, y un atacante con ordenador cuántico puede falsificarlas el día Q.

Y al revés que con TLS — donde los certificados expiran cada 90 días con Let's Encrypt — las claves SSH no caducan solas. Es completamente normal encontrar host keys generadas en 2018 y nunca rotadas. Esa es exactamente la superficie de ataque que un atacante quiere preservar: si captura el handshake hoy y guarda la host key pública, en el día Q la firma falsificada con la privada "recuperada" cuántica le permite impersonar el servidor para siempre — porque nadie mira el fingerprint de un servidor que llevan 8 años usando.

// 05 · LA SOLUCIÓN PQC

El KEX ya migró. La autenticación, no.

SSH ha hecho el primer movimiento rapidísimo comparado con otros protocolos: ML-KEM ya es el default en OpenSSH 10.0. Pero el resto del cuadro está mucho más vacío de lo que parece.

RFC propuesto · IETF curdle
mlkem768x25519-sha256
default en OpenSSH 10.0+
Híbrido: ML-KEM-768 (FIPS 203) + X25519. La clave de sesión deriva de ambos. Es lo que se está negociando por defecto cada vez que abres una shell con un servidor moderno.
draft-josefsson-ntruprime-ssh
sntrup761x25519-sha512
default en OpenSSH 9.0–9.9
Híbrido: Streamlined NTRU Prime + X25519. Pre-NIST: lleva años en producción y sigue siendo seguro, pero ML-KEM lo está sustituyendo por ser estándar formal.

Estado real por frente

Acuerdo de clave
Desplegado · default
OpenSSH 10.0+ negocia mlkem768x25519-sha256 automáticamente. GitHub, GitLab, AWS Transfer Family y casi cualquier servidor moderno ya lo soportan. Probablemente ya estás usando PQC SSH sin saberlo.
Firmas / autenticación
No desplegado
OpenSSH no ofrece todavía ningún algoritmo PQC para firmas. Las host keys y user keys siguen siendo Ed25519 o RSA. Existen forks experimentales (open-quantum-safe/openssh) con ML-DSA, pero no es producción mainstream.

Esta asimetría es importante: el KEX cuántico-seguro no salva tu autenticación. Si el día Q el atacante puede falsificar la host key, da igual que la clave de sesión esté protegida con ML-KEM — te puede redirigir a un servidor falso desde cero.

El warning de OpenSSH 10.1

Desde OpenSSH 10.1 el cliente muestra automáticamente este aviso cuando se conecta a un servidor que no ofrece KEX post-cuántico:

** WARNING: connection is not using a post-quantum key exchange algorithm. ** This session may be vulnerable to "store now, decrypt later" attacks. ** The server may need to be upgraded.

Si ves esto en tus logs, tienes deuda criptográfica medible: o el servidor es viejo, o tiene los algoritmos PQC deshabilitados explícitamente. Es un test gratis del nivel de madurez de cualquier proveedor con el que conectes — y un argumento técnico irrebatible para forzar upgrades.

// 06 · CHECKLIST DE MADUREZ

Los 6 criterios de la auditoría

Igual que en TLS, estos serán los criterios del examen final para SSH. La diferencia es que aquí el techo de PQC es más bajo — ML-KEM en KEX existe, pero PQC en firmas todavía no es producción. El nivel Q-Day Proof requiere híbrido en KEX y piloto de firmas PQC.

// SSH · 6 CRITERIOS · 90 PTS MAX
"No lo sé" cuenta como área ciega · no penaliza, no puntúa
  1. 01. ¿Qué versión de OpenSSH (o equivalente) tienes en servidores y clientes?
    Classical
    OpenSSH < 8.0 · 0 pts (crítico, sin SHA-2 mandatorio)
    Classical
    OpenSSH 8.x · 5 pts (sin PQC nativo)
    Hybrid
    OpenSSH 9.0–9.9 · 10 pts (sntrup761 disponible)
    Quantum
    OpenSSH 10.0+ · 15 pts (ML-KEM como default)
  2. 02. ¿Qué algoritmos KEX permites en sshd_config / ssh_config?
    Classical
    Permite diffie-hellman-group{1,14}-sha1 · 0 pts (crítico)
    Hybrid
    Solo curve25519-sha256 y derivados · 10 pts
    Quantum
    mlkem768x25519-sha256 ó sntrup761x25519-sha512 habilitado · 15 pts
  3. 03. ¿Qué tipo de host keys ofrecen tus servidores?
    Classical
    Permite ssh-rsa (SHA-1), ssh-dss, ECDSA NIST · 0 pts
    Hybrid
    RSA-3072+ y/o Ed25519 · 10 pts
    Quantum
    Solo Ed25519 (sin RSA legacy) · 15 pts
    Q-Day Proof
    Piloto con ML-DSA / SLH-DSA en algún host · +bonus
  4. 04. ¿Cómo gestionan los usuarios sus claves privadas?
    Classical
    Auth de password permitida o claves sin passphrase · 0 pts
    Hybrid
    Solo claves públicas, con passphrase · 10 pts
    Quantum
    Certificados SSH firmados por CA interna, claves Ed25519 ó FIDO2 (ed25519-sk) · 15 pts
  5. 05. ¿Qué cipher y MAC se permiten?
    Classical
    Permite CBC, 3DES, hmac-md5 ó hmac-sha1 · 0 pts (crítico)
    Hybrid
    Solo AEAD (chacha20-poly1305, aes-gcm) · 10 pts
    Quantum
    AEAD + AES-256 mínimo · 15 pts
  6. 06. ¿Tienes inventario de host keys y política de rotación?
    Classical
    Sin inventario · host keys generadas hace años, sin rotar · 0 pts
    Hybrid
    Inventario parcial · rotación ad-hoc · 10 pts
    Q-Day Proof
    Inventario completo · CA SSH interna · rotación <1 año · capacidad de revocar en horas · 15 pts

Mapeo a badge: 0–30 Classical · 31–55 Hybrid-Ready · 56–75 Quantum-Safe · 76–90 Q-Day Proof. La paradoja de SSH es que hoy es relativamente fácil llegar a Quantum-Safe (basta con OpenSSH 10.0 + buena config), pero imposible llegar a Q-Day Proof completo sin entrar en territorio experimental con firmas PQC.