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

Ami*_*rge 2 security cryptography public-key-encryption x509certificate public-key

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

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

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

Pet*_*y B 5

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

编辑:

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