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

Security 对称密钥到非对称密钥切换,security,encryption,cryptography,pki,blowfish,Security,Encryption,Cryptography,Pki,Blowfish,我不是一个密码专家,我实际上只有一点点使用它的经验。无论如何,我的一个应用程序要求我设置一些加密的时候到了。请注意,该程序不会管理任何可能造成大量损害的超临界设备 不管怎样,我只是想看看我使用的这个方案是否普遍,是否存在缺陷(其中可能有完全愚蠢和严重缺陷的设计,这就是我为什么要问的原因) 好的,我有一个客户端->服务器通信。客户端I can在2048位RSA密钥的公共部分硬编码。当客户机想要启动安全连接时,他会发送他的用户名、密码的md5散列和随机UUID的散列,所有这些都是根据服务器的公钥加密

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

不管怎样,我只是想看看我使用的这个方案是否普遍,是否存在缺陷(其中可能有完全愚蠢和严重缺陷的设计,这就是我为什么要问的原因)

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

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

从那时起,当客户端向服务器发送信息时,它将使用明文sess_id&包括一条河豚加密消息,使用相应的会话id作为加密/解密的密钥

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

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

从那时起,当客户端向服务器发送信息时,它将使用明文sess_id&包括一条河豚加密消息,使用相应的会话id作为加密/解密的密钥

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


我认为没有理由不使用标准SSL身份验证,让库实现人员担心握手。

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

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

问题我可以从脑海中看到(尽管您遗漏了大部分细节,这是魔鬼著名的居住地):

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

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

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

  • 你对Blowfish使用的是什么分组密码模式


我建议使用TLS/SSL——它比你自己构建的任何东西都有更友好的眼睛盯着它看的时间要长得多。

问题我可以从我的头上看清楚(尽管你忽略了大部分细节,这是魔鬼著名的居住地):

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

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

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

  • 你对Blowfish使用的是什么分组密码模式


我建议使用TLS/SSL—它比您自己构建的任何东西都有更友好的眼睛观察它的时间长得多。

您不是在尝试重新创建SSL吗?您不是在尝试重新创建SSL吗?我不是在使用会话ID作为密钥。我将它作为一个索引发送到一个安全的MySQL服务器上的一个表,该表存储了blowfish机密,首先使用blowfish从硬编码和非共享密钥对其进行加密(客户端的会话blowfish密钥加密存储在DB中)。所以它的设计并没有那么糟糕我原来的帖子并没有说得很清楚,对不起。你说得对,SSL将更容易、更安全。经过进一步的调查(我不知道这正是SSL所做的(或多或少),我决定继续在项目中使用SSL。谢谢你的建议。我没有使用会话ID作为密钥。我将它作为索引发送到一个安全MySQL服务器上的一个表,该服务器存储了河豚的秘密,首先使用hardco的河豚对其进行加密