En SSL y TLS, ¿por qué hay un Protocolo de especificaciones de cifrado de cambio separado en lugar de incluir un mensaje change_cipher_spec en el Protocolo de protocolo de enlace?

Para procesar un registro encriptado, tenemos que saber con qué cifrado y claves estaba protegido. El formato de registro en sí no incluye un campo para identificar cuál es el conjunto de parámetros de seguridad que el remitente pretendía para este mensaje específico; se presume que la secuencia solo tiene un único conjunto de parámetros de seguridad en cualquier momento y que el cambio entre ellos se realiza de la siguiente manera:

  • Primero, hay un proceso de protocolo de enlace para establecer un conjunto de parámetros pendientes
  • Luego, un mensaje de cambio de especificación de cifrado indica el último mensaje enviado bajo el antiguo conjunto de parámetros y señala el momento en la secuencia cuando entra en juego el nuevo conjunto de parámetros.

Podría haberse hecho vinculando esa transición de estado al protocolo de protocolo de enlace, pero eso habría creado un acoplamiento entre el procesamiento de bajo nivel en la capa de registro y el procesamiento de nivel superior en la capa de enlace que queríamos evitar; en particular, en ese momento era más viable para el hardware de aceleración TLS implementar el protocolo de cambio de especificaciones de cifrado para que pudieran pasar a un nuevo conjunto de cifrados / claves de lo que era para ellos implementar el protocolo de protocolo de enlace completo, y aunque uno podría imaginar ellos solo implementaron el mensaje de apretón de manos particular necesario para cambiar los cifrados, fue más claro separarlo.