如何使用 RSA 加密来加密 http 响应

How to encrypt http response using RSA encryption

我正在开发一个 Web 服务,我正在为其使用 RSA 加密来加密请求-响应。我已经与客户端共享了 public 密钥,并且我能够使用我的私钥解密传入的请求。现在我的问题是如何加密要返回给客户端的响应。我有两个选择:

(1) 使用我的私钥加密响应,客户端将使用已经共享的 public 密钥对其进行解密。

(2) 要求客户提供他们的 public 密钥并使用该 public 密钥加密响应。

请建议使用哪种策略来加密响应?

您不能使用私钥加密,因为 public 密钥应该是 public。使用私钥加密本质上是不安全的,编程 API 通常不允许使用它。

所以 (2) 确实是唯一的选择:拥有客户端 public 密钥并让他们使用私钥解密。然而,这还不是全部:

  1. public 密钥需要被信任,您可能需要设置一个完整的 PKI 来信任这些密钥;
  2. 较大的邮件无法使用 RSA 轻松加密,因此您可能需要混合加密(随机 AES 密钥加密并使用该密钥加密邮件);
  3. padding oracle 攻击非常真实,并且适用于 RSA,因此仅执行 RSA 是非常危险的。

这就是通常建议(仅)依赖 TLS 的原因。 TLS 并不总是安全的,但它几乎总是比自制方案更安全。