TLS-RSA 与 TLS-ECDHE-RSA 与静态 DH

信息安全 tls 验证 证书 openssl 证书颁发机构
2021-08-25 08:10:48

我知道有很多文章解释了这个主题,在我发布我的问题之前,这是我目前对它的理解:

ECDHE-RSA = 服务器随机生成一个 DH 密钥对,因为证书没有足够的信息发送给客户端以生成主密钥。DH 公钥在“服务器密钥交换”数据包中发送。秘密永远不会通过网络发送。密码套件中的“RSA”指的是随机 DH 公钥签名,而不是证书签名。

静态 DH = 服务器在证书中有一个固定的 DH 公钥,客户端将使用它来生成共享密钥。秘密永远不会通过网络发送。由于此信息已足够,因此不需要服务器密钥交换消息。

RSA = 客户端将使用服务器的公钥加密 PMS 并将其发送到服务器。服务器将解密 PMS 并生成相同的 PMS。秘密通过网络发送。

暂时将静态 DH 放在一边,因为它在 Internet 上不常用——我找不到 Wireshark 的。

这是我的问题:

我比较了 TLS-RSA 和 TLS-ECDHE-RSA 之间的 pcap,发现:

  • 在服务器提供的证书中,都包含一个 RSA 公钥(主题公钥)并且证书有一个 RSA 签名(Sha256withRSAencryption)

  • 在 TLS-ECDHE-RSA 的“服务器密钥交换”数据包中,有一个带有 RSA 签名的 DH 密钥。

“dh 密钥”和“证书”的 RSA 签名用于身份验证目的/服务器的数字签名,以证明它是它声称的身份。

证书中的“RSA 公钥”,对于 TLS-RSA,被客户端用来加密 PMS。可以在“客户端密钥交换”数据包中看到。那么,在 TLS-ECDHE-RSA 的情况下,它的作用是什么?

3个回答

我假设您在 TLS 的上下文中谈论这些,尤其是 TLS 密码。每个组件的作用似乎有些混乱。如果您看到整个图片,那就更容易理解了,所以在这里。

在 TLS 握手期间会发生以下事情:身份验证、密钥交换。有关这些的详细信息取决于所谓的密码套件。这是一个示例。

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

这基本上说明了以下内容。

  1. 服务器将提供包含RSA公钥的证书。这将用于身份验证。
  2. 密钥交换将使用ECDHE完成
  3. 密钥交换后使用的对称密码将是具有128位密钥的AES-GCM
  4. 交换期间使用的 PRF(伪随机函数)是SHA256(它也可能指示带有旧 TLS 版本的 MAC)。

仔细观察,您会看到所有这些在密码套件中是如何表示的。

现在让我们看看这些可能意味着什么:ECDHE-RSAStatic DHRSA

ECDHE-RSA = 服务器随机生成一个 DH 密钥对,因为证书没有足够的信息发送给客户端以生成主密钥。DH 公钥在“服务器密钥交换”数据包中发送。秘密永远不会通过网络发送。密码套件中的“RSA”指的是随机 DH 公钥签名,而不是证书签名

你在这里是在正确的轨道上,现在,有了关于整个画面的知识,就更容易理解这一点。在“经典”密钥交换期间,证书中的公钥(及其私钥对)用于就对称密钥达成一致。但是,如果服务器的密钥被泄露,这会产生问题。如果证书中公​​钥对应的私钥被盗,之前记录的流量可以轻松解密。

这是我们通常想要避免的。输入前向保密该协议引入了独立密钥交换的可能性,它不太依赖于 RSA 密钥对。通常用于此的算法称为Diffie-Hellman

要使 DH 工作,您需要所谓的 DH 参数,它们基本上是一个素数模数和一个生成器。这些参数是公开的。这些是在服务器设置期间预先计算的,并在密钥交换期间与每个客户端共享。与服务器合作的客户端然后使用这些参数就密钥达成一致,而无需实际通过网络发送它,就像你说的那样。这是可汗学院的精彩视频。DH-key 对的私钥本质上就是视频中的私钥。而公钥是通过网络发送的。

总结起来,ECDHE就是Ephemeral Elliptic Curve Diffie-Hellman,就是椭圆曲线上的DH。临时部分是指每个连接使用不同的、随机生成的 DH 密钥对这一事实。

静态 DH = 服务器在证书中有一个固定的 DH 公钥,客户端将使用它来生成共享密钥。秘密永远不会通过网络发送。由于信息足够,不需要服务器密钥交换消息

静态 DH 是指服务器为每个客户端连接(视频中的私人号码)选择相同的 DH 密钥对。或者,就像您建议的那样,它可以嵌入到证书中。这允许被动监视 TLS 连接。这实质上禁用了前向保密。

RSA = 客户端将使用服务器的公钥加密 PMS 并发送到服务器,服务器将解密 PMS 并生成相同的 PMS。秘密在电线中发送

正是如此。

现在,到达你的问题。

证书中的“RSA 公钥”,对于 TLS-RSA,被客户端用来加密 PMS。它可以在“客户端密钥交换”数据包中看到。那么在 TLS-ECDHE-RSA 的情况下它的作用是什么?

现在,这很容易回答。当存在显式密钥交换算法时,证书中的密钥(本例中为 RSA 公钥)仅用于身份验证。通过验证证书链并验证服务器是否拥有给定证书的公共密钥的私钥,确保您连接到您打算连接的主机。它还将使用其 RSA 私钥对发送给客户端的 DH 公钥进行签名,客户端在握手期间对其进行验证。

密码套件中的“RSA”指的是随机 DH 公钥签名,而不是证书签名

“RSA”指的是 DH 密钥签名和服务器证书的公钥。

用于签名/验证 DH 公钥的密钥来自证书交换,或者我们无法确保我们使用的是服务器的实际公钥。

证书具有 RSA 签名 (Sha256withRSAencryption)

至于证书的签名算法(Sha256withRSAencryption),由服务器证书的颁发者决定,用于验证服务器证书。它不参与实际的数据交换,在这里无关紧要。

那么在 TLS-ECDHE-RSA 的情况下它的作用是什么?

正如您所指出的,“ECDHE”确保对称密钥不会在线发送。因此,即使某天服务器证书的密钥泄露,之前交换的密钥也不会被解密,之前发送的数据将保持安全。它被称为“前向保密”。

证书中的“RSA 公钥”,对于 TLS-RSA,被客户端用来加密 PMS。可以在“客户端密钥交换”数据包中看到。那么,在 TLS-ECDHE-RSA 的情况下,它的作用是什么?

简短回答:在 ECDHE-RSA 中,证书中的 RSA 公钥用于验证服务器发送的临时 ECDH 公共参数上的 RSA 签名。


默认情况下,所有 Diffie-Hellman 密钥交换都是匿名的,这意味着您不知道与谁交换密钥。这显然是不可取的,因为网络攻击者(具有中间人位置)可以用他们自己的关键参数代替双方(客户端和服务器)想要发送对方的关键参数。为避免这种情况,服务器使用其私钥对其关键参数进行签名。具体来说,它使用与服务器证书中的公钥对应的私钥。这样,客户端就有了一个公钥,它知道它属于服务器,然后它可以使用它来验证服务器发送的 [EC]DH 参数是否是它收到的参数。