RSA,如何向后通信

RSA, how to communicate backwards

所以,我对一般的加密还很陌生,但我的客户端-服务器应用程序需要它,我选择了 RSA 来完成这项任务。对于数据包数据的加密,我使用客户端的 public 密钥并将密文发送到服务器,现在服务器用他的私钥解密它并可以读取消息。我的实际问题是:如何在服务器端加密数据并将其发送回客户端?我听说过 "secret key" 是从客户端和服务器密钥以某种方式创建的,但我并没有真正了解这个过程。看过here。这次我是再创建一对密钥并将私钥发送给客户端还是有其他方法?

你必须明白对称加密和非对称加密的区别。对于 RSA,有 public 和私钥。诸如 AES 之类的对称块密码只需要一个密钥,通信双方都需要拥有该密钥。

所以最简单的回复方式是

  1. 生成一个随机的 AES 密钥(只是随机的 16 个字节),
  2. 使用 AES 和新生成的密钥 [CT1] 加密客户端消息,
  3. 用服务器的 public RSA 密钥 [CT2] 加密先前生成的 AES 密钥(直到现在它被称为 Hybrid Encryption),
  4. 发送CT1和CT2到服务器,
  5. 服务器用私钥解密CT2得到AES密钥,
  6. 服务器使用恢复的 AES 密钥解密 CT1,
  7. 为了发回消息,服务器现在可以使用 AES 和双方都知道的密钥加密消息(不再需要 RSA)[CT],
  8. 客户端收到CT并用已知的AES密钥解密。

这当然只是最基本的设置。为了获得 Perfect Forward Secrecy,您需要使用 Diffie-Hellman Key Exchange。 AES 加密也最好使用经过身份验证的操作模式(例如 GCM)来完成。

如果不想头疼,就用TLS吧。