多个客户端的公共/私有加密逻辑

时间:2013-03-25 05:34:04

标签: c# encryption aes

我有一个场景,我必须根据以下内容实现安全性:

  • 服务器使用Key_Private加密密码并将此加密密码发送给所有客户端

  • 客户只有Key_Public,他们可以使用它来解密此密码,但不能使用此密钥加密任何新密码。

  • 我可以为多个客户生成多个Key_Public。

  • 我需要控制公钥的长度(应该小于20个字符)

我尝试过AES加密,但我找不到任何简单的代码。

1 个答案:

答案 0 :(得分:2)

你的算法不起作用,因为它是向后的。

您无法使用公钥解密。公钥仅用于加密。需要私钥才能解密。这是公钥/私钥加密的基础。

相反,您希望使用会话密钥协商。

  1. 客户端连接,它将其公钥发送到您的服务器。
  2. 服务器生成安全的随机AES会话密钥,以及适当的到期时间和适当的反重放值
  3. 服务器使用客户端公钥
  4. 加密安全随机AES会话密钥blob
  5. 服务器将加密的blob发送到客户端
  6. 客户端使用客户端私钥
  7. 解密会话blob
  8. 客户端发送使用会话密钥
  9. 加密的确认消息
  10. 服务器和客户端使用共享会话密钥开始安全通信。
  11. 一些警告:

    1. 服务器应该在开始会话之前确保客户端是值得信任的。这可以使用带外步骤(即,公钥由可信第三方注册)来完成。或者像现代API一样,服务器生成公钥/私钥对,将其发送到客户端,并保留公钥。

    2. 服务器应正确使会话密钥到期,以防止重播

    3. 客户端(如果你控制它们)应该验证服务器是否值得信任(即使用服务器众所周知的公钥)