0

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

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

  • 客户端只有 Key_Public 可以用来解密,但不能用这个密钥加密任何新密码。

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

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

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

4

1 回答 1

2

您的算法不起作用,因为它是倒退的。

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

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

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

一些警告:

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

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

  3. 客户端(如果您控制它们)可能应该验证服务器是否值得信赖(即使用服务器众所周知的公钥)
于 2013-03-25T06:24:13.603 回答