为什么我不能使用 RSASSA-PKCS1-v1_5 到 encrypt/decrypt?

Why I can't use RSASSA-PKCS1-v1_5 to encrypt/decrypt?

首先,我对密码学完全陌生,我只是对一些加密算法及其工作原理有基本的了解,例如 RSA、DES 等。

我想用 SubtleCrypto in JS 做一些事情,包括 signing, verifying, encrypting, decrypting 使用 RSA。

我只是无法生成完成所有这些操作的密钥对;例如,下面的代码可以很好地生成密钥对来执行 signing/verifying:

let keyPair = window.crypto.subtle.generateKey(
    {
        name: "RSASSA-PKCS1-v1_5",
        modulusLength: 4096,
        publicExponent: new Uint8Array([1, 0, 1]),
        hash: "SHA-512"
    },
    true,
    ['sign', 'verify']
  );
  
  keyPair.then((value)=>{
    console.log("worked properly.");
  })
  .catch((error)=>{console.log("Error:", error)})

但是当我使用上面的代码为 encrypting/decrypting 生成密钥对时,我会得到一个 DOMException(在浏览器中)或 SyntaxError(在片段中):

let keyPair = window.crypto.subtle.generateKey(
    {
        name: "RSASSA-PKCS1-v1_5",
        modulusLength: 4096,
        publicExponent: new Uint8Array([1, 0, 1]),
        hash: "SHA-512"
    },
    true,
    ['encrypt', 'decrypt']
  );
  
  keyPair.then((value)=>{
    console.log("worked properly.");
  })
  .catch((error)=>{console.log("Error:", error)})

注意: 我发现 RSA-OAEP 的行为完全不同,我的意思是它与 encrypting/decrypting 一起工作,但在 signing/verifying 时卡住并显示相同的错误.

问题:您能否提供一个link来解释这些RSA变体之间的区别以及我应该在什么时候使用其中的一个?我用谷歌搜索,但找不到任何内容,MDN

中也没有任何解释

抱歉,如果我的英语不是很好。

要回答的问题是:

Question: Can you please provide me a link which explain the differences between these RSA variants and when should I use which one of them?

你可以参考这个Documentation,在Supported algorithms部分的底部你可以找到table 它为您提供了关于哪种算法适用于哪种操作的完整指导table。

同一算法不能用于所有操作,因为在问题下方@Topaco ,它们使用不同的填充变体等等:

Encryption/decryption and signing/verifying use different padding variants. This is explained in RFC8017. Encryption/decryption apply the older RSAES-PKCS1-v1_5 and the more modern RSAES-OAEP. The corresponding counterparts in the signing/verifying context are RSASSA-PKCS1-v1_5 and RSASSA-PSS. The WebCrypto API does not use RSAES-PKCS1-v1_5 anymore since 2014, see here.

现在使用这些算法进行解密似乎有点不安全。

但如果您仍在寻找使用 RSASSA-PKCS1-v1_5 来 encrypt/decrypt 的方法,请查看 https://www.npmjs.com/package/jsencrypt

更新:尚未证明使用RSASSA-PKCS1-v1_5是不安全的,但仍然不推荐。