2013-02-16 177 views
1

假设我们有一个带有私钥和公钥的服务器,后者可用于所有客户端,并且我们有一个客户端没有任何非对称密钥拥有。我们希望建立服务器和客户端之间的安全通信,客户端必须确保服务器的真实性。这是一个很常见的情况。秘密密钥分配与Diffie-Hellman的公钥加密

现在,我的理解是,私钥/公钥对通常只用于确保真实性(我们的客户端可以使用服务器的公钥来验证服务器的真实性)。为了确保服务器和客户端之间的双向通信,使用Diffie-Hellman密钥交换,然后通信基于共享密钥。

我不禁想知道为什么Diffie-Hellman会在这种情况下使用。从我所了解的公钥加密技术可以用来确保真实性并在客户端和服务器之间共享密钥。服务器可以向客户端发送使用其私钥编码的消息,客户端可以使用服务器的公钥对其进行解码以确认其身份。此外,客户端可以使用服务器的公钥将新的随机密钥发送给服务器。只有服务器会知道这个秘密密钥,因为只有服务器知道他的私钥。我知道一些人建议不要使用公共密钥来编码和解码,但没有人会说为什么。

显然,如果客户端和服务器都有自己的公钥/私钥,他们甚至不需要共享任何密钥,但这不是典型的情况。

所以......总结一下。为什么使用Diffie-Hellman而不是使用公钥密码体制的秘密密钥分配?有什么好处?

+3

Diffe-Hellman是一种公钥密码。所以你的前提是有缺陷的。 – CodesInChaos 2013-02-16 16:52:24

+1

看[“为什么我们需要Diffie Hellman?”对crpyto.SE](http://crypto.stackexchange.com/questions/3163/why-do-we-need-diffie-hellman) – CodesInChaos 2013-02-16 16:54:23

回答

3

我不禁止奇怪,为什么在这样的 情况下使用迪菲赫尔曼。从我所了解的公开密钥密码术可能是 用于确保真实性和共享密钥在 客户端和服务器之间。

Diffie-Hellman和RSA密钥交换(其中RSA用于加密)都可以与SSL/TLS一起使用。这取决于密码套件。

服务器可以发送到客户端用自己的私钥和 客户端可以使用服务器的公钥来确认其身份 解码它编码的消息。

这确实是使用RSA或DSS认证的DH密钥交换时发生的情况:服务器使用其私钥签署其DH参数,客户端可以验证签名。

此外,客户端可以使用服务器的公钥将新的 随机密钥发送给服务器。只有服务器知道这个秘密 密钥,因为只有服务器知道他的私钥。

这或多或少是与RSA密钥交换时发生的:客户端加密预主密钥,只有服务器可以解密。

你可以在Authentication and Key Exchange section of the TLS specification(不考虑匿名密钥交换)中阅读所有这些内容。 cipher suites(见附录A.5和C)的选择取决于客户端和服务器的配置方式,这将决定使用的密钥交换机制。

就我所知,固定的DH交换是相当罕见的。 Ephemeral DH(DHE密码套件)更为常见。它可以提供“完美前向保密”:即使攻击者获得了私钥,他们也无法破译现有的流量,因为他们也需要具有DH参数,这对所有连接来说都不相同。但是,这在性能方面有成本。您可以在this article中找到关于此主题的更多信息。

+0

你已经清除了我所有的疑惑。前向保密是我没有想到的事情!谢谢。 – Quarx 2013-02-16 17:01:12

0

。为什么使用Diffie-Hellman而不是使用公钥密码体制的秘密密钥分配?有什么好处?回答:假设黑客一直在跟踪客户端和服务器之间交换的所有消息并保存消息,但他不能解密这些消息,因为他不知道共享对称密钥。如果服务器的私钥被泄露,那么在Diffie-hellman黑客的情况下仍然不能解密消息,因为Diffie Hellman算法从不在线上发送密钥,而是客户端和服务器在不共享的情况下在同一个密钥上同意,这是一种密钥协商算法分享。攻击困难Hellman在中间的人应该是活的,应该知道用于认证的服务器私钥。但在我们的案例中,黑客已经过了困难的Hellman消息,所以他不能在中间人攻击中使用人。同时服务器更改它的私钥,所以没有损害。但是如果我们使用RSA密钥共享密钥,那么服务器的私钥黑客就可以获得所有会话对称密钥,并且可以解密所有过去的消息。