【问题标题】:SSL and Diffie-HellmanSSL 和 Diffie-Hellman
【发布时间】:2013-05-07 20:22:09
【问题描述】:

所以我正在阅读this,并对 Remus 的回答感到惊讶。因为我认为恰恰相反。

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

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

【问题讨论】:

    标签: sockets encryption


    【解决方案1】:

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

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

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

    SSL 握手主要做两件事情:

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

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

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

    2. 生成会话密钥

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

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

    【讨论】:

    • 直截了当,如果中间人获得了正在发送的证书怎么办,为什么这不是问题?
    • 证书由知名第三方 CA(认证机构)签署。因为黑客不能伪造签名——他不能伪造证书
    • @BioCycle 因为证书不包含任何机密信息。证书本质上是一个声明,如“我,威瑞信保证公钥 X 的所有者可能代表 example.com -- 签名的威瑞信”。现在,由于您的浏览器知道 Verisign 的公钥(它是硬编码的),它可以验证该声明,并且由于它信任 CA,它现在信任 X。
    • SSL 使用服务器证书来证明服务器就是他所说的那个人。这是为了防止 MITM 攻击。这是一个认证步骤,而不是授权步骤。 HTTPS 也使用它来验证服务器是否属于您连接的域。这是一个温和的授权步骤。
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 您能解释一下为什么中间人不能伪造数字证书吗?
      • 您所描述的是 PKI(公钥基础设施)......仅证书不会阻止 MITM 攻击......您可能很清楚,如果签名 CA 是,则可以验证证书值得信赖并且 CA 证书是已知的,但这是一个 PKI ..​​.除非您有一些信任链,否则仅凭证书无法做到这一点...最简单的形式可能是手动证书固定
      • 关于您对 RSA 的编辑...这仅在您有一种万无一失的方式将您的密钥提供给客户端(如硬编码)时才有效...如果密钥是要交换的,所有非对称加密模式都容易受到 MITM 的攻击,除非您拥有有效的 PKI 并且可以使用证书保护密钥
      • 是的,我的意思是 - 公钥在客户端硬编码或使用硬编码密钥签名。
      • 使用 RSA 加密会话密钥是一种方法,但我认为仅使用 RSA 进行身份验证并使用临时 Diffie-Hellman (EDH) 生成会话密钥更安全,因为它不使用私钥进行加密但要签名。
      猜你喜欢
      • 2010-12-10
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-06
      • 2012-02-06
      相关资源
      最近更新 更多