RSACng无法验证哈希

时间:2019-03-23 23:47:11

标签: c# .net cryptography

我有一个使用RSACryptoServiceProvider的旧代码块,我想移植到该代码块以使用较新的RSACng。我遇到了一个我无法解决的问题:RSACng的{​​{1}}方法似乎无法按预期验证哈希。与VerifyHash一起使用时,相同的代码和数据可以正常工作,并且验证成功。

我已经进行了一些调查,并逐步开发了.NET源,最终一直到RSACryptoServiceProvider。我确保NCryptVerifySignature使用的哈希,签名等都相同。最后,由于未知原因,在这种情况下RSACryptoServiceProvider无法成功验证哈希。

我的代码如下:

NCryptVerifySignature

有人对我做错事情有任何建议吗?这是使用最新的.NET Framework(4.7.2)。

1 个答案:

答案 0 :(得分:2)

我对此进行了一点挖掘,问题是因为通过OpenSSL通过以下方式运行时,签名是:

openssl rsautl -verify -in sig.bin -inkey pub.key -pubin -hexdump -raw提出:

0000 - 00 01 ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
0010 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
0020 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
0030 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
0040 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
0050 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
0060 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
0070 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
0080 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
0090 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
00a0 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
00b0 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
00c0 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
00d0 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
00e0 - ff ff ff ff ff ff ff ff-ff ff ff 00 3b 0d 64 83   ............;.d.
00f0 - 8e c6 02 07 fd 73 26 5b-8a c0 ee 4d 13 72 e4 d4   .....s&[...M.r..

基本上,您有一个带有PKCSv1.5填充的签名,并在末尾加上了哈希。但是,签名缺少SEQUENCE(OID(SHA-1), OCTETSTRING)-摘要将直接进入。

CNG希望按照RSASSA-PKCS1-v1_5中的定义存在OID。您可以 要求CNG通过将NULL传递给BCRYPT_PKCS1_PADDING_INFO的{​​{1}}来放宽此要求,但是就我而言,这在.NET Framework或Core中没有公开。知道。

关于如何解决它,如果可能的话,现在最简单的方法是使用CAPI / RsaCryptoServiceProvider。 GitHub问题34202可能会跟踪CNG行为的任何其他进展。