El HelloRetryRequest (HRR) es un mensaje especial introducido en TLS 1.3 que el servidor envía al cliente en respuesta a un ClientHello inicial. Su propósito principal es solicitar al cliente que reenvíe su ClientHello con información adicional o modificada. Esto se utiliza comúnmente para dos escenarios: primero, para mitigar ataques de denegación de servicio (DoS) mediante la emisión de una "cookie" de reintento que el cliente debe incluir en su siguiente ClientHello, demostrando así que es un cliente legítimo y no un atacante que simplemente envía paquetes SYN falsificados. Segundo, para permitir al servidor guiar al cliente en la selección de un grupo de curvas elípticas (elliptic curve group) o un algoritmo de intercambio de claves que el servidor prefiere o requiere, especialmente si el ClientHello inicial no ofrecía uno compatible.
En el mundo real, el HelloRetryRequest es una característica estándar en implementaciones de TLS 1.3. Servidores web populares como NGINX y Apache, cuando están configurados para usar TLS 1.3, pueden emitir HRR. Por ejemplo, Cloudflare utiliza HRR como parte de sus mecanismos de protección contra DDoS. Cuando un cliente se conecta por primera vez, Cloudflare puede enviar un HRR con una cookie criptográfica. El cliente debe procesar esta cookie y reenviar un ClientHello modificado que la incluya. Solo entonces se permite que el handshake TLS continúe. Esto añade una capa de verificación antes de consumir recursos computacionales significativos en el servidor para establecer la conexión TLS completa.
Para un arquitecto de sistemas, entender el HelloRetryRequest es crucial por varias razones. Primero, impacta directamente la latencia de la conexión inicial; un HRR añade un round-trip adicional al handshake TLS, lo que puede ser una consideración importante para aplicaciones sensibles a la latencia. Segundo, es una herramienta poderosa para la seguridad y la resiliencia, permitiendo a los servidores defenderse de ataques DoS a nivel de handshake TLS sin requerir una infraestructura de firewall compleja. Tercero, ofrece flexibilidad en la negociación de parámetros criptográficos, permitiendo al servidor aplicar políticas de seguridad más estrictas o adaptarse a las capacidades del cliente. Al diseñar sistemas, se debe considerar el impacto del HRR en el rendimiento y cómo se integra con las estrategias de mitigación de DDoS existentes, balanceando la seguridad con la experiencia del usuario.