使用OpenSSL API验证Authenticode签名的可执行文件和DLL

5 c openssl cryptography rsa authenticode

我已经安装了openssl,现在rsa_test.c运行正常.我想做的是:

  1. 打开任何exe或dll数字证书.提取指纹PublicKey.公钥也包含指数(如果您熟悉ASN1编码).

  2. 现在我已经计算了文件的SHA-1哈希,并将其与MD字段进行比较,以确定它是否正确.所以现在我想将Thumbprint,PublicKey-> mPublicKey-> e传递给RSA_public_decrypt函数来计算文件的解密SHA-1哈希值.

我应该将哪种填充算法传递给函数?当我传递RSA_NO_PADDING时,它会解密,但会给我128字节长的哈希,这根本不正确.对于所有其他填充算法选项,它返回未找到填充的错误.

你能教我或者告诉我通过这个函数传递函数的正确参数吗?

Ros*_*nko 3

您应该使用PKCS7_verify函数来验证整个 PKCS #7signedData 块。

您需要两个步骤来完全验证签名(请参阅Microsoft 规范):

  1. 验证 PKCS #7 签名的完整性和身份。
  2. 计算消息摘要并将其与签名中指定的进行比较。

请注意,摘要不限于规范中的 SHA-1。摘要算法包含在签名的digestAlgorithm 字段中。

  • @Abhineet 答案很好。这肯定是解决该问题的明智方法,并且对于 OP 来说,看到替代(可能更好)的解决方案可能会很有用。 (2认同)