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

时间:2012-10-16 06:58:12

标签: c cryptography openssl rsa authenticode

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

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

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

  3. 我应该将什么填充算法传递给函数?当我传递 RSA_NO_PADDING 时,它会解密,但会给我128字节长的哈希,这完全没有问题。对于所有其他填充算法选项,它返回未找到填充的错误。

    请您教我或告诉我通过示例或示例的良好链接传递函数的正确参数?

1 个答案:

答案 0 :(得分:1)

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

您需要两个步骤才能完全验证签名(请参阅Microsoft specs):

  1. 验证PKCS#7签名的完整性和身份。
  2. 计算消息摘要并将其与签名中指定的消息摘要进行比较。
  3. 请注意,摘要不限于规范中的SHA-1。摘要算法包含在签名中的digestAlgorithm字段中。