当 RSA 私钥泄露时,非临时 Diffie-Hellman 密钥交换如何在 SSL 中受到损害?

信息安全 加密 tls diffie-hellman
2021-08-22 05:52:30

据我了解,对于 SSL / TLS,我们推荐 Diffie-Hellman Ephemeral(例如 DHE 或 ECDHE)而不是非临时 DH 的主要原因之一是 RSA 私钥(即私有证书)的泄露将允许攻击者解密以前捕获的对话。相比之下,除非攻击者在对话时持有密钥,否则短暂应该阻止解密。

这种非临时 Diffie-Hellman 密钥交换的解密如何在这种情况下工作?这仅仅是观察通过网络交换的未加密原语的情况吗?如果是这样,那么使用 DH 的意义何在,如果它没有提供与使用 RSA 加密密钥相比没有额外的安全性,并且 RSA 已经提供了服务器的身份验证?

3个回答

首先让我们确定我们谈论的是同一件事。SSL中,有“临时 DH 密码套件”(DHE)和“非临时 DH 密码套件”(DH)。

使用 DHE,服务器私钥(永久的,存储在文件中的,其公钥在服务器证书中)是 RSA(DHE_RSA 密码套件)或 DSS(DHE_DSS 密码套件)类型,并且是仅用于签名服务器生成一个新的随机DH密钥对(私钥不会被存储,这就是完美前向保密的实现方式:如果从未存储过的私钥之后就不能被窃取),并将公钥发送给客户端,在服务器使用其 RSA 或 DSS 私钥签名的消息中。

使用 DH 密码套件,永久服务器私钥DH 私钥。服务器证书包含 DH 公钥。服务器看不到其 RSA 密钥被盗,因为服务器没有 RSA 密钥。服务器只有一个 DH 密钥。当密码套件称为“DH_RSA”时,它的意思是“服务器密钥是 DH 密钥,并且服务器证书是由使用 RSA 密钥的证书颁发机构颁发(即签名)的” 。

窃取参与 DH 密钥交换的一方的 DH 私钥允许对共享秘密进行不可告人的重建,就像 RSA 一样。在“ephemeral DH”中,PFS 是通过“ephemeral”而不是通过“DH”获得的。从技术上讲,有可能拥有“临时 RSA”,但实际上并没有这样做(*),因为生成新的 RSA 密钥对有点昂贵,而生成新的 DH 密钥对很便宜。

(*) 作为“出口”密码套件的一部分,旧版本的 SSL 可以使用临时 RSA 密钥,以符合 2000 年之前的美国出口法规:服务器可以有一个 1024 位签名RSA 密钥,并生成一个用于密钥交换的临时 512 位 RSA 密钥对,用于加密模式。不过,我不记得在野外见过这种情况,而且自从美国取消了对关键尺寸的出口法规以来,这还没有实际意义。


存在非临时 DH 密码套件是为了允许具有 DH 证书的服务器运行。证书中存在 DH 密钥是因为在过去,RSA 获得了专利,但 DH 没有,因此标准化机构,特别是 NIST,正在推动 DH 作为必须实施的标准。

不过,现实赶上了这一点。我从未见过使用 DH 证书的 SSL 服务器。每个人都使用 RSA。无论如何,RSA 专利在十年前就到期了。

对于 SSL/TLS,我们需要两件事:

1) client needs to authenticate the server.
2) client and server need to compute a symmetric session key.

两者兼得的几种方法:

最常见:TLS_RSA_WITH_AES_...

RSA is used for both 1 (authentication) and 2 (computing symmetric key).

首选:TLS_DHE_RSA_WITH_AES_... 或 TLS_ECDHE_RSA_WITH_AES_...

RSA is used for 1 (authentication) and for signing the DHE keys.
DHE is used for 2 (computing symmetric key).

首选,因为您获得完美前向安全性 (PFS)

不常见:DH_RSA_...(这是 OP 问题中的非临时 DH)

DH is used for both 1 (Authentication) and 2 (computing symmetric key).

您所指的情况是第 3 个(“不常见”),如您所见,RSA 既不用于 1(身份验证)也不用于 2(计算对称密钥),因此不存在 RSA 私钥被泄露的问题. DH_RSA 中的 RSA 可能会产生误导,但正如 Tom Leek 所提到的,服务器的管理员将向 CA(证书颁发机构)提供凭据及其 DH 公钥,然后 CA 将使用 CA 的 RSA 私钥签署 DH 公钥。

您已经询问过使用非临时(静态)Diffie-Hellman 密钥交换及其与使用 RSA 加密密钥会话密钥(预主密钥)相比的优缺点。

在 TLS_DH_RSA_WITH_... 中,签名算法 (RSA/DSS) 表示 CA 用于签署证书的签名算法,并且没有签名作为握手的一部分;如果服务器到达相同的会话密钥,那么它必须具有匹配的 DH 私钥。迈克·昂斯沃思

因此,“TLS_DH_”密码套件中的“ RSA ”或“ DSS ”部分具有误导性。它仅表示 CA 用于签署 DH 参数(公钥)的算法,而不是 TLS 握手期间使用的实际签名算法。

在“TLS_DH_”密码套件中,客户端有两种方式向服务器提供其公共 DH 参数(公钥):

  1. 通过客户证书;
  2. 通过 ClientDiffieHellmanPublic 类型的 ClientKeyExchange 消息。

如果客户端发送的证书包含合适的 Diffie-Hellman 密钥(用于 fixed_dh 客户端身份验证),则 Yc 是隐式的,不需要再次发送。在这种情况下,将发送客户端密钥交换消息,但必须为空。( RFC 5246, 7.4.7.2 )

当使用带有客户端证书的静态 Diffie-Hellman 时,您可以一次性获得相互身份验证,因为客户端证书和服务器证书用于生成会话密钥。

DH 表示密码套件,其中服务器的证书包含由证书颁发机构 (CA) 签名的 Diffie-Hellman 参数。[...] 服务器 [...] 请求 Diffie-Hellman 证书。客户端提供的任何 Diffie-Hellman 证书都必须使用服务器描述的参数(组和生成器)。RFC 5246 的第 A.5 节

请注意,带有 DH 参数的证书无论如何都很少见。

理论上,如果您比较 DH 与 RSA 的速度和安全性,则没有重大差异(尽管如此,还是有一些细节)。

实际上,由于公共 CA 不再颁发带有 DH 参数的证书,因此您不能使用“TLS_DH_”密码套件,因此 RSA 是您提到的两种非 PerfectForwardSecrecy 算法之间的唯一选择。