我认为这是一个愚蠢的问题,但是......在 OpenSSL 中调用 FIPS_mode_set(1) 实际上会改变我要返回的签名,如果是这样,如果我试图在 bouncycastle/.NET 中做同样的事情,我有什么需要做的吗?
背景:出于我所做的目的,我实际上并不真正关心 FIPS,我只是想获得一个 C#.NET 实现,该实现产生与现有 OpenSSL 实现匹配的签名。根据我的阅读,现有代码正在做的是计算 SHA256 哈希,然后应用 .pem 文件中的私有 RSA 密钥。它使用 EVP_Sign* 函数来做到这一点。我尝试使用 System.Security.Cryptography.SHA256 来生成哈希值,以及 bouncycastle 的 PemReader、AsymmetricCypherKeyPair、RsaEngine 和 Pkcs1Encoding 类……但我的输出不匹配。
OpenSSL 实现调用 FIPS_mode_set(1),这是我觉得我唯一没有考虑到的事情......根据我的阅读,所做的只是让它,所以如果你使用任何没有经过认证的 FIPS 兼容的东西,它就会出错,即它不应该改变签名的输出。但我有这种唠叨的感觉...
哦,PKCS1 是用于匹配 OpenSSL 对 EVP_SignFinal 所做的正确编码,对吧?