我一直在阅读Bulletproof SSL 和 TLS
Diffie Hellman 是一种密钥交换机制,其中服务器和客户端分别共享秘密,即 g x和 g y,其中 g 是某个组的生成器。他们分别计算秘密 S = (g y ) x和 (g x ) y。请注意,中间的攻击者无法从 g x和 g y中获得 S 的值,因为离散对数是一个难题。但是,主动攻击者可以伪装和欺骗服务器和客户端。
现在在 RSA_DH 中,服务器发送给客户端的值,即 g x是固定的并存储在证书中。因此,不会发送“ServerKeyExchange”消息。现在,客户端在“ClientKeyExchange”消息中发送它的 g y值,并使用 RSA 公钥加密算法加密,其证书服务器已经在“Certificate”消息中发送。
在 RSA_DHE 中,“ServerKeyExchange”消息发生在服务器向客户端发送 g x的地方。
现在我的问题是两者之间有什么区别?由于 premaster secret 是根据 (g x ) y的值计算得出的,因此,即使在 RSA_DH 中,如果客户端在每个会话中发送不同的 g y值,那么 (g x ) y的值也会不同。(我认为即使他仍然不支持我的论点)因此它将像 RSA_DHE 一样实现前向保密。而可怜的攻击者即使通过泄露服务器私钥获得了 g y的值,也无法获得 premaster secret 。所以,在这两种情况下,他都无法计算出主秘。那么为什么说 Ephemeral 一个(RSA_DHE)可以实现前向保密而另一个没有呢?