0

我不是密码学专家,我实际上只有一点点使用它的经验。无论如何,现在是我的一个应用程序要求我设置一些加密的时候了。请注意,该程序不会管理任何能够造成大量损害的超级关键。

无论如何,我只是想看看我正在使用的这个方案是否常见以及是否存在缺陷(其中可能存在完全愚蠢和严重缺陷的设计,这就是我问的原因)。

好的,我有一个客户端-> 服务器通信。我可以在 2048 位 RSA 密钥的公共部分硬编码客户端。当客户端想要启动安全连接时,他会发送他的用户名、密码的 md5 哈希值和随机 UUID 的哈希值,所有这些都已根据服务器的公钥加密。服务器接收信息并使用其私钥解密。检查数据库以查看他的登录+通过是否有效,如果有效,则在数据库的“会话”表中创建一个新条目。这包括 SessionID、UID(用户 ID)和 UUID 哈希。使用相应会话 ID 的 UUID 作为关键字,服务器将发回一条消息,其中包含 Blowfish 加密词“成功!” + 一个随机 UUID(此消息经过数字签名,因此我们可以确定它是否来自服务器)。从那时起,当客户端向服务器发送信息时,它将带有明文 sess_id 并包含 Blowfish 加密消息,使用相应会话 ID 的河豚机密(加密存储在数据库中)作为加密/解密的密钥。

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

4

3 回答 3

2

只需使用 SSL 或 DTLS、IKEv2、HIP、EAP 或一些合适的标准协议。不要试图发明你自己的加密协议,没有人有足够的专业知识来自己做这件事。据我所知,您的协议中没有足够的熵,因此您生成的密钥将非常弱。

于 2010-02-08T22:17:56.733 回答
2

我可以从头顶看到的问题(尽管您忽略了大部分细节,这就是众所周知的魔鬼所在的地方):

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

  • 您最初的 RSA 加密听起来很容易受到小指数攻击,并可能受到其他创造性攻击。那里的结构太多,让人不舒服。

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

  • 您在 Blowfish 中使用什么分组密码模式?

我推荐使用 TLS/SSL——它比你自己构建的任何东西都更友好地看着它。

于 2010-02-09T00:14:48.763 回答
0

从那时起,当客户端向服务器发送信息时,它将带有明文 sess_id 并包含 Blowfish 加密消息,使用相应的 Session ID 作为密钥进行加密/解密。

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

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

于 2010-02-08T15:43:59.267 回答