File 文件签名:如何确保Windows DLL为';没有修改?

File 文件签名:如何确保Windows DLL为';没有修改?,file,signature,verify,File,Signature,Verify,我曾经问过一个问题,Windows DLL是否由Microsoft签名。我意识到是的,一位好朋友告诉我,该实用程序可以提供有关文件签名的信息;但仍然存在一个问题: 虽然SigCheck会告诉我是否对文件进行了签名,但我需要确保Microsoft对该文件进行了签名,并且以后没有其他人对其进行更改。我的意思是,如果有人篡改了文件,然后又在文件上签名(当然签名上有微软的名字),那该怎么办 我怎样才能绝对确定该文件是真实的 “我是说,如果有人篡改了 文件,然后再次对文件进行签名 (屏幕上显示的名称为Mi

我曾经问过一个问题,Windows DLL是否由Microsoft签名。我意识到是的,一位好朋友告诉我,该实用程序可以提供有关文件签名的信息;但仍然存在一个问题:

虽然SigCheck会告诉我是否对文件进行了签名,但我需要确保Microsoft对该文件进行了签名,并且以后没有其他人对其进行更改。我的意思是,如果有人篡改了文件,然后又在文件上签名(当然签名上有微软的名字),那该怎么办

我怎样才能绝对确定该文件是真实的

“我是说,如果有人篡改了 文件,然后再次对文件进行签名 (屏幕上显示的名称为Microsoft) 当然是签名

这是不可能的,因为数字签名的性质。为了生成数字签名,微软对文件进行散列,然后用他们的私钥(只有他们知道)对散列进行加密。据我所知,其他供应商将使用Windows默认配置为信任的私钥

Windows检查文件时,会使用相应的公钥解密签名。然后将此签名与当前签名进行比较。如果它们匹配,则该文件来自Microsoft。如果它们不匹配,则文件已被篡改

因此,让文件看起来像是微软“签名”的唯一方法就是窃取他们的私钥。读这本书


有关该过程实际工作方式的更多详细信息,请从签名过程使用的内存中阅读MSDN。

维基百科对这个过程的解释是最好的

总之

“由发件人签名的邮件 私钥可以由任何人验证 谁有权访问发送者的公共地址 密钥,从而证明发送方 有权使用私钥(以及 所以很可能就是这个人 与所使用的公钥关联), 而信息中有一部分 没有被篡改。”


例如,Sigcheck使用Microsoft的公钥对以前使用Microsoft私钥签名的文件执行验证(当然,只有Microsoft有权访问私钥)。

以其他人已经发布的文件为基础:

免责声明:MS使用公钥/私钥术语w.r.t数字签名让我很困惑。我刚听到一声“啊哈!”片刻。我会尽量和大家分享我的想法,以防对别人有所帮助

输入PPK


一般的公钥-私钥方案通过生成一对不对称的密钥来工作。你不能(通过可行的方法)从另一个中派生出一个。其中一个称为私钥,另一个称为公钥

对于一对多通信,您将保留私钥并共享公钥。希望与您共享文档的朋友将使用您的公钥对其进行签名。您将使用私钥解密这些。请注意,您保留的特定密钥和分发的密钥并不重要。只是不要两者都放弃

为什么DigSigs不同?


数字签名有点奇怪。这是一种多对一的情况。要继续上一个示例,请考虑您希望与朋友共享文档的情况。你需要对它们进行签名,即加密,你的朋友需要能够解密。因此,您仍然共享您的公钥,但改为使用您的公钥签名并将其发送出去。你的朋友已经有了这个密钥,他们很乐意解密。在这种情况下,公钥充当私钥,私钥充当公钥

以上是MS对其DLL所做的操作

客户端验证


现在,验证部分。由MS生成的证书在证书颁发机构声明其有效之前是无效的。这对任何人都适用。如果你想安全地开展业务,你必须从CA处获得证书。一旦你的客户端安装了你的应用程序,操作系统的验证程序就会撕掉你的证书,并通过验证一种称为信任链的东西对其进行测试。它将检查谁认证了你的签名。这是父证书。如果系统能够识别家长,那么他们就完成了,你也被接受了。但是,如果无法验证父级,则调用父级的父级。链将继续,直到找到可以验证的节点。如果找不到节点,他们会将其报告为未签名的不安全节点


请注意,证书可以被吊销。所以,证书并不意味着你很好。这是验证过程变得重要的另一个原因。

ITYM使用公钥加密。。。用公钥解密。这也允许非MS供应商进行签名。不,数字签名方案始终是私钥,然后使用公钥进行验证。我不确定微软到底是如何运作的,这样外部供应商就可以签字了。啊,对了!我现在明白了。我过去在理解这一点上有很多问题。我会发布我的理解。恐怕你的回答中有很多错误的陈述,这可能是你被否决的原因。如果我可以善意地建议,请不要把你自己对事情如何运作的猜测当作事实。请记住,如果其他人错误地依赖您的错误信息,您可能会给他们带来问题。