TLS 1.2是否具有针对VerifyData的密码套件特定算法/行为



我正在开发DTLS的Golang实现,无法为VerifyData生成有效值。我在这里有一个工作示例,它显示了我的代码(以及我如何获得与OpenSSL不同的东西(

printf调试OpenSSL看起来握手主体的散列与我的不同。这似乎真的不太可能,我会认为我收集的数据包是错误的。但是将printf语句放在之前

密码套件是TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,您可以在https://github.com/pions/dtls

VerifyData(在Finished中(始终使用TLS定义的PRF,对于TLS1.2(和DTLS1.2(,它是使用散列的双重HMAC,可以依赖于密码套件。对于所有预先存在的密码套件,D/TLS1.2 PRF使用SHA256,您确定的TLS1.2新套件也使用SHA256。(事实上,它只对PRF使用SHA256,因为GCM套件在数据上不使用HMAC。(其他一些新的TLS1.2套件使用SHA384。此外,1.2中VerifyData的长度在形式上取决于密码套件,但所有1.2之前的套件都必须使用1.2之前的协议大小12,并且所有新的1.2版本套件也使用12,因此在实践中没有区别。

然而,根据您的要点,您的问题是您包含了最初的ClientHello和HelloVerifyRequest,而您不应该这样做。请参阅rfc6347中第4.2.1节倒数第二段(倒数第二个,我不经常使用这个词!(,靠近第18页顶部,以及第4.2.6节,其中还指出,尽管这在您的示例中不是问题,但如果使用碎片进行传输,您仍然必须对未碎片化的消息进行散列。

最新更新