Handshake de TLS 1.3 y reanudación 0-RTT
Siga paso a paso el handshake de TLS 1.3, comprenda cómo logra el secreto perfecto hacia adelante de forma predeterminada y evalúe las ventajas y desventajas de seguridad de la reanudación de sesiones 0-RTT.
Handshake de TLS 1.3 y reanudación 0-RTT es una lección gratuita de Security+ Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Security+ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Security+ Academy incluye 4 lecciones en total.
Por qué era necesario TLS 1.3
TLS 1.3, publicado en 2018 (RFC 8446), se diseñó para corregir las debilidades que se habían acumulado en TLS 1.2 durante una década de ataques en entornos reales. Las versiones anteriores permitían negociar conjuntos de cifrado débiles, admitían criptografía de nivel de exportación y requerían varios intercambios de ida y vuelta antes de poder transmitir datos. TLS 1.3 elimina todos los algoritmos obsoletos y simplifica el handshake a un único intercambio de ida y vuelta en el caso normal, lo que mejora considerablemente tanto la seguridad como el rendimiento.
Descripción general del handshake: un intercambio de ida y vuelta
En TLS 1.3, el cliente y el servidor completan el handshake en 1-RTT (un intercambio de ida y vuelta). El cliente envía un ClientHello que incluye los conjuntos de cifrado compatibles y un intercambio de claves (mediante Diffie-Hellman). El servidor responde con un ServerHello, su propio intercambio de claves, un certificado y los primeros datos de aplicación cifrados, todo en un único envío. A continuación, el cliente verifica el certificado y envía un mensaje Finished antes de intercambiar datos de aplicación.
# Trace TLS 1.3 handshake with openssl
openssl s_client -connect example.com:443 -tls1_3 -msg 2>&1 | grep -E 'ClientHello|ServerHello|Finished'Intercambio de claves: solo Diffie-Hellman efímero
TLS 1.3 exige el intercambio de claves efímeras; eliminó por completo el intercambio de claves RSA. Todo intercambio de claves debe utilizar ECDHE (Elliptic Curve Diffie-Hellman Ephemeral) o DHE (Diffie-Hellman Ephemeral). La palabra «efímero» significa que se genera un nuevo par de claves para cada sesión. Esta es la base del secreto perfecto hacia adelante: si se compromete la clave privada de larga duración del servidor, no se pueden descifrar las sesiones anteriores porque cada sesión utilizó una clave temporal única.
Explicación del secreto perfecto hacia adelante
El secreto perfecto hacia adelante (PFS) garantiza que, aunque un atacante registre hoy todo el tráfico cifrado y obtenga la clave privada del servidor en el futuro, no pueda descifrar las sesiones antiguas. En TLS 1.2 con intercambio de claves RSA, la clave privada del servidor podía descifrar el secreto previo a la clave maestra de cualquier sesión pasada, lo que constituía un fallo catastrófico. Las claves DH efímeras de TLS 1.3 hacen que cada sesión derive sus propias claves, y esas claves efímeras se descartan después de utilizarse.
Simplificación de los conjuntos de cifrado
TLS 1.2 admitía más de 300 conjuntos de cifrado, muchos de ellos débiles o vulnerables. TLS 1.3 reduce esta cifra a solo cinco conjuntos de cifrado, todos ellos basados en AEAD (Authenticated Encryption with Associated Data): TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256, TLS_AES_128_CCM_SHA256 y TLS_AES_128_CCM_8_SHA256. Esto elimina categorías completas de ataques, como BEAST, POODLE y FREAK, que aprovechaban la negociación de cifrados débiles.
# Check supported TLS 1.3 cipher suites on a server
nmap --script ssl-enum-ciphers -p 443 example.comReanudación 0-RTT: velocidad frente a seguridad
La reanudación 0-RTT (Zero Round Trip Time) es una función opcional de TLS 1.3 que permite al cliente enviar datos de aplicación en el primer mensaje, antes de que se complete el handshake. Funciona mediante una clave precompartida (PSK) de una sesión anterior. Aunque 0-RTT reduce considerablemente la latencia —algo fundamental para las API con mucho tráfico—, introduce una desventaja importante: los datos iniciales no están protegidos contra ataques de repetición.
Riesgo de ataques de repetición en 0-RTT
En un ataque de repetición contra datos 0-RTT, un atacante que intercepte el mensaje de datos iniciales puede reenviarlo al servidor y provocar potencialmente que la misma acción se ejecute dos veces (por ejemplo, un pago o un cambio de estado). La especificación de TLS 1.3 advierte explícitamente que los datos iniciales 0-RTT solo deben transportar operaciones idempotentes, es decir, operaciones que producen el mismo resultado independientemente del número de veces que se ejecuten, como una solicitud GET. Las operaciones no idempotentes (POST, DELETE) nunca deben utilizar 0-RTT.
Claves precompartidas y reanudación de sesiones
Después de un handshake completo y correcto de TLS 1.3, el servidor envía un mensaje NewSessionTicket que contiene una PSK (Pre-Shared Key) que el cliente almacena. Al volver a conectarse, el cliente incluye esta PSK en su ClientHello mediante la extensión pre_shared_key. El servidor la reconoce y aprueba los datos 0-RTT o vuelve a la reanudación 1-RTT. Los tickets PSK tienen una duración limitada y deben rotarse con frecuencia para limitar el periodo durante el que están expuestos.
Handshake cifrado: ocultación de metadatos
Una mejora importante de TLS 1.3 es que la mayor parte del handshake está cifrada, incluido el certificado del servidor. En TLS 1.2, el certificado del servidor se enviaba en texto plano, lo que permitía a un observador de la red identificar el dominio al que se conectaba el cliente. TLS 1.3 cifra el certificado y la mayoría de los mensajes posteriores del handshake, lo que reduce los metadatos disponibles para los observadores pasivos. Encrypted Client Hello (ECH) es una extensión emergente que oculta incluso el campo SNI (Server Name Indication).
Funciones eliminadas: qué eliminó TLS 1.3
TLS 1.3 eliminó numerosas funciones heredadas que se habían convertido en riesgos: el intercambio de claves RSA (sin secreto hacia adelante), los conjuntos de cifrado en modo CBC (vulnerables a ataques de oráculo de relleno), RC4 (cifrado de flujo completamente vulnerable), la criptografía de nivel de exportación (causa de FREAK y Logjam), MD5 y SHA-1 en firmas digitales, la compresión (causa de CRIME) y la renegociación (causa de múltiples ataques). Al eliminar estos elementos, TLS 1.3 tiene una superficie de ataque considerablemente menor.
Configuración de servidores para TLS 1.3
Implementar TLS 1.3 correctamente requiere configurar el servidor web para que lo prefiera y deshabilitar TLS 1.0 y 1.1. La mayoría de los servidores web modernos (Nginx, Apache, IIS) admiten TLS 1.3 de forma nativa. También debe asegurarse de que OCSP Stapling esté habilitado para proporcionar el estado de revocación del certificado sin que el cliente tenga que ponerse en contacto con la CA, y de que los encabezados HSTS impidan ataques de degradación a HTTP. Utilice herramientas como SSL Labs para verificar que su configuración obtiene una calificación A+.
# Nginx TLS 1.3 configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
add_header Strict-Transport-Security 'max-age=63072000' always;Comprobación rápida
Ponga a prueba sus conocimientos sobre los conceptos de CompTIA Security+ (SY0-701) de esta lección.
Resumen de la lección
En esta lección aprendió que TLS 1.3 completa el handshake en 1-RTT utilizando únicamente el intercambio de claves DH efímeras para proporcionar secreto perfecto hacia adelante; que la reanudación 0-RTT permite reconectarse más rápido mediante PSK, pero es vulnerable a ataques de repetición y solo debe transportar operaciones idempotentes; y que TLS 1.3 elimina todas las funciones heredadas débiles —intercambio de claves RSA, cifrados CBC, RC4, criptografía de exportación y compresión—, reduciendo considerablemente la superficie de ataque. A continuación, exploraremos algoritmos de cifrado autenticado como AES-GCM.
Preguntas frecuentes
¿La lección «Handshake de TLS 1.3 y reanudación 0-RTT» es gratis?
Sí — el texto completo de «Handshake de TLS 1.3 y reanudación 0-RTT» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Security+ Academy, actualiza a CoddyKit PRO. El curso de Security+ Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Handshake de TLS 1.3 y reanudación 0-RTT»?
Siga paso a paso el handshake de TLS 1.3, comprenda cómo logra el secreto perfecto hacia adelante de forma predeterminada y evalúe las ventajas y desventajas de seguridad de la reanudación de sesione… Practicas Security+ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Security+ Academy?
No se requiere experiencia previa. Security+ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Handshake de TLS 1.3 y reanudación 0-RTT»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Security+ Academy?
Sí. Cada lección de Security+ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Handshake de TLS 1.3 y reanudación 0-RTT
- Cifrado autenticado: AES-GCM y ChaCha20-Poly1305
- Funciones de derivación de claves: PBKDF2, bcrypt y Argon2
- Criptografía poscuántica: CRYSTALS-Kyber y Dilithium