La seguridad de la capa de transporte (TLS) está diseñada para añadir seguridad a las comunicaciones de red. Es la diferencia entre HTTP y HTTPS cuando se navega por Internet.
El uso de TLS crea trabajo adicional para el cliente y el servidor, pero tiene sus ventajas, entre ellas:
- Confidencialidad: TLS Envuelve el tráfico en un túnel cifrado. Esto hace imposible que un fisgón lea o modifique el tráfico en su camino hacia el destino.
- Autenticación: TLS Demuestra la identidad del servidor al cliente. Esto es útil para protegerse de los sitios de phishing.
- Integridad: TLS Incluye protecciones que ayudan a identificar si los datos han sido modificados o corrompidos en tránsito.
Todas ellas son características valiosas a la hora de navegar por la web. Por eso TLS es tan popular y por eso la mayoría de las visitas a un sitio web empiezan con un apretón de manos TLS .
¿Qué es el TLS Handshake?
Como un apretón de manos en la vida real, el TLS handshake es una introducción. Establece que dos ordenadores quieren hablar entre sí de forma segura.
Un apretón de manos TLS también define algunas de las reglas de esta conversación. Tanto el cliente como el servidor están de acuerdo en que quieren beneficiarse de TLS, pero tienen que ponerse de acuerdo en los detalles. Un apretón de manos TLS les lleva desde un "Hola" inicial hasta el punto en que pueden empezar a hablar en privado.
Antes de entrar en detalles sobre el apretón de manos de TLS , es importante entender algunas palabras clave. TLS es un protocolo centrado en la seguridad, lo que significa que utiliza mucha criptografía. Algunos términos importantes que hay que conocer cuando se habla de TLS son:
- Cifrado asimétrico:La criptografía asimétrica o de "clave pública " utiliza dos claves relacionadas: una pública y otra privada. Cualquier cosa cifrada con una clave pública puede descifrarse con la clave privada correspondiente. Del mismo modo, 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 cifrar como para descifrar. Esto es útil porque es más eficiente que el cifrado con criptografía asimétrica. El protocolo TLS está diseñado para establecer una clave de cifrado simétrica compartida.
- Suites de cifrado: Un conjunto de cifrado es una combinación de algoritmos criptográficos utilizados en el protocolo TLS . Incluye un algoritmo de cifrado asimétrico para el apretón de manos, 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 se han corrompido en tránsito.
- Certificado digital: Un certificado digital demuestra la propiedad de una clave pública. Los servidores presentan un certificado digital durante el apretón de manos TLS para que el cliente sepa que se está comunicando con la persona adecuada.
Dentro del apretón de manos TLS
El objetivo del handshake TLS es que el cliente y el servidor acuerden una clave de cifrado simétrica compartida de forma segura. Para ello, utilizan el cifrado asimétrico, que permite enviar mensajes cifrados utilizando únicamente una clave pública.
Los detalles del handshake TLS dependen del algoritmo de cifrado asimétrico utilizado. Un cliente y un servidor que utilizan RSA siguen los siguientes pasos:
- Hola del cliente: El cliente inicia el handshake TLS enviando información de configuración al servidor. Esto incluye datos como la(s) versión(es) de TLS que admite el cliente, qué conjuntos de cifrado puede utilizar y algunos datos aleatorios denominados "cliente aleatorio".
- Hola del servidor: El servidor responde con un mensaje que incluye sus elecciones de versión 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 los mensajes enviados al servidor. Tras verificar la validez del certificado, el cliente genera otro valor aleatorio denominado secreto premaster. Utilizando la clave pública del servidor, el cliente cifra este valor y lo envía al servidor.
- Claves de sesión: El servidor utiliza su clave privada para descifrar el secreto premaster. En este punto, tanto el cliente como el servidor tienen la clave aleatoria del cliente, la clave aleatoria del servidor y el secreto premaster. A partir de ellos, calculan una clave de sesión compartida. Como el secreto premaster es un valor secreto (sólo se envió cifrado a través de la red), la clave de sesión también es secreta.
- Cliente finalizado: Para completar el handshake TLS , el cliente envía un mensaje al servidor cifrado con la clave de sesión. El servidor descifra este mensaje y comprueba si es correcto. Si coincide, el servidor sabe que el cliente ha calculado correctamente la clave de sesión.
- Servidor finalizado: 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 ha calculado correctamente la clave de sesión.
En este punto, el cliente y el servidor tienen una clave de cifrado compartida que sólo ellos conocen. Durante el resto de la sesión TLS , todos los mensajes se cifrarán utilizando esta clave de sesión.
Una estructura alternativa
Como ya se ha mencionado, 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 deciden 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 cliente aleatorio, el servidor aleatorio 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 secreto premaster.
Utilizando estos parámetros Diffie-Hellman y los aleatorios del cliente y el servidor, 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 apretón de manos básico
El proceso descrito aquí es el apretón de manos 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 ciertas ventajas.
Por ejemplo, el handshake básico de TLS utiliza un certificado digital para autenticar al servidor frente al cliente, pero no autentica al cliente frente al servidor. Una versión modificada del handshake TLS puede enviar también el certificado digital del cliente al servidor, consiguiendo así una autenticación mutua.