0

对于这个问题的模棱两可的标题,我感到非常抱歉,我真的不知道如何表达这个问题。

我在 NodeJS 中使用 SubtleCrypto 生成了一个公钥和私钥,如下所示:

const { publicKey, privateKey } = await  subtle.generateKey({
          name: 'RSA-OAEP',
          4096,
          new Uint8Array([1, 0, 1]),
          'SHA-256',
 }, true, ['encrypt', 'decrypt']);

这非常适用于一个用例:
公钥加密,私钥解密。

但是,我希望在我的项目中实现 RSA 的方式是这样的:

  1. 客户端向服务器请求公钥
  2. 客户端使用公钥加密有效负载
  3. 服务器使用私钥解密有效负载
  4. 服务器使用私钥加密响应负载
  5. 客户端使用公钥解密响应负载

当我尝试执行Step 4时,我遇到了这个错误:

The requested operation is not valid for the provided key 

有没有办法指定每个键都可以用于Encrypt & Decrypt

另外,如果我的实现完全错误,我很抱歉。

4

1 回答 1

0

如您所述,第 4 步是签名操作。签名与加密数据有很大不同。为此,客户端和服务器都需要自己的密钥对:

client: client public key & client private key
server: server public key & server private key
  1. 客户端上传其客户端公钥
  2. 客户端向服务器请求服务器公钥
  3. 客户端使用服务器公钥加密有效负载
  4. 服务器使用服务器私钥解密有效负载
  5. 服务器使用客户端公钥加密响应负载
  6. 客户端使用客户端私钥解密响应负载

除了使用 RSA 加密和解密大量数据可能带来的巨大计算工作量之外,这里的威胁模型是什么,您想要实现什么?如果你真的想将它部署到生产环境中,你应该非常小心,因为你似乎对这个主题相当缺乏经验(这里没有冒犯)。

于 2022-01-25T22:00:03.803 回答