15

是否可以使用 Diffie-Hellman 密钥交换算法来加密网页上的客户端-服务器通信来代替 SSL?如果可以,有什么缺点(即为什么标准使用需要证书颁发机构的 SSL)?我的理解是 Diffie-Hellman 可用于秘密建立共享密钥,然后可用于加密任何进一步的通信。

4

5 回答 5

23

两者真的没有可比性。DH 是一种密钥交换算法,不多也不少。SSL 尝试确定您要连接的服务器确实是它所说的服务器。为此,它使用可以追溯到您(应该能够)信任的人的证书。

DH 本身只会阻止其他人读取传输的数据。SSL 的目的远不止于此(但可以使用 DH 来阻止其他人读取流)。

举一个明显的例子,使用 DH(单独)一个中间人攻击是相当简单的。如果我可以让您连接到我的服务器而不是您想要的服务器,我可以使用 DH 与您建立“安全”会话。然后我连接到您最初打算连接的服务器。我从你那里得到的每个数据包,我都会解密,用我用来连接到该服务器的密钥重新加密,然后发送到该服务器。我对它的所有响应数据包都做同样的事情。对您而言,一切看起来都像是直接来自原始服务器,并且您所做的购买(例如)就像平常一样工作。唯一不同的是,我还存储了您的信用卡号码,当您第二天尝试为汽车加油时,收费被拒绝,因为在此期间我已经花光了您的所有信用。

SSL 中的身份验证至少旨在防止这种情况发生。如果您的浏览器尝试连接到(例如)www.amazon.com,如果我的 SSL 证书没有指定它是发给 www.amazon.com 的,它应该会向您发出警告——并且 CA 不应该发出这样的证书给亚马逊以外的任何人。

DH 本身并不能保证我上面所说的大部分内容。就其本身而言,DH 只是一种交换密钥的方式(或者,也许可以将其表述为“交换双方创建相同密钥所需的信息,而无需明文交换密钥本身”)。在双方拥有密钥后,他们可以(并且可能会)使用它来加密/解密数据——但加密实际上与 DH 本身是分开的。

于 2009-10-27T19:28:04.157 回答
9

实际上 Diffie-Hellman 是 SSL 的一部分。但一个部分并不能代替其他部分。

这里SSL Diffie-Helman 用于:

这是一个 Diffie-Hellman 密钥交换,其中服务器的证书包含由证书颁发机构 (CA) 签名的 Diffie-Hellman 公共参数。也就是说,公钥证书包含 Diffie-Hellman 公钥参数。客户端在证书中(如果需要客户端身份验证)或在密钥交换消息中提供其 Diffie-Hellman 公钥参数。该方法基于使用固定公钥的 Diffie-Hellman 计算在两个对等方之间产生固定的密钥。

于 2009-10-27T19:18:15.630 回答
4

您可以将匿名 Diffie-Hellman 密钥协议与 SSL 一起使用。这提供了通道上的隐私,但没有身份验证。

当然,没有身份验证,你真的不能拥有隐私,因为你的私人频道可以连接到“中间人”。这就是不鼓励使用匿名 DH 密码套件的原因。

如果缺少证书使您无法在真正需要的地方使用 SSL,请从startcom.org 获取免费证书。

于 2009-10-27T19:28:14.890 回答
2

Diffie-Hellman 密钥交换用于密钥交换。它不会为您提供身份验证(您正在与谁交谈),您需要证书和 PKI。

所以是的,您可以进行加密,但您不知道与谁交谈

于 2009-10-27T19:29:51.083 回答
1

DH 密钥交换本身不能进行加密。它用于建立会话密钥,但不用于加密。所以,在这个层面上,这个问题是错误陈述的,或者表明缺乏精确性或缺乏理解(我怀疑这次精确性是问题)。

问题是:

  • 你想和任何人一起加密数据吗?
  • 你想确定你在和谁说话吗?

正如已经指出的,SSL 使用 DH 密钥交换来建立会话密钥。但是,它还确保另一端的程序是您信任的人(直接或间接)。如果您不需要担心对方是否值得信赖,您可以使用简单的 DH 密钥交换,然后发送加密数据而不需要证书。但是,除非您对其进行验证,否则您将无法确定您在与谁交谈——SSL 等使用的证书有助于该验证。

于 2009-10-27T19:30:44.590 回答