我不是密码学专家,我实际上只有一点点使用它的经验。无论如何,现在是我的一个应用程序要求我设置一些加密的时候了。请注意,该程序不会管理任何能够造成大量损害的超级关键。
无论如何,我只是想看看我正在使用的这个方案是否常见以及是否存在缺陷(其中可能存在完全愚蠢和严重缺陷的设计,这就是我问的原因)。
好的,我有一个客户端-> 服务器通信。我可以在 2048 位 RSA 密钥的公共部分硬编码客户端。当客户端想要启动安全连接时,他会发送他的用户名、密码的 md5 哈希值和随机 UUID 的哈希值,所有这些都已根据服务器的公钥加密。服务器接收信息并使用其私钥解密。检查数据库以查看他的登录+通过是否有效,如果有效,则在数据库的“会话”表中创建一个新条目。这包括 SessionID、UID(用户 ID)和 UUID 哈希。使用相应会话 ID 的 UUID 作为关键字,服务器将发回一条消息,其中包含 Blowfish 加密词“成功!” + 一个随机 UUID(此消息经过数字签名,因此我们可以确定它是否来自服务器)。从那时起,当客户端向服务器发送信息时,它将带有明文 sess_id 并包含 Blowfish 加密消息,使用相应会话 ID 的河豚机密(加密存储在数据库中)作为加密/解密的密钥。
具体来说,我很好奇这个系统是否“应该工作”,或者是否有人注意到存在明显的漏洞,例如 MITM。