6

所以我正在阅读这篇文章,并对 Remus 的回答感到惊讶。因为我认为情况正好相反。

所以,至于我的问题。为什么使用 diffie-hellman 密钥交换来确定共享密钥来加密/解密消息的程序(通常)不如 SSL 安全?

编辑:我知道 SSL 使用数字证书,但由于我的程序只与自身(客户端-服务器)通信,这并不重要,对吧?

4

3 回答 3

4

Remus 的帖子主要警告不要创建自己的加密协议(因为你可能会犯一些致命的错误),而是使用现有的解决方案 SSL。

您可以仅使用 Diffie-Hellman 作为非对称加密以及一些对称加密来编写安全网络协议。我最喜欢的安全网络协议就是这样工作的。使用 DH 的程序本身并不弱于 SSL,但最有可能由非加密专家设计协议的程序是。

但是,如果您设计自己的协议,则需要学习一些密码才能正确完成。您可能还需要专家对您的设计和代码进行审查,以防您在某个地方犯了错误。但是,除非您的产品足够有名或您付钱给他们,否则获得该评论并不容易。

SSL 握手主要做两件事情:

  1. 它使用证书来验证服务器是否有权代表您要与之通信的域。

    在最常见的情况下,证书颁发机构保证某个密钥对的所有者是某个域的合法所有者(这采用证书的形式)。这部分仅与公认的最弱 CA 一样安全。

    如果您只需要与单个服务器进行通信,您可以硬编码服务器的指纹,从而删除整个 CA 和 PKI 部分。这种方法类似于您通常处理 SSH 指纹的方式。

  2. 它生成一个会话密钥

强 SSL 套件使用证书来验证服务器和 DH 来生成会话密钥。较弱的套件对两者都使用证书。

简单的基于 DH 的协议可能会忘记对服务器进行身份验证,从而允许主动攻击者对连接进行中间人攻击。您需要以某种方式对服务器进行身份验证,即使它只是通过在客户端中硬编码服务器的公钥。

于 2013-05-07T20:36:13.230 回答
2

Remus 没有评论特定加密算法的优缺点。

相反,他评论的是避免编写自己的加密协议的必要性。我100%同意他

编写加密协议非常困难且充满危险。任何数量的异常微妙的错误都可以很容易地潜入并使您的整个系统不安全。即使是专家也经常出错,需要在未来的日期修补。

这也是平台成熟的标志,WCF 的其他平台组件可以很容易地使用库存工具。

于 2013-05-07T20:54:32.120 回答
0

SSL 使用数字证书来防止中间人攻击。如果黑客不仅可以拦截,还可以修改消息,那么基于 DH 的加密将失败,因为您的程序将与黑客建立密钥,而黑客将与服务器建立密钥。您可以使用 RSA 密钥对来建立密钥 - 客户端中的公钥,服务器中的私钥。因为黑客不知道私钥,所以他无法解密私钥。

于 2013-05-07T20:31:26.317 回答