【发布时间】:2021-09-18 20:46:28
【问题描述】:
我不确定我应该在这里还是在 Security Stackexchange 中问这个问题。
无论如何,我最近在使用 TPM 处理 RSA 签名时遇到了一个问题,我将填充方案从 RSASSA-PKCS1-v1_5 切换到了 RSASSA-PSS。我认为这应该没什么区别,但我注意到 TSS.MSR(.NET TPM 库)中的一个示例不再起作用。我在https://github.com/microsoft/TSS.MSR/issues/109 开始了一个关于它的问题。
但我想检查一下,是否有人可以分享意见,是否需要做或注意除了更改填充方案之外的一些明显的事情?
我认为不是,这也隐含在 .NET RSA 库等参数中,例如https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.rsasignaturepadding 以及如何使用它
using(var rsaKey = RSA.Create(keySizeInBits: 2048))
{
byte[] message = /* Random data. */
var sig = rsaKey.SignData(message, HashAlgorithmName.SHA256, RSASignaturePadding.Pss);
}
我从https://security.stackexchange.com/questions/183179/what-is-rsa-oaep-rsa-pss-in-simple-terms、https://crypto.stackexchange.com/questions/77881/are-rsa-pss-parameters-standardized 和其他地方的问题中看到填充实际上是如何发生的更复杂。但假设它是库的一个实现细节,并且签名检查似乎不匹配或不起作用,一个结论是可能需要检查此 TSS.NET 库中的各种内部参数,例如填充。所以,因此我想确保自己这个结论是正确的,并且可能没有非常明显的东西。举个例子:不要使用 SHA-256 或将 salt size 明确设置为 nn(好吧,这可能是一个通常不应该关心的实现细节)。
附录:
这是在接受Maarten Bodewes的优秀笔记之后写的。
将散列从 SHA-256 切换到 SHA-1 并没有消除链接示例中验证签名的失败。不过,正如预期的那样,“nameSize”或摘要更改为 20 个字节。因此,如果在示例或某处的库中没有正确处理一些“挥之不去的默认值”,仅此一项(可能是部分解决方案)并不是切换到 RSASSA-PSS 填充方案失败的原因。
任务继续。 :)
【问题讨论】:
标签: .net rsa tpm trusted-computing