¿Qué es la SNI encriptada? | Cómo funciona ESNI

La Indicación del nombre del servidor cifrada (ESNI) ayuda a mantener la navegación del usuario privada. Hace esto mediante la encriptación de una parte no encriptada anteriormente del protocolo de enlace TLS que puede mostrar el sitio web que está visitando el usuario.

Objetivos de aprendizaje

Después de leer este artículo podrás:

  • Descubrir por qué la ESNI es necesaria para la privacidad y la seguridad
  • Comprender cómo funciona la ESNI mediante la criptografía de clave pública y los registros DNS
  • Explorar otros protocolos centrados en la privacidad para una navegación web segura

Contenido relacionado


¿Quieres saber más?

Suscríbase a theNET, el resumen mensual de Cloudflare sobre las ideas más populares de Internet.

Revisa la política de privacidad de Cloudflare para saber más sobre cómo Cloudflare gestiona tus datos personales.

Copiar enlace del artículo

¿Qué es la SNI cifrada (ESNI)?

La Indicación del nombre del servidor cifrada (ESNI) es una función fundamental para mantener los datos de navegación del usuario privados. Asegura que los intrusos no puedan espiar el proceso de protocolo de enlace TLS para determinar los sitios web que visitan los usuarios. La ESNI, como su nombre indica, lleva a cabo esto mediante la encriptación de la parte de Indicación del nombre del servidor (SNI) del protocolo de enlace TLS.

La SNI indica a un servidor web qué certificado TLS debe mostrar al inicio de una conexión entre cliente y servidor. La SNI es una adición al protocolo TLS que permite que un servidor pueda alojar varios certificados TLS en la misma dirección IP.

Tienes que considerar a la SNI como el número de piso en una dirección postal: hay varios pisos en un edificio, así que cada uno de ellos necesita un número diferente para poder distinguirlos. De forma similar, mientras que el servidor se indica mediante la dirección IP, un dispositivo cliente necesita incluir la SNI en su primer mensaje al servidor para indicar a qué sitio web (a qué piso) está intentando llegar.

¿Qué es TLS?

La Transport Layer Security, o TLS, es un protocolo de encriptación que mantiene las comunicaciones privadas y seguras en Internet. TLS se utiliza principalmente para cifrar la comunicación entre las aplicaciones y los servidores web, como cuando los navegadores web cargan un sitio web. Todos los sitios web que utilizan TLS deben tener un certificado TLS. TLS se llama a veces SSL, aunque SSL es un nombre anticuado para el protocolo.

Todas las conexiones TLS empiezan con lo que se llama "protocolo de enlace". Como pasa con un saludo con la mano en la vida real, cuando dos personas se conocen y se presentan, el protocolo de enlace TLS es una serie de comunicaciones de presentación entre un dispositivo cliente (como el teléfono inteligente de un usuario) y una aplicación web o un sitio web. Durante un protocolo de enlace TLS, los dos dispositivos que se comunican entre sí acuerdan las claves de encriptación que van a utilizar, entre otros pasos. A pesar del número de pasos que se tienen que llevar a cabo, un protocolo de enlace TLS solo tarda unos pocos milisegundos.

¿Cómo funciona la Indicación del nombre del servidor (SNI)?

La SNI es una parte pequeña pero fundamental del primer paso del protocolo de enlace TLS. El primer mensaje en un protocolo de enlace TLS se denomina "saludo del cliente". Como parte de este mensaje, el cliente solicita ver el certificado TLS del servidor web. El servidor debe enviar el certificado como parte de su respuesta.

El problema es que muchos servidores web alojan más de un sitio web, y cada sitio web puede tener su propio certificado TLS. Si el servidor muestra el certificado equivocado al cliente, este no podrá conectarse de forma segura al sitio web requerido, lo cual derivará en un error de "Tu conexión no es privada".

La SNI resuelve este problema al indicar a qué sitio web está intentando acceder el cliente. Paradójicamente, no se puede producir encriptación hasta que se haya completado con éxito el protocolo de enlace TLS mediante SNI. Por consiguiente, la SNI normal no está encriptada porque el mensaje de saludo del cliente se envía al principio del protocolo de enlace TLS. Cualquier atacante que esté vigilando la conexión entre el cliente y el servidor podría determinar a qué sitio web se estaba conectando el cliente al leer la parte SNI del protocolo de enlace, aunque el atacante no pueda descifrar el resto de comunicaciones. (Los atacantes podrían usar esta información de varias maneras, por ejemplo, creando un sitio web de phishing para engañar al usuario).

¿Cómo funciona la SNI cifrada?

ESNI mantiene la SNI secreta al encriptar la parte SNI del mensaje de saludo del cliente (y solo esta parte). La encriptación solo funciona si ambas partes de una comunicación, en este caso el cliente y el servidor, cuentan con la clave para encriptar y descifrar la información, como pasa con dos personas que solo pueden utilizar la misma taquilla si ambas tienen la llave. Ya que el mensaje de saludo del cliente se envía antes de que el cliente y el servidor hayan negociado las claves de encriptación TLS, la clave de encriptación ESNI tiene que comunicarse de otra forma.

La solución: criptografía de clave pública. El servidor web añade una clave pública a su registro DNS, para que cuando el cliente busque dónde encontrar el servidor correcto, encuentre también la clave pública del servidor. Es como dejar una llave de casa en una caja fuerte en la puerta de casa para que los invitados puedan entrar con seguridad. Entonces, el cliente puede usar la clave pública para encriptar su registro SNI, de tal modo que solo ese servidor específico pueda descifrarlo. (Esta es una explicación algo simplificada; si quieres una explicación técnica más extensa, consulta esta entrada del blog.)

Imagina que Alicia quiere visitar el sitio web de Bob, www.bobisawesome.example.com. Como todo propietario responsable de un sitio web, Bob usa TLS, para que todo el tráfico hacia y desde su sitio web esté encriptado. Bob también ha implementado ESNI para proteger todavía más a visitantes como Alice.

Cuando Alice escribe https://www.bobisawesome.example.com en su navegador, este lleva a cabo el siguiente proceso para cargar el sitio web:

  1. Su portátil envía una consulta a un servidor DNS para averiguar la dirección IP del sitio web.
  2. La respuesta DNS indica al portátil de Alice qué dirección IP tiene que usar para encontrar el sitio web de Bob, y la respuesta DNS también incluye la clave pública ESNI de Bob.
  3. El portátil de Alice envía un mensaje de saludo del cliente a la dirección IP indicada, y encripta la parte SNI del mensaje mediante la clave pública de Bob.
  4. El servidor web de Bob muestra su certificado TLS.
  5. Se produce el protocolo de enlace TLS y el portátil de Alice carga www.bobisawesome.example.com. Cualquier atacante que pueda estar vigilando la red no puede ver el sitio web que Alice está visitando.*

*Esta última declaración solo es cierta si la parte DNS del proceso usó DNSSEC y DNS sobre HTTPS, o DNS sobre TLS - más a continuación.

¿La navegación web privada se consigue solo con ESNI?

La ESNI es un paso importante para la privacidad y la seguridad en la web, pero también hay otros nuevos protocolos y funciones que son importantes. Internet no se diseñó teniendo en cuenta la seguridad y la privacidad, y, por ello, hay una serie de pasos en el proceso de visita de un sitio web que no son privados. No obstante, hay varios protocolos nuevos que ayudan a cifrar y proteger cada paso ante atacantes maliciosos.

El Sistema de nombres de dominio, o DNS, relaciona las direcciones de sitios web con formato legible por humanos, como www.bobisawesome.example.com, con las direcciones IP alfanuméricas. Es como buscar la dirección de alguien en una gran agenda de direcciones que usa todo el mundo. Sin embargo, el DNS normal no está encriptado, lo cual implica que cualquiera puede ver qué dirección se está buscando, y cualquiera puede hacerse pasar por la agenda de direcciones. Incluso con ESNI habilitado, un atacante es capaz de ver los registros DNS que consultan los usuarios y averiguar los sitios web que visitan.

Hay tres protocolos adicionales que pretenden cerrar estas brechas: DNS sobre TLS, DNS sobre HTTPS y DNSSEC.

Tanto el DNS sobre TLS como el DNS sobre HTTPS hacen lo mismo: encriptar las consultas DNS con encriptación TLS. Las principales diferencias entre ellas son la capa y el puerto de red que utilizan. DNSSEC verifica que los registros DNS sean reales y que proceden de un servidor DNS legítimo, y no de un atacante que se hace pasar por un servidor DNS (como en un ataque de envenenamiento de caché DNS).

¿Qué es Encrypted Client Hello (ECH)?

Encrypted Client Hello (ECH) es otra extensión del protocolo TLS que protege la parte SNI del Hola del cliente mediante encriptación. Sin embargo, a diferencia de ESNI, ECH encripta todo el Hola del Cliente. Más información sobre ECH en esta entrada del blog.

¿Cloudflare es compatible con ESNI?

La red de Cloudflare es compatible con ESNI desde septiembre de 2018. Cloudflare no fue solo la primera red importante en ser compatible con ESNI, sino que Cloudflare también fue fundamental en el desarrollo de ESNI. ESNI todavía no se ha publicado como RFC oficial o estándar de Internet, pero hay un borrador RFC en proceso.

Comprueba la seguridad, la privacidad y el uso de ESNI en tu navegador con esta herramienta de comprobación de ESNI gratuita. Más información sobre por qué se creó la SNI o cómo funciona un protocolo de enlace TLS.