TLS 重新协商是如何解决的?

信息安全 tls 安全重新协商
2021-08-16 20:20:15

我已经阅读了关于 TLS 安全重新协商扩展的 RFC 5746。但是,我不明白它如何解决问题。

客户端和服务器需要在 ClientHello 和 ServerHello 消息中包含上一次握手的 verify_data。该修复程序可防止作为活动 MITM 的攻击者。难道这个攻击者不能把他的 verify_data 包含在他从客户端截获的 ClientHello 中(记住,这都是未签名的,密钥交换正在进行中)并从服务器响应的 ServerHello 中剥离 verify_data 吗?这样,服务器会认为正在进行安全重新协商,而客户端会看到一个空的 renegotiated_connection 字段,这与它正在启动新连接的事实相对应。

我的推理一定是错误的,有人可以指出吗?

1个回答

在 TLS 握手中,“已完成”消息包含一个值,该值是迄今为止交换的所有握手消息的哈希值(对于此握手)。如果攻击者更改了 ClientHello,那么哈希将不匹配:当第二次握手完成时(从客户端的角度来看,第一次也是唯一一次握手,从服务器的角度来看是第二次握手),客户端发送一个“Finished” ' 攻击者无法修改的消息(它是用新协商的密钥加密和 MAC 化的),并且该消息包含一个哈希计算机,其中包括客户端发送的 ClientHello 。如果服务器看到一个不同的 ClientHello(一个没有重新协商扩展的),那么他将计算一个不同的哈希,“完成”的内容将不匹配,连接将被中止。