什么样的RSASignaturePadding与PKCS#8密钥一起使用

本文关键字:一起 密钥 PKCS#8 RSASignaturePadding 什么样 | 更新日期: 2023-09-27 17:57:28

我正在尝试使用带RSA的SHA-256用PKCS#8密钥对字符串进行签名。

RSACng.SignData()方法需要RSASignaturePadding,其选项为Pkcs1Pss。我找不到任何明确的东西来告诉我哪一个将用于PKCS#8。

    // Decode Token (token is Base64 & PKCS8 encoded)
    byte[] decodedKey = Convert.FromBase64String(myBase64String);
    CngKey key = CngKey.Import(decodedKey, CngKeyBlobFormat.Pkcs8PrivateBlob);
    // Build signature
    string signature = "123abc";
    byte[] bytes = Encoding.UTF8.GetBytes(signature);
    // Sign signature using key & SHA256 w RSA
    var unsigned = new RSACng(key);
    byte[] data = unsigned.SignData(bytes, HashAlgorithmName.SHA256, <??????>);

密码学对我来说是全新的,所以如果我的方法有点过时,请告诉我。

什么样的RSASignaturePadding与PKCS#8密钥一起使用

PKCS#8描述了一种对私钥进行编码/解码的方法。如果该密钥是RSA密钥,那么该密钥确实可以用于生成RSA签名。

填充不需要任何特定的键属性。它只需要密钥的大小作为输入,对于RSA来说,密钥的大小与模数的大小(以位为单位的无符号数)相同。

对于RSA签名生成,下面的模幂运算始终相同。它将填充的哈希值提升为私有指数。因此,您可以选择要用于特定协议的填充。

如果你不想指定一个协议,你可以看看CMS(加密消息语法)-以前称为PKCS#7。


在使用PKCS#1v1.5填充的RSA的情况下,填充是确定性的,这使得整个RSA签名生成具有确定性。在PSS的情况下,这是一种非确定性操作,即涉及随机数生成器。新的PSS比PKCS#1v1.5有更好的安全性证明,但PKCS#1.5没有被破坏。