代码之家  ›  专栏  ›  技术社区  ›  Crowe T. Robot

对称密钥到非对称密钥切换

  •  0
  • Crowe T. Robot  · 技术社区  · 14 年前

    我不是密码学专家,实际上我使用它的经验很少。无论如何,我的一个应用程序要求我设置一些加密的时候到了。请注意,程序不会管理任何超关键的东西,这些东西会造成很大的损害。

    不管怎样,我只是想看看我正在使用的这个方案是否常见,是否有缺陷(其中可能有完全愚蠢和可怕的缺陷设计,这就是我问的原因)。

    好的,我有一个客户机-服务器通信。我可以在2048位RSA密钥的公共部分硬编码客户机。当客户机想要启动一个安全连接时,他发送他的用户名、密码的MD5哈希和随机UUID的哈希,所有这些都是根据服务器的公钥加密的。服务器接收信息并使用其私钥解密。检查数据库,查看他的登录名是否通过工作;如果通过,请在数据库的“sessions”表中创建一个新条目。这包括sessionid、uid(用户ID)和uuid哈希。然后,服务器将使用相应会话ID的uuid作为关键字,发送回一条消息,其中包含blowfish加密字“success!”+一个随机的UUID(此消息经过数字签名,因此我们可以确定它是否来自服务器)。从那时起,当客户机向服务器发送信息时,它将使用明文sess-id&include一条Blowfish加密消息,使用相应会话id的Blowfish秘密(存储在数据库中加密)作为加密/解密的密钥。

    具体来说,我很好奇这个系统是否“应该工作”,或者是否有人注意到存在一个明显的漏洞,比如MITM。

    3 回复  |  直到 14 年前
        1
  •  2
  •   caf    14 年前

    我能从我的头脑中看到的问题(尽管你遗漏了大部分细节,这就是魔鬼的所在):

    • 如果您使用的是UUID生成器而不是真正的加密RNG,那么它可能没有足够的熵。不要忽视这一点——在现实世界中,暗中削弱加密系统的最常用方法是削弱RNG;

    • 您最初的RSA加密听起来像是易受小指数攻击,以及可能的其他创造性攻击。那里的结构太多了,不舒服;

    • 听起来有很多重放攻击的机会;

    • 你对河豚使用什么分组密码模式?

    我建议使用tls/ssl——它的眼睛比你自己构建的任何东西都要友好得多。

        2
  •  2
  •   Andrew McGregor    14 年前

    只需使用ssl或dtls、ikev2、hip、eap或一些合适的标准协议。不要试图发明你自己的加密协议,没有人有足够的专业知识自己做这件事。据我所见,您的协议中没有足够的熵,所以您得到的密钥将非常弱。

        3
  •  0
  •   Draemon    14 年前

    从那时起,当客户机向服务器发送信息时,它将使用明文sess-id&include blowfish加密消息,使用相应的会话id作为加密/解密的密钥。

    如果您以明文形式发送会话ID,并将其用作加密密钥,那么它的安全性如何?

    我看不出为什么您不能使用标准的SSL身份验证,让库实现人员担心握手。