En SSL / TLS, el hash es handshake messages , es decir, el contenido sin cifrar. La entrada de hash incluye los encabezados de 4 bytes para cada mensaje de intercambio (un byte para el tipo de mensaje, tres bytes para la longitud del mensaje); sin embargo, no contiene los encabezados de grabación, ni nada relacionado con el procesamiento de registros (por lo tanto, sin relleno o MAC). El mensaje "ChangeCipherSpec" (un solo byte de valor 1) no es un "mensaje de intercambio", por lo que no se incluye en la entrada de hash.
Cada mensaje de saludo puede dividirse en varios registros; De manera similar, un solo registro puede contener varios mensajes de intercambio. Esta división y fusión no tiene ningún impacto en el proceso de hash.
Esto se especifica realmente en el RFC:
handshake_messages
All of the data from all messages in this handshake (not
including any HelloRequest messages) up to, but not including,
this message. This is only data visible at the handshake layer
and does not include record layer headers. This is the
concatenation of all the Handshake structures as defined in
Section 7.4, exchanged thus far.
Nota obligatoria: debe indicarse que diseñar un protocolo como SSL / TLS es muy difícil ; Muchos de los detalles pueden ser erróneos y poner en peligro la seguridad. El TLS real se equivocó en varios puntos, y esto provocó muchos problemas (consulte esta respuesta ). Definir su propio protocolo y hacer su propia implementación, está bien con el propósito de aprender o simplemente divertirse, pero le insto a que reconsidere cualquier importancia al implementar tales cosas para uso de producción.