如果使用 DHE,是否可以使用 (private, public) 对解密 HTTPS?

信息安全 tls openssl diffie-hellman
2021-08-16 11:32:55

假设您有一个带有 HTTPS 流量的 PCAP 文件并具有密钥对(私有和公共),如果它使用 Diffie Hellman Ephemeral 可以解密流量吗?例如使用 openSSL 库。

据我所知,答案是否定的,因为 DHE 为每个连接生成一个新对,所以它不使用我们在 apache 配置中放置的密钥,不是吗?

我的任务是,知道私钥和公钥,解密流量。当然有很多 CipherSuite。我正在研究这个目标的局限性。

3个回答

当 TLS/SSL 握手开始时,第一步是使用与服务器证书关联的私钥对服务器进行身份验证。在第二步中,客户端和服务器交换用于加密连接有效负载的会话密钥。会话密钥用于一个会话意味着当会话关闭时,相同的密钥不能用于加密另一个会话的流量。现在的问题是 SSL/TLS 经常使用 RSA 密码套件,其中会话密钥是从私钥派生的。因此,如果底层私有是已知的,将来可以计算会话密钥。

DHE 和 ECDHE 提供完美前向保密(PFS),意味着会话密钥不是从私钥派生的。因此,即使攻击者拥有会话握手中使用的私钥,攻击者也无法解密流量。

在 DHE(不是 DH)中,会话密钥是使用随机数计算的。

结论

使用 DHE 或 ECDHE 时,您无法使用私钥解密流量。

仅作记录:cloudflare 发布了一些关于 RSA 和 DH 握手如何工作的好图表:

https://blog.cloudflare.com/content/images/2014/Sep/ssl_handshake_rsa.jpg

https://blog.cloudflare.com/content/images/2014/Sep/ssl_handshake_diffie_hellman.jpg

总结一下:不,你不能。这是DHE 的确切点用夸张的说法,DHE 提供了完美的前向保密,这意味着永久服务器的私钥(对应于服务器证书中的公钥)的知识不足以解密过去的会话。

从技术上讲,当使用 DHE 时,服务器的证书和私钥仅用于签名:服务器对其临时的、新生成的 DH 公钥进行签名;客户端验证该签名。所以使用私钥;仅不用于加密目的。通过拥有服务器私钥的副本,您可以伪造一个伪造的签名,这意味着您可以冒充服务器;但是签名不会隐藏数据,因此仅被动攻击(正如您提议的那样)无法以这种方式学习任何东西。

如果服务器使用 DHE 并且您需要查看数据,那么您必须发起主动攻击,通常称为中间人攻击你冒充假服务器;您使用您对服务器私钥的了解来冒充服务器;当客户端连接时,您还作为客户端连接到真正的服务器,并在两个方向中继数据。MitM 对从客户端接收到的数据进行解密,并将其重新加密为与真实服务器打开的 SSL 连接,并且在服务器到客户端的方向上执行相同的操作。这样,中间人就可以看到所有数据,但他必须在连接时积极工作。事后他不能这样做,即解密他被动记录的过去会话。因此 PFS。