如何使用 RSA 加密来加密 http 响应
How to encrypt http response using RSA encryption
我正在开发一个 Web 服务,我正在为其使用 RSA 加密来加密请求-响应。我已经与客户端共享了 public 密钥,并且我能够使用我的私钥解密传入的请求。现在我的问题是如何加密要返回给客户端的响应。我有两个选择:
(1) 使用我的私钥加密响应,客户端将使用已经共享的 public 密钥对其进行解密。
(2) 要求客户提供他们的 public 密钥并使用该 public 密钥加密响应。
请建议使用哪种策略来加密响应?
您不能使用私钥加密,因为 public 密钥应该是 public。使用私钥加密本质上是不安全的,编程 API 通常不允许使用它。
所以 (2) 确实是唯一的选择:拥有客户端 public 密钥并让他们使用私钥解密。然而,这还不是全部:
- public 密钥需要被信任,您可能需要设置一个完整的 PKI 来信任这些密钥;
- 较大的邮件无法使用 RSA 轻松加密,因此您可能需要混合加密(随机 AES 密钥加密并使用该密钥加密邮件);
- padding oracle 攻击非常真实,并且适用于 RSA,因此仅执行 RSA 是非常危险的。
这就是通常建议(仅)依赖 TLS 的原因。 TLS 并不总是安全的,但它几乎总是比自制方案更安全。
我正在开发一个 Web 服务,我正在为其使用 RSA 加密来加密请求-响应。我已经与客户端共享了 public 密钥,并且我能够使用我的私钥解密传入的请求。现在我的问题是如何加密要返回给客户端的响应。我有两个选择:
(1) 使用我的私钥加密响应,客户端将使用已经共享的 public 密钥对其进行解密。
(2) 要求客户提供他们的 public 密钥并使用该 public 密钥加密响应。
请建议使用哪种策略来加密响应?
您不能使用私钥加密,因为 public 密钥应该是 public。使用私钥加密本质上是不安全的,编程 API 通常不允许使用它。
所以 (2) 确实是唯一的选择:拥有客户端 public 密钥并让他们使用私钥解密。然而,这还不是全部:
- public 密钥需要被信任,您可能需要设置一个完整的 PKI 来信任这些密钥;
- 较大的邮件无法使用 RSA 轻松加密,因此您可能需要混合加密(随机 AES 密钥加密并使用该密钥加密邮件);
- padding oracle 攻击非常真实,并且适用于 RSA,因此仅执行 RSA 是非常危险的。
这就是通常建议(仅)依赖 TLS 的原因。 TLS 并不总是安全的,但它几乎总是比自制方案更安全。