如果两个文件的公钥相同,是否足以断定它们是由同一个证书签名的?

时间:2011-06-28 10:43:57

标签: security cryptography x509certificate public-key-encryption public-key

我正在为我的软件实现自动更新机制。服务器上的msi使用signtool进行签名。我的应用程序下载msi并读取下载的msi的公钥。如果公钥与源代码中硬编码的公钥匹配,则它将执行msi并自行更新。

这是否足以确保不会错误地执行恶意msi?我的理解是,如果我的证书签名,文件将只有相同的公钥。

修改 在petey的帮助下,我能够检测到msi是否由我的证书签名。但是,这并没有解决我的问题。我仍然可以使用像Orca这样的工具编辑已签名的msi。即使msi不再与签名的msi相同,证书也没有任何变化。因此,当我检查msi是否由我签名时,我得到了。虽然我理解这可能是预期的行为,但必须有一些方法来检测msi是否被篡改?

1 个答案:

答案 0 :(得分:5)

如果它是相同的公钥,则可能是,它是相同的证书。但有了这些知识,攻击者可以很容易地模仿你的公钥并将其粘贴在他的MSI上,因为它是公开的。您应该使用该公钥来验证MSI上的签名,而不仅仅是检查它是否是相同的公钥,这样您就可以确定它是使用相应的私钥签名的,攻击者不会拥有该私钥。您还应该运行证书链并验证签名,直至您的可信CA.

编辑:

你究竟签了什么?如果签署的内容被更改,签名不应有效。但是,它听起来像消息验证代码(键控哈希)将起作用。如果您有预共享散列密钥,则可以在下载之前对MSI进行散列,然后再次验证客户端的散列。或者,如果您不想使用键控哈希,则可以使用常规哈希,然后使用相同的私钥对哈希值进行签名。如果您可以使用公钥“验证”(即解密)哈希,您知道哈希来自您,那么您可以重新哈希msi并检查哈希值是否相同。