Después de leer algunos documentos, por fin puedo responder mi propia pregunta.
Básicamente tuve un malentendido.
Es importante conocer el " TLS Record Protocol ". Este protocolo es la base de TLS y siempre se utiliza. Al principio para Handshake y al final cuando Handshake terminó y los datos se transmiten a través de TLS (cuando se usa HTTPS, esto es HTTP).
(tomadodelartículo Wikipedia en alemán sobre TLS ; CC-BY-SA 3.0 )
Sin embargo, al principio, obviamente no hay encriptación o HMAC que el cliente y el servidor pueden usar para asegurar los mensajes intercambiados, ya que aún no han acordado usar un cifrado (esto se hace en Handshake).
Así que tienen que usar un cifrado sin ningún tipo de cifrado y protección de integridad . Esto es TLS_NULL_WITH_NULL_NULL
.
Una vez que la capa de grabación se inicializa con este cifrado, que básicamente no ofrece protección, puede comenzar el protocolo de enlace.
Por lo tanto, los mensajes de saludo del cliente y el servidor están desprotegidos y un atacante puede manipularlos.
Para proteger todo el proceso, los mensajes Finished
(que se intercambian al final del protocolo de enlace) contienen un hash (HMAC) de todos los mensajes enviados anteriormente y, por lo tanto, permiten que el cliente y el servidor verifiquen la integridad de estos mensajes.
En SSL 3.0 hasta TLS 1.1 se usa una combinación de MD5 y SHA-1. En TLS 1.2 se usa el HMAC definido en el cifrado. Más detalles son que se explica aquí .
El problema es que la clave utilizada en el HMAC y el HMAC en sí puede ser débil. P.ej. podría el HMAC estar usando un hash MD5 (como en el ataque SLOTH contra TLS 1.2).
Esto también fue explicado por el
El mecanismo de protección de bajada de TLS
en sí depende de parámetros descargables.
- por lo tanto, la única solución es encontrar y deshabilitar a todos los débiles
parámetros: grupos, curvas, algoritmos mac, ...
Cómo se explican detalladamente los ataques de degradación en cifrados EXPORT se explica en esta respuesta .