DH和DHE有什么区别?

信息安全 tls 密码学 diffie-hellman
2021-08-18 11:20:36

我一直在阅读Bulletproof SSL 和 TLS

Diffie Hellman 是一种密钥交换机制,其中服务器和客户端分别共享秘密,即 g x和 g y,其中 g 是某个组的生成器。他们分别计算秘密 S = (g y ) x和 (g x ) y请注意,中间的攻击者无法从 g x和 g y中获得 S 的值,因为离散对数是一个难题。但是,主动攻击者可以伪装和欺骗服务器和客户端。

DHKE

现在在 RSA_DH 中,服务器发送给客户端的值,即 g x是固定的并存储在证书中。因此,不会发送“ServerKeyExchange”消息。现在,客户端在“ClientKeyExchange”消息中发送它的 g y值,并使用 RSA 公钥加密算法加密,其证书服务器已经在“Certificate”消息中发送。

在 RSA_DHE 中,“ServerKeyExchange”消息发生在服务器向客户端发送 g x的地方。

TLS 握手

现在我的问题是两者之间有什么区别?由于 premaster secret 是根据 (g x ) y的值计算得出的,因此,即使在 RSA_DH 中,如果客户端在每个会话中发送不同的 g y值,那么 (g x ) y的值也会不同。(我认为即使他仍然不支持我的论点)因此它将像 RSA_DHE 一样实现前向保密。而可怜的攻击者即使通过泄露服务器私钥获得了 g y的值,也无法获得 premaster secret 。所以,在这两种情况下,他都无法计算出主秘。那么为什么说 Ephemeral 一个(RSA_DHE)可以实现前向保密而另一个没有呢?

2个回答

Diffie-Hellman 是一种非对称算法,具有公钥和私钥。

在“DH_RSA”密码套件中,服务器的“永久”密钥对是 DH 密钥对。公钥在服务器的证书中。与任何证书一样,该证书已由 CA 签名,并且该 CA 使用 RSA 密钥对(这就是“DH_RSA”中“RSA”的含义)。

在“DHE_RSA”密码套件中,服务器的永久密钥对具有 RSA 类型;RSA 公钥在服务器的证书中(密码套件没有说明颁发 CA 使用的密钥类型,但通常也是 RSA)。当客户端连接时,服务器会生成一个临时的 DH 密钥对,并将公钥作为ServerKeyExchange消息发送给客户端;服务器使用其永久 RSA 私钥对该消息进行签名。

前向保密是相对于不可告人的服务器机密盗窃定义的属性。“DHE_RSA”密码套件提供前向保密,因为实际的密钥交换秘密(DH 私钥)是暂时的,因此不会被服务器保存——如果服务器没有将该密钥保存在其磁盘上,那么它应该不会受到不可告人的影响盗窃。相反,“DH_RSA”意味着 DH 私钥存储在服务器硬盘的某个位置,如果该密钥被盗,则可以解密过去记录的会话。

必须注意的是,一些服务器会将它们的 DH 密钥对保留一段时间,通常在 RAM 中;他们不会为每个客户端制作新的 DH 密钥对。根据定义,这种行为具有一些性能优势,但略微削弱了前向保密性。这实际上取决于您用来定义“不可告人的盗窃”的模型:您是在谈论在垃圾箱中检索旧硬盘,还是在检查 RAM 内容的恶意软件?

但我无法理解为什么简单的 RSA_DH 不支持前向保密。

假设 Alice 是客户端,Bob 是服务器,并使用图表中的变量名称。

在非短暂的 dh b 是证书的一部分,这意味着 B 是长期机密。Eve 记录会话,包括 a 的值。

一段时间后,Eve 抓住了 B,也许她入侵了服务器,也许她打电话给执法部门的朋友,他们强迫服务器管理员交出它。然后 Eve 可以计算B,从而计算会话秘密并解密会话。

短暂的 dh B 只是一个短期的秘密。所以夏娃后来对服务器的妥协不太可能暴露它。