其实这个报文的目的就是告诉对端自己在整个握手过程中收到了什么数据,发送了什么数据。来保证中间没人篡改报文。
其次,这个报文作用就是确认秘钥的正确性。因为Encrypted handshake message是使用对称秘钥进行加密的第一个报文,如果这个报文加解密校验成功,那么就说明对称秘钥是正确的。
计算方法也比较简单,将之前所有的握手数据(包括接受、发送),计算md运算,然后计算prf,然后就是使用协商好的对称密钥进行加密了。
第一步 MD运算:
md算法根据协议、算法不同,计算方式不一样。
(1)对于TLS1.2,摘要算法是sha256,即md_result = sha256(all_handshake);
(2)对于TLS1.0 1.1,摘要算法是md5和sha1结果的拼接,即 md_result = md5(all_handshake) + sha1(all_handshake)。
(3)特殊情况:如果加密套件中指定了sha384算法,例如RSA_WITH_AES256_CBC_SHA384加密套件,则无论协商使用tls哪个版本,都用sha384,即md_result = sha384(all_handshake)。
第二部 PRF运算:
计算完摘要后,客户端按这种格式:“client finished”+ md_result,作为prf的输入。PRF的输出指定为12字节。12字节的数据前填充4字节message头部信息,就可以送入对称加密流程进行加密了。
PRF运算有机会单讲,其实就是P_HASH运算,P_HASH就是不断hmac运算,直到计算出预定指定长度的值为止。
具体TLS1.0 1.1 和TLS1.2的PRF算法略不同。
我们将prf解密后,可以看到如下格式:
14 代表 finished 类型的message, 00 00 0c 三字节表示后续的prf长度,是12字节。也就是说对称加密的的输入就是
14 00 00 0c + 12字节PRF。
前四个字节就是上面所谓的头。
---------------------
作者:Mrpre
来源:CSDN
原文:https://blog.csdn.net/mrpre/article/details/77868570
版权声明:本文为博主原创文章,转载请附上博文链接!