【问题标题】:Given a certificate how can I determine what algorithms and formats are useable with the public key?给定证书,我如何确定哪些算法和格式可用于公钥?
【发布时间】:2021-03-24 12:46:51
【问题描述】:

我有一个证书,上面写着 Signature Algorithmsha256WithRSAEncryptionKey Size 是 1024。

我正在尝试使用Web Crypto API 加密一些任意数据,并且只能通过使用以下参数导入证书密钥来成功加密它

return await window.crypto.subtle.importKey(
    'spki',
    buffer, // binary format of the key
    {
        name: 'RSA-OAEP',
        hash: 'SHA-256',
    },
    true,
    ['encrypt'],
);

然后使用以下参数加密数据

await crypto.encrypt({ name: 'RSA-OAEP' }, cryptoKey, chunk); // max of 62 bytes of data given the key size and algorithm

我的问题是,这是与此特定键一起使用的唯一可能组合吗?

向我颁发公钥的人说,他们希望使用 RSA-PKCS1-KeyEx 的算法和 rsa-sha1 的哈希值和 117 字节大小的数据块来加密数据。

鉴于我对密码学的理解非常有限,我相信RSA-PKCS1-KeyEx 只能用于signing 而不能加密,并且您通常使用私钥而不是公开密钥进行签名。

即使将importKey 的参数更改为使用RSASSA-PKCS1-v1_5sha-1 也会引发错误,显示Cannot create a key using the specified key usages.

是否甚至可以使用证书/密钥为 sha256WithRSAEncryption 和密钥大小为 1024 的这些参数,或者我目前的方式是使用密钥和加密数据的唯一可能方式?

【问题讨论】:

    标签: javascript encryption rsa webcrypto-api


    【解决方案1】:

    我有一个证书,上面写着签名算法是sha256WithRSAEncryption,密钥大小是 1024。

    是的,好的,但是该签名算法是针对证书下方的签名的。这不是您需要用于证书中包含的公钥或私钥的签名算法。

    向我颁发公钥的人说,他们期望使用 RSA-PKCS1-KeyEx 算法和 rsa-sha1 哈希值以及 117 字节大小的数据块来加密数据。

    据我所知,RSA-PKCS1-KeyEx 在任何标准中都不存在,这是 PKCS#1 加密填充的可怕名称。

    除此之外,PKCS#1 v1.5 填充甚至不使用哈希,因此指定 SHA-1 只是表明他们不知道他们在说什么。

    鉴于我对密码学的理解非常有限,我相信 RSA-PKCS1-KeyEx 只能用于签名而不是加密,并且您通常使用私钥而不是公共密钥进行签名。

    PKCS#1 标准中指定了两种不同的填充方法,RSAES-PKCS1-v1_5 是使用 PKCS#1 v1.5 填充的加密,而 RSASSA-PKCS1-v1_5 是使用不同 PKCS# 的签名生成1 v1.5 填充。

    即使将 importKey 的参数更改为使用 RSASSA-PKCS1-v1_5 和 sha-1 也会引发错误,指出无法使用指定的密钥用法创建密钥。

    是的,好的,如果证书中的密钥使用只是指定加密,那么使用“带附件的签名方案”或 SSA 将不被接受。

    甚至可以将这些参数与 sha256WithRSAEncryption 的证书/密钥和 1024 的密钥大小一起使用,还是我目前的方式是使用密钥和加密数据的唯一可能方式?

    我只看到 WebCrypto 中指定的 OAEP。这可能是因为您需要使用的 PKCS#1 v1.5 填充已被证明是不安全的。 SHA-1 也不是很安全,1024 的密钥大小也不是很安全。因此,与您交谈的人似乎也不太了解密码学(正如我们现在通常所说的那样)。

    总而言之,库可能接受rsaEncryption 作为算法,在这种情况下它可能使用PKCS#1 v1.5 填充。此选项隐藏在定义 OAEP 的 WebCrypto API 中。这本身就表明他们也不知道自己在做什么。

    【讨论】:

      猜你喜欢
      • 2017-12-17
      • 1970-01-01
      • 2019-10-03
      • 2010-11-02
      • 2016-07-17
      • 1970-01-01
      • 2013-03-21
      • 1970-01-01
      • 2021-01-04
      相关资源
      最近更新 更多