¿Cómo puedo identificar con precisión la cantidad exacta de bytes que ClientHello y ServerHello necesitan en un tráfico TLS?
El tamaño de ClientHello varía. Parte de esto depende de la implementación o configuración de un cliente TLS específico, especialmente la cantidad de cifrados ofrecidos por el cliente y las extensiones. Luego hay diferencias específicas de casos de uso: por ejemplo, el cliente podría agregar la extensión ALPN para indicar el soporte para HTTP / 2 en el caso de un cliente web. El tamaño de la extensión server_name depende del tamaño del nombre de host de destino. Y luego podría haber adicionalmente un identificador de sesión o un ticket de sesión si el cliente intenta reanudar una sesión existente. Solo si se conocen todas estas variaciones, puede calcular el tamaño de ClientHello simplemente completando las partes necesarias en la estructura de ClientHello.
El mismo ServerHello tiene un tamaño de variable similar y depende principalmente del tipo de extensiones agregadas. Pero, después de ServerHello, obtiene partes variables adicionales hasta el mensaje ServerHelloDone, como los certificados (que pueden diferir tanto en número como en tamaño), las partes específicas de intercambio de claves y una solicitud de certificado opcional de tamaño variable. Similar, solo si se sabe todo esto, puede calcular el tamaño del sitio.
Si, en cambio, solo desea obtener algunas estadísticas sobre esto, puede hacer una captura de paquetes de su caso de uso favorito, extraer las partes relevantes y medir su tamaño (o mirar los campos de longitud como sugiere RoraZ). Tenga en cuenta que cualquier conclusión que saque de esto solo se aplica al caso de uso y al contexto que ha medido. Puede ser muy diferente si se usan otros clientes u otros servidores o incluso si se usan los mismos clientes o servidores pero el nombre de host y los certificados difieren.
Si ya ha capturado el tráfico, obtener el tamaño de cada registro es simple, ya que todos los registros siguen la misma estructura descrita en RFC 5246 sección 6.2 Record Layer : primero es el ContentType (un byte - 0x16 para los registros en el protocolo de enlace TLS), luego la versión del protocolo (dos bytes) y luego tiene la longitud de los datos restantes (uint16 , es decir, dos bytes).