【问题标题】:Is this scenario secure?这个场景安全吗?
【发布时间】:2010-10-11 08:10:29
【问题描述】:

我正在使用 RSA 加密服务器和客户端之间的通信。 假设我们有 2 个不对称键,键 1 和键 2。

服务器从一开始就有key1(私有),客户端有key1(公共)

所以这里是场景:

  1. 客户端生成key2
  2. 客户端连接到服务器
  3. 发送用 key1(public) 加密的 key2(public)
  4. 从现在开始,服务器将发送所有使用 key2(public) 加密的数据
  5. 客户端向服务器发送一些随机数据
  6. 服务器发回相同的哈希数据
  7. 客户端验证数据是否正确

据我所知,这应该可以防止中间人攻击,还是我遗漏了什么? 在第 7 点,客户端应该知道是否有人试图给服务器提供错误的密钥来加密,因为除了服务器之外没有其他人可以解密 key2(public)。

如果有什么可以提高安全性的方法,请告诉我。

【问题讨论】:

    标签: security encryption rsa


    【解决方案1】:

    提高安全性的最佳方法是使用现有设计,而不是尝试重新发明轮子。我不是说你做的事就一定是错的,只是说很多比你我聪明得多的人都花了很多时间思考这个问题。请改用 TLS。

    【讨论】:

      【解决方案2】:

      只要 key1(私有)没有被第三方以某种方式截获,你的场景看起来是安全的。

      我想我实际上是在一篇论文的某个地方看到的。在其中,Alice 给了 Bob 一个未上锁的盒子(密钥 1 公开),然后 Bob 将一堆他自己的盒子(密钥 2 公开)放入其中,将其锁定并将其发送回 Alice。 Alice 然后打开盒子(密钥 1 私人),现在她可以安全地密封 Bob 刚刚给她的盒子。

      尽管有盒子类比,但本质上这就是你正在做的事情,所以我会说它是安全的。

      【讨论】:

        【解决方案3】:

        我同意,只需使用 TLS。

        另外,步骤 5 到 7 提供什么价值?想要在步骤 1-4 之后进行攻击的 MITM(例如,通过传递 n 个事务然后停止,强制从头开始重试的某种 DoS)也可以在 5-7 之后进行。他们添加了什么?

        -- MarkusQ

        【讨论】:

          【解决方案4】:

          不,此协议不安全。

          中间人可以拦截客户端发送的数据并将它想要的任何内容发送到服务器,因为您没有为服务器指定任何机制来验证客户端或验证它的消息的完整性收到。

          当然,您可以修改您的协议来解决这些明显的问题,但还会有其他问题。如果您将它们全部修复,您将拥有映射到 TLS 或 SSH 的东西,那么为什么不从那里开始呢?


          @Petoj——我关注的问题是服务器信任它收到的消息;你的提案在那里没有提供任何安全保障。但是,如果您担心机密性,您仍然会遇到问题,因为 MITM 可以原封不动地来回传递消息,直到他看到想要查找的内容,因为您对客户端消息没有任何隐私。

          您的提议似乎旨在确保来自客户端的消息的完整性。您已经将协议开发到客户端无法区分攻击和网络故障的程度。与其试图帮助客户端确定服务器是否对被篡改的消息采取了行动,不如让服务器在对消息采取行动之前验证消息的完整性。

          【讨论】:

          • 就您的判断而言,您假定的 MITM 在任何情况下都可以做到这一点,而无需客户。
          • 当然他可以,但他会失去客户,那么做 MITM 就没有意义了,因为没有什么可以偷看的......
          【解决方案5】:

          我同意 Greg 的观点,你在重新发明轮子。您本质上描述的是key exchange 的一些基本形式。顺便说一句,为了确保它可以安全地抵御中间人攻击,您还必须确定服务器的身份,即确保客户端可以确定地知道它认为公开的内容(key1)确实是服务器而不是中间人(例如,使用 CA 或将服务器的 public(key1) 放在客户端的安全存储中。)

          此外,您还必须从系统的角度了解其他注意事项,例如:

          • 非对称密钥加密比对称密钥加密慢,这也是现有解决方案(如TLS)将使用非对称密钥加密仅协商一个临时对称密钥的原因之一,然后将其用于通道加密。
          • 如果第三方的流量分析成功破解了临时对称密钥,则您的非对称密钥对并未受到破坏。出于这个原因,我们鼓励您相对频繁地重新协商临时密钥。可以说,在您的场景中生成一个新的key2 可以缓解这方面的问题。

          【讨论】:

          • 想法是 public(key1) 将被硬编码到客户端或类似的东西中,如果黑客能够很好地改变它,那么 MITM 就没有用了,因为他只能植入某种记录器,感谢有关非对称加密很慢的提示不知道!
          猜你喜欢
          • 2023-03-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多