公钥密码学用于秘密密钥分发 vs. Diffie-Hellman

4
假设我们有一台带有私钥和公钥的服务器,后者可供所有客户端使用,我们有一个没有自己的非对称密钥的客户端。我们希望在服务器和客户端之间建立安全通信,并且客户端必须确保服务器的真实性。这是一个非常普遍的情况。
现在,我的理解是,在这种情况下,私钥/公钥对通常仅用于确保真实性(我们的客户端可以使用服务器的公钥来验证服务器的真实性)。为了确保服务器和客户端之间的双向通信,使用Diffie-Hellman密钥交换,然后基于共享的秘密密钥进行通信。
我不禁想知道为什么在这种情况下需要使用Diffie-Hellman。据我所知,公钥密码学既可以用于确保真实性,也可以用于在客户端和服务器之间共享秘密密钥。服务器可以使用其私钥向客户端发送编码消息,客户端可以使用服务器的公钥解码以确认其身份。此外,客户端可以使用服务器的公钥向服务器发送新的随机秘密密钥。只有服务器会知道这个秘密密钥,因为只有服务器知道它的私钥。我知道有些人建议不要使用公钥进行编码和解码,但没有人说过为什么。
显然,如果客户端和服务器都有自己的公钥/私钥,它们甚至不需要共享任何秘密密钥,但这并不是典型情况。
因此...总之。为什么要使用Diffie-Hellman而不是使用公钥密码学进行秘密密钥分发?有什么优势吗?

3
迪菲-赫尔曼是一种公钥加密形式。因此,你的前提是有缺陷的。 - CodesInChaos
1
请参阅加密领域的“为什么我们需要Diffie Hellman?”(在crpyto.SE上):http://crypto.stackexchange.com/questions/3163/why-do-we-need-diffie-hellman - CodesInChaos
2个回答

4
我不禁想知道为什么在这种情况下还要使用Diffie-Hellman。据我所知,公钥密码学可用于确保真实性并在客户端和服务器之间共享秘密密钥。
SSL/TLS可以同时使用Diffie-Hellman和RSA密钥交换(其中RSA用于加密),这取决于密码套件。
服务器可以使用其私钥将消息发送给客户端,并使用服务器的公钥解码以确认其身份。这正是使用具有RSA或DSS身份验证的DH密钥交换时发生的情况:服务器使用其私钥签署其DH参数,客户端可以验证签名。
此外,客户端可以使用服务器的公钥向服务器发送新的随机秘密密钥。只有服务器知道此秘密密钥,因为只有服务器知道其私钥。这更或多或少是使用RSA密钥交换时发生的情况:客户端加密预主密钥,只有服务器才能解密。
您可以在TLS规范的身份验证和密钥交换部分中阅读所有这些内容(暂不考虑匿名密钥交换)。所选密码套件(请参见附录A.5和C),取决于客户端和服务器的配置,将确定使用的密钥交换机制。
据我所知,固定DH交换相当罕见。短暂DH(DHE密码套件)更为常见。它可以提供“完美前向保密性”:即使攻击者获得私钥,他们也无法解密现有流量,因为他们还需要拥有DH参数,而这些参数对于所有连接都不同。然而,这在性能方面是有代价的。您可以在本文中了解更多相关信息。

你解决了我所有的疑问。前向安全是我没有想到的东西!谢谢。 - Quarx

1
为什么使用Diffie-Hellman而不是公钥密码的密钥分配?有什么优势吗?
答:假设黑客一直跟踪客户端和服务器之间交换的所有消息并保存这些消息,但他无法解密这些消息,因为他不知道共享的对称密钥。如果服务器的私钥被揭示,则在Diffie-Hellman的情况下,黑客仍然无法解密消息,因为Diffie-Hellman算法从未将密钥发送到网络上,而是客户端和服务器达成协议,使用相同的密钥而不共享,这是一种密钥协商算法而非分享算法。要攻击Diffie-Hellman,中间人必须在线并且必须知道用于身份验证的服务器私钥。但在我们的情况下,黑客已经拥有了Diffie-Hellman消息,因此他无法使用中间人攻击。同时,服务器更改其私钥,因此没有损失。但是,如果我们使用RSA密钥来共享秘密密钥,那么在披露服务器的私钥时,黑客可以获得所有会话对称秘密密钥并可以解密所有过去的消息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接