Seguridad en el Tráfico de Aplicaciones: Introducción al Protocolo TLS

Introducción a la Seguridad en las Aplicaciones: Protocolo Transport Layer Security

  • Miguel Rodríguez Pérez & Andrés Suárez González: Autores de la presentación del 29 de enero de 2026.
  • Objetivo Central: Proporcionar una guía exhaustiva sobre el protocolo Transport Layer Security (TLS), desde sus fundamentos hasta sus versiones más recientes (1.2 y 1.3).

Contexto y Objetivos de TLS

  • Definición y Evolución: El protocolo TLS es la evolución de SSL (Secure Sockets Layer). Su propósito es proporcionar comunicación segura sobre una infraestructura que es inherentemente insegura.
  • Garantías del Canal Seguro: Provee autenticación, confidencialidad e integridad para servicios de Internet arbitrarios.
  • Metas Principales:
    • Seguridad Criptográfica: Es la razón de su existencia; asegurar que los datos no sean interceptados ni alterados.
    • Interoperabilidad: El protocolo es independiente del sistema operativo o del lenguaje de programación utilizado.
    • Extensibilidad: Es independiente de las primitivas criptográficas reales, como los cifrados y las funciones de hash.
    • Eficiencia: Busca limitar el coste de rendimiento, manteniendo una baja latencia y una baja sobrecarga de la CPU.

Cronología de SSL y TLS

  • SSL 1.0 (1994): Nunca fue lanzado públicamente.
  • SSL 2.0 (Noviembre 1994): Desplegado en Netscape Navigator 1.1. Introdujo los certificados de servidor, pero estaba gravemente roto. Fue deprecado formalmente en 2012.
  • SSL 3.0 (Noviembre 1996): Rediseño completo con soporte de PKI mediante certificados X.509. Deprecado en 2015 debido al ataque POODLE (Padding Oracle On Downgraded Legacy Encryption).
  • TLS 1.0 (Enero 1999): Estandarización de SSL 3.0. Hubo cambios menores realizados para satisfacer a Microsoft, lo que rompió la interoperabilidad con SSL 3.0.
  • TLS 1.1 (Abril 2006): Incluyó correcciones de seguridad. Deprecado en 2021.
  • TLS 1.2 (Agosto 2008): Proporcionó mayor flexibilidad y se convirtió en la versión más común.
  • TLS 1.3 (Agosto 2018): Introdujo mejoras significativas en rendimiento y simplificación de procesos.
  • HTTP/3 (Junio 2022): Uso de QUIC (que cifra por defecto) en lugar de TCP, integrando la negociación de TLS 1.3.
  • Futuro: Investigación en Criptografía Post-Cuántica.

Estado del Soporte de Protocolos (Datos a Junio 2025)

  • El 75.3%75.3\% de los sitios encuestados (101,141101,141 sitios) soportan el protocolo TLS v1.3.
  • Esto representa un incremento del 0.1%0.1\% respecto a mayo de 2025 (75.2%75.2\%, 101,134101,134 sitios).
  • El uso de SSL v2.0, SSL v3.0, TLS v1.0 y TLS v1.1 es residual o inexistente en servidores modernos seguros.

Arquitectura de TLS en Internet

  • Ubicación en la Pila de Protocolos:
    • Aplicación
    • TLS (Subcapas: Handshake, Change Cipher, Alert, App. Data sobre el Record Protocol)
    • Transporte (TCP)
    • Red
    • Enlace
  • Competidores y Alternativas:
    • SSH (Secure Shell): También en la capa de aplicación. Usa criptografía de clave pública o contraseñas. Se basa en "hosts conocidos" y el intercambio de claves en lugar de una estructura jerárquica de PKI. Usos: acceso remoto, transferencia de archivos, túneles.
    • PGP (Pretty Good Privacy): Opera mensaje a mensaje (modo offline). Utiliza una "Red de Confianza" (Web of Trust) descentralizada. Usos: correos electrónicos, archivos, verificación de paquetes de software (ej. Ubuntu).

Protocolo de Registro (Record Protocol)

  • Función: Transporta y, opcionalmente, cifra cada mensaje TLS entre las dos aplicaciones.
  • Estructura del Registro TLS:
    • Cabecera: Contiene el Tipo (Tipo de Registro), Versión y Longitud.
    • Datos: El contenido del mensaje.
    • Contador: Existe un contador adicional de 6464 bits que NO se envía por la red para evitar ataques de repetición.
  • Pasos del Procesamiento:
    1. Fragmentación: Puede fragmentar mensajes mayores a 16,38416,384 bytes o combinar mensajes pequeños.
    2. Compresión: (Opcional, pero en desuso por ataques como CRIME - Compression Ratio Info-leak Made Easy).
    3. MAC: Añade el código de autenticación de mensaje.
    4. Cifrado.
    5. Anexo de la cabecera.
  • Extensibilidad: El protocolo de registro solo maneja el transporte y cifrado; las tareas específicas las realizan cuatro subprotocolos internos: handshake, change cipher spec, application data y alert.

Protocolo Handshake

  • Responsabilidad: Negocia los parámetros de conexión y realiza la autenticación.
  • Estructura del Mensaje: struct { HandshakeType msg_type; uint24 length; HandshakeMessage message; } Handshake;\text{struct \{ HandshakeType msg\_type; uint24 length; HandshakeMessage message; \} Handshake;}
  • Flujos Comunes:
    1. Handshake completo con autenticación del servidor.
    2. Handshake abreviado (reutilización de sesión).
    3. Handshake completo con autenticación mutua.

Pasos del Handshake Completo (TLS 1.2)

  1. Client Hello: El cliente solicita sesión y envía sus capacidades (Cifrados soportados, Número Aleatorio, ID de Sesión).
  2. Server Hello: El servidor selecciona los parámetros de conexión.
  3. Server Certificate: Envío de la cadena de certificados X.509 (omitiendo la raíz).
  4. Server Key Exchange: (Opcional) Información adicional para generar el secreto maestro según el tipo de intercambio de claves.
  5. Server Hello Done: Indica el fin de la negociación por parte del servidor.
  6. Client Key Exchange: El cliente envía información para el secreto maestro.
  7. [Change Cipher Spec]: El cliente activa el cifrado.
  8. Finished: El cliente envía un MAC de todos los mensajes previos.
  9. [Change Cipher Spec]: El servidor activa el cifrado.
  10. Finished: El servidor envía su MAC de verificación.

Diferencias en TLS 1.3

  • Eficiencia: Se reduce el número de mensajes (un RTT menos: de 4 a 3).
  • Cifrado Temprano: El cifrado comienza mucho antes en el proceso.
  • Simplificación: No hay mensajes superfluos como Change Cipher Spec.
  • Intercambio de Claves: Solo soporta DHE (Diffie-Hellman Ephemeral) y PSK (Pre-Shared Key).

Intercambio de Claves y Secretos

  • RSA: El cliente cifra un secreto pre-maestro aleatorio con la clave pública del servidor. No proporciona Forward Secrecy.
  • Diffie-Hellman (DH): Permite derivar una clave secreta sobre un canal inseguro.
    • Estático: No proporciona forward secrecy. Eliminado en TLS 1.3.
    • Efímero (DHE): Los parámetros cambian en cada conexión, proporcionando Forward Secrecy.
  • Master Secret: Tiene una longitud de 4848 bytes (384384 bits). Se deriva mediante una Función Pseudoaleatoria (PRF): master_secret=PRF(pre_master_secret, "master secret", client_random+server_random)\text{master\_secret} = \text{PRF}(\text{pre\_master\_secret, "master secret", client\_random} + \text{server\_random})
  • Handshake Integrity (Finished): verify_data=PRF(master_secret, [client|server] finished, Hash(handshake_messages))\text{verify\_data} = \text{PRF}(\text{master\_secret, [client|server] finished, Hash(handshake\_messages)})

Autenticación y Cifrado

  • Autenticación: Generalmente mediante RSA o ECDSA (Elliptic Curve Digital Signature Algorithm).
  • Tipos de Cifrado:
    • Cifrado de Flujo (Stream): Como RC4 (roto) o ChaCha20. Cifran bit a bit o byte a byte.
    • Cifrado de Bloque: Como AES (128128 bits). Utilizan modos como CBC (Cipher Block Chaining).
    • AEAD (Authenticated Encryption with Associated Data): Proporciona autenticación y cifrado simultáneo. Ejemplos: GCM (Galois Counter Mode), CCM (para IoT) y ChaCha20-Poly1305. Es el único modo permitido en TLS 1.3.

Operaciones Criptográficas y PRF

  • TLS v1.2: Usa por defecto HMAC y SHA256 para la PRF.
  • TLS v1.3: Usa HKDF (Hashed Message Authentication Code-based Key Derivation Function).
  • Función de Expansión (P_hash): P_hash(secret, seed)=i=1HMAC_hash(secret, A(i)seed)\text{P\_hash(secret, seed)} = \bigoplus_{i=1} \text{HMAC\_hash(secret, A(i)} \oplus \text{seed)} Donde: A(1) = seed\text{A(1) = seed}A(i) = HMAC_hash(secret, A(i-1))\text{A(i) = HMAC\_hash(secret, A(i-1))}

Cipher Suites (Resumen de Nomenclatura)

  • En TLS \le 1.2:
    • Ejemplo: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
    • Componentes: Intercambio de claves (ECDHE), Autenticación (RSA), Cifrado (AES), Fortaleza (128), Modo (GCM), PRF (SHA256).
  • En TLS 1.3:
    • Ejemplo: TLS_AES_128_GCM_SHA256
    • Componentes: Cifrado AEAD (AES), Fortaleza (128), Modo (GCM), Algoritmo Hash para HKDF (SHA256).
    • Nota: El intercambio de claves se negocia mediante la extensión supported_groups.

Cierre de Conexión (Alert Subprotocol)

  • Mecanismo de notificación con dos niveles:
    • Fatal: La conexión se corta inmediatamente.
    • Warning (Advertencia): Descripción del error. El mensaje Close Notify es una advertencia para un cierre ordenado que evita ataques de truncamiento.

Referencias Sugeridas

  1. I. Ristić, Bulletproof TLS and PKI, 2nd Ed., Feisty Duck, 2022.
  2. P. Duplys and R. Schmitz, TLS Cryptography In-Depth, Packt Publishing, 2024.
  3. Grok, Corrections and suggestions for updates to PKI and TLS lecture slides, Enero 2026.