4

我目前正在开发一个在客户端和服务器之间传输数据的系统,并且想知道我计划使用的加密强度是多少。

我的想法是拥有一个私钥/公钥 RSA 密钥对并将公钥分发给每个客户端(将私钥仅留在服务器上)。然后,每个客户端将生成自己的 AES 密钥并 RSA 对其进行加密。然后,他们将对他们的数据进行 AES 加密,并将加密的数据和加密的 AES 密钥发送到服务器。然后,服务器将使用私钥解密 AES 密钥,然后使用 AES 密钥解密数据。

我是否缺少任何安全漏洞和/或有更好的方法来做到这一点?

4

4 回答 4

19

这几乎就是SSL/TLS的工作原理(查看握手部分)。使其更强大的唯一方法是为每个连接生成 AES 密钥,而不是每次都使用相同的密钥。您可能还希望对来回发送的消息进行数字签名,以避免中间人攻击和其他欺骗攻击。

一般来说,创建一个好的密码系统是非常困难的。如果可能,您应该始终支持现有的(受信任的)应用程序来提供帮助。在这种情况下,您可以考虑使用 HTTPS 发送消息,而不是创建自己的系统。

于 2009-11-02T23:23:07.667 回答
2

您应该向我们提供有关您正在使用的语言和平台的更多信息,以便我们可以为您提供有关已经存在的库的具体建议,并为您处理详细信息。直接使用密码原语并非易事,而且很难完全正确,而使用密码术,您必须“不完全正确”一次,才能破坏您的安全性。


要回答您的问题,通常最好通过Diffie-Hellman交换创建会话密钥(AES 密钥),并且每一方都使用其私有 RSA 密钥来签署其密钥交换数据。

否则,如果会话秘密不是通过 DH 交换建立的,则获得对私有 RSA 密钥(必须存储在某个地方)的访问权限的攻击者可以解密客户端和服务器之间曾经发送的所有流量。

如果秘密通过 DH 交换建立的,那么只有协议的身份验证部分会被公开。尽管拥有私有 RSA 密钥的攻击者将无法读取任何先前的通信,但他仍然可以进入与客户端/服务器的经过身份验证的对话或发起中间人攻击(可能或可能不容易完成,取决于网络)。

于 2009-11-02T23:44:44.600 回答
0

一个漏洞是,如果攻击者用他们的公钥替换了“真正的”公钥。然后,他们将能够以“中间人”的身份拦截流量。

S/MIME、PGP 和 TLS 等协议使用 RSA 加密来传输密钥,就像您建议的那样。但是,他们使用的公钥位于受信任机构签署的证书中。

必须小心保护这些受信任的权威机构的完整性。例如,它们可能会被刻录到防篡改的硬件令牌中,或者可以使用密码在它们上计算 MAC。

于 2009-11-02T23:40:18.737 回答
-3

我不确定你的方法会保护任何东西!您将把私钥保存在服务器上,公钥将被分发。如果我掌握了你的公钥,我就可以随意与你的服务器进行交互。我认为您应该反转密钥所有权;每个客户端都将拥有自己的私钥,服务器将拥有一个公钥列表(ala SSH)。服务器必须添加“授权”公钥,并且只有私钥的持有者才能连接。

希望这可以帮助。

于 2010-10-21T16:49:52.810 回答