El protocolo Transport Layer Security (TLS) está diseñado para añadir seguridad a las comunicaciones de red. Es la diferencia entre HTTP y HTTPS al navegar por Internet.
El uso de TLS genera trabajo adicional para el cliente y el servidor, pero ofrece beneficios, entre ellos:
- Confidencialidad: TLS encapsula el tráfico en un túnel cifrado. Esto hace imposible que un interceptor lea o modifique el tráfico en su camino hacia el destino.
- Autenticación: TLS prueba la identidad del servidor al cliente. Esto es útil para protegerse contra sitios de phishing.
- Integridad: TLS incluye protecciones que ayudan a identificar si los datos han sido modificados o corrompidos durante el tránsito.
Todas estas son características valiosas al navegar por la web. Por eso TLS es tan popular y por qué la mayoría de las visitas a un sitio web comienzan con un handshake TLS.
¿Qué es el handshake TLS?
Al igual que un apretón de manos en la vida real, el handshake TLS es una introducción. Establece que dos ordenadores desean comunicarse entre sí de forma segura.
Un handshake TLS también define algunas de las reglas para esta conversación. Tanto el cliente como el servidor acuerdan que desean los beneficios de TLS, pero necesitan ponerse de acuerdo sobre los detalles. Un handshake TLS los lleva desde un "Hola" inicial hasta el punto en que pueden empezar a comunicarse de forma privada.
Antes de profundizar en los detalles del handshake TLS, es importante comprender algunos términos clave. TLS es un protocolo centrado en la seguridad, lo que significa que utiliza mucha criptografía. Algunos términos importantes que debe conocer al hablar de TLS incluyen:
- Cifrado asimétrico: El cifrado asimétrico o de "clave pública" utiliza dos claves relacionadas: una pública y una privada. Cualquier cosa cifrada con una clave pública puede descifrarse con la clave privada correspondiente. De manera similar, una firma digital generada con una clave privada puede validarse con la clave pública asociada.
- Cifrado simétrico: El cifrado simétrico utiliza la misma clave tanto para el cifrado como para el descifrado. Esto es útil porque es más eficiente que el cifrado con criptografía asimétrica. El handshake TLS está diseñado para establecer una clave de cifrado simétrico compartida.
- Conjuntos de cifrado (Cipher Suites): Un conjunto de cifrado es una combinación de algoritmos criptográficos utilizados en el protocolo TLS. Esto incluye un algoritmo de cifrado asimétrico para el handshake, un algoritmo de cifrado simétrico para cifrar los datos enviados a través de la conexión, un algoritmo de firma digital y una función hash utilizada para verificar que los datos no han sido corrompidos en tránsito.
- Certificado digital: Un certificado digital prueba la propiedad de una clave pública. Los servidores presentan un certificado digital durante el handshake TLS para que el cliente sepa que se está comunicando con la entidad correcta.
Dentro del Handshake de TLS
El objetivo del handshake de TLS es que el cliente y el servidor acuerden una clave de cifrado simétrico compartida de forma segura. Para ello, utilizan cifrado asimétrico, lo que permite enviar mensajes cifrados utilizando únicamente una clave pública.
Los detalles del handshake de TLS dependen del algoritmo de cifrado asimétrico utilizado. Un cliente y un servidor que emplean RSA siguen los siguientes pasos:

- Client Hello: El cliente inicia el handshake de TLS enviando información de configuración al servidor. Esto incluye datos como la(s) versión(es) de TLS compatible(s) con el cliente, los conjuntos de cifrado que puede utilizar y algunos datos aleatorios denominados “client random”.
- Server Hello: El servidor responde con un mensaje que incluye sus elecciones de versión de TLS y conjunto de cifrado, su certificado digital y el “server random”.
- Premaster Secret: El certificado digital proporcionado por el servidor contiene su clave pública, que puede utilizarse para cifrar mensajes enviados al servidor. Tras verificar la validez del certificado, el cliente genera otro valor aleatorio denominado premaster secret. Utilizando la clave pública del servidor, el cliente cifra este valor y lo envía al servidor.
- Session Keys: El servidor utiliza su clave privada para descifrar el premaster secret. En este punto, tanto el cliente como el servidor disponen del client random, server random y el premaster secret. A partir de estos, calculan una clave de sesión compartida. Dado que el premaster secret es un valor secreto —solo se envió de forma cifrada a través de la red—, la clave de sesión también es secreta.
- Client Finished: Para completar el handshake de TLS, el cliente envía un mensaje al servidor cifrado con la clave de sesión. El servidor descifra este mensaje y verifica su corrección. Si coincide, el servidor sabe que el cliente calculó correctamente la clave de sesión.
- Server Finished: El servidor también envía un mensaje cifrado con la clave de sesión compartida. Descifrar y verificar este mensaje demuestra al cliente que el servidor calculó correctamente la clave de sesión.
En este punto, el cliente y el servidor disponen de una clave de cifrado compartida conocida solo por ellos. Durante el resto de la sesión de TLS, todos los mensajes se cifrarán utilizando esta clave de sesión.
Una estructura alternativa
Como se mencionó anteriormente, el uso de diferentes algoritmos de cifrado asimétrico puede provocar pequeños cambios en los pasos. Por ejemplo, si el cliente y el servidor optan por utilizar Diffie-Hellman en lugar de RSA, el contenido de los mensajes enviados en los pasos 2 y 3 se modifica ligeramente:
- En el paso 2, el servidor enviará un paquete firmado digitalmente que contiene el client random, el server random y su parámetro Diffie-Hellman.
- Tras validar la firma digital, el cliente responde con un mensaje que contiene su parámetro Diffie-Hellman en lugar de un premaster secret.
Utilizando estos parámetros Diffie-Hellman y los client y server randoms, es posible que el cliente y el servidor calculen una clave privada secreta compartida. Al final, Diffie-Hellman y RSA producen el mismo resultado de formas ligeramente diferentes.
Más allá del handshake básico
El proceso aquí descrito es el handshake básico de TLS, que se utiliza en la mayoría de las sesiones de TLS. Sin embargo, es posible añadir pasos adicionales que proporcionan ciertos beneficios.
Por ejemplo, el handshake básico de TLS utiliza un certificado digital para autenticar el servidor ante el cliente, pero no autentica el cliente ante el servidor. Una versión modificada del handshake de TLS puede enviar también el certificado digital de un cliente al servidor, logrando así la autenticación mutua.