Seguridad web: TLS

¿Qué es TLS? En este artículo verás su funcionamiento, cómo TLS protege el tráfico HTTP y las diferencias con SSL.

Introducción

En el artículo Cómo funciona internet vimos como funcionaba el sistema de 4 capas sobre el que se asienta el envío de datos en Internet. Si no leíste el artículo te recomiendo hacerlo para poder entender éste mejor. ¿Ya lo leíste? Genial. Como habrás podido deducir, cualquier intermediario que esté escuchando el flujo de información será capaz de recoger esos paquetes de datos y espiar su contenido. Esto, como es obvio, es un problema de seguridad y privacidad muy grande.

¿La solución? Encriptar todos los paquetes de datos para que los nodos intermedios solo puedan interceptar datos cifrados que no tienen ninguna utilidad. Y aquí es donde aparece TLS.

TLS

TLS (Transport Layer Security) es un protocolo criptográfico que añade seguridad a la capa de transporte (de ahí su nombre). Esto es importante, hay que tener claro que el cifrado no se añade a nivel de aplicación. Es decir, si inicias sesión en una página web utilizando el navegador, tus datos no se cifran en el navegador, se cifran en la capa de transporte. Por lo tanto HTTPS no significa HTTP + TLS, significa que HTTP está por encima de una capa de transporte (en este caso TCP) que es criptográficamente segura gracias a TLS. El orden sería HTTP -> TLS -> TCP -> ...

TLS y SSL

En 1995, Netscape creó la familia de prococolos SSL (Secure Socket Layer). El propósito era, principalmente, proveer al protocolo HTTP de cifrado creando así lo que conocemos como HTTPS. En los años posteriores SSL fue mejorando y avanzando de versión. Fue en 1999 cuando el IETF (Internet Engineering Task Force) creó y estandarizó TLS 1.0, un protocolo muy similar a SSL 3.0 que venía para reemplazar a la familia de protocolos SSL y así evitar futuros problemas de patentes. Desde entonces, las distintas versiones de SSL han ido quedando obsoletas y hoy por hoy el protocolo TLS ha avanzado a la versión 1.2 (aunque ya hay un borrador para la versión 1.3).

Cómo funciona TLS

El protocolo TLS tiene dos funciones: autentificar y cifrar.

SYNCLIENTEACKClientHelloRequestSYN ACKSERVIDORServerHelloCertificateServerHelloDoneChangeCipherSpecFinishedResponseClientKeyExchangeChangeCipherSpecFinishedTCPCONEXIONSEGURATLS
Flujo de mensajes conocido como handshake

La autentificación entre el cliente y el servidor se lleva a cabo en el proceso llamado handshake. Este procedimiento se realiza en varios pasos, siendo el primero el de intercambiar versiones de TLS/SSL soportadas y los conjuntos de cifrado (cipher suites) compatibles. Más adelante veremos para que sirven estos conjuntos de cifrado. El servidor también envía al cliente su certificado basado en el estándar X.509.

El cliente comprueba la validez del certificado para asegurarse de que el servidor es quien dice ser, y no alguien interceptando el proceso de handshake y suplantando la identidad del servidor.

Tras esto, servidor y cliente generan una clave maestra simétrica que se utilizará para cifrar los datos y poder intercambiar información de manera segura.

Según los conjuntos de cifrado y el orden de preferencia especificada por el servidor se utilizará un algoritmo criptográfico u otro para generar la clave maestra. Vamos a ver un par de ejemplos.

RSA

Utilizando RSA, el cliente genera la clave maestra y se la manda al servidor de manera encriptada utilizando la clave pública del servidor que se recibió junto al certificado. Después el servidor, utilizando su clave privada, desencripta la clave maestra y así ambos conocen la clave y pueden utilizarla para cifrar mensajes futuros.

(EC)DH

El cifrado de Curva Elíptica a través del algoritmo criptográfico Diffie-Hellman (EC-DH por sus siglas en inglés: Elliptic Curve Diffie-Hellman) es un sistema criptográfico que hace uso de un problema matemático distinto. En este caso, cliente y servidor deben colaborar para generar una clave maestra utilizando claves asimétricas.

Esto quiere decir que ambos generan un par de claves Diffie-Hellman (una clave pública y una clave privada). Después, a través de las claves públicas, ambos llegan a un acuerdo y generan la clave maestra simétrica que se utilizá para cifrar los datos.

Perfect forward secrecy

Perfect forward secrecy (PFS) es un término criptográfico que garantiza que el descubrimiento de una clave maestra actual no compromete comunicaciones del pasado.

Imagina que alguien malvado (llamémosle NSA) se dedica a monitorizar y almacenar todo el tráfico encriptado a través de una conexión protegida con TLS. Está bien, no pueden leerlo, pero... ¿Qué va a pasar cuando la NSA consiga descifrar la clave maestra? Exacto, tendrán acceso a toda la información. Y esto es preocupante dado que en criptografía, lo que hoy en día es difícil dentro de unos años será muy sencillo de resolver. Recuerda la diferencia de potencia entre un ordenador de los años 90 y uno de hoy en día.

Cualquier algoritmo criptográfico puede garantizar PFS cambiando de clave maestra en cada nueva conexión. Aún así, se suele utilizar EC-DH ya que es más rápido a la hora de generar claves. En este caso estaríamos hablando de claves efímeras, por lo que el sistema exacto se conoce como (EC)DHE (E de ephemeral).

Gracias a esta variante, un nuevo par de claves Diffie-Hellman se generan en cada conexión TCP formando así una clave maestra única en cada sesión. Si se compromete una clave maestra solo afectará a los datos compartidos en dicha conexión. De esta manera, si la NSA quiere espiar va a tener que elegir cuidadosamente el tráfico que quiere monitorizar, ya que descifrar una clave maestra puede ser factible, pero miles... es más complicado.

Activar PFS en el servidor es sencillo, solo hay que activar los algoritmos efímeros como (EC)DHE y desactivar todos los demás. El problema es que, a día de hoy, algunos navegadores antiguos no son compatibles con este algorimo y necesitan de RSA. Estableciendo el orden de preferencia y limitando (dentro de los posible) el uso de algoritmos no efímeros, podemos garantizar PFS en la mayoría de conexiones.

Conclusión

En este artículo hemos visto a grandes rasgos cómo se garantiza un mínimo de seguridad tanto en el presente como en el futuro utilizando TLS.

Puedes apoyarme para que pueda dedicar aún más tiempo a escribir artículos y tener recursos para crear nuevos proyectos. ¡Gracias!