什么样的RSASignaturePadding与PKCS#8密钥一起使用
本文关键字:一起 密钥 PKCS#8 RSASignaturePadding 什么样 | 更新日期: 2023-09-27 17:57:28
我正在尝试使用带RSA的SHA-256用PKCS#8密钥对字符串进行签名。
RSACng.SignData()
方法需要RSASignaturePadding,其选项为Pkcs1
和Pss
。我找不到任何明确的东西来告诉我哪一个将用于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, <??????>);
密码学对我来说是全新的,所以如果我的方法有点过时,请告诉我。
PKCS#8描述了一种对私钥进行编码/解码的方法。如果该密钥是RSA密钥,那么该密钥确实可以用于生成RSA签名。
填充不需要任何特定的键属性。它只需要密钥的大小作为输入,对于RSA来说,密钥的大小与模数的大小(以位为单位的无符号数)相同。
对于RSA签名生成,下面的模幂运算始终相同。它将填充的哈希值提升为私有指数。因此,您可以选择要用于特定协议的填充。
如果你不想指定一个协议,你可以看看CMS(加密消息语法)-以前称为PKCS#7。
在使用PKCS#1v1.5填充的RSA的情况下,填充是确定性的,这使得整个RSA签名生成具有确定性。在PSS的情况下,这是一种非确定性操作,即涉及随机数生成器。新的PSS比PKCS#1v1.5有更好的安全性证明,但PKCS#1.5没有被破坏。