3

我曾经在这里问过一个问题,如果 Windows DLL 是由 Microsoft 签名的。我意识到是这样,一位好朋友告诉我,SigCheck实用程序可以提供有关文件签名的信息;但还有一个问题:

虽然 SigCheck 会告诉我文件是否已签名,但我需要确保 Microsoft 签署了该文件,并且以后没有其他人更改它。我的意思是,如果有人篡改了文件,然后再次对文件进行签名(当然是在签名上使用 Microsoft 的名称)怎么办?

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

4

3 回答 3

4

“我的意思是,如果有人篡改了文件,然后再次对文件进行签名(当然是在签名上使用 Microsoft 的名称)怎么办?”

由于数字签名的性质,这是不可能的。为了生成数字签名,Microsoft 对文件进行了哈希处理,然后使用他们的私钥(只有他们知道)对该哈希进行加密。据我了解,其他供应商将使用Windows 配置为默认信任的其他证书颁发机构的私钥。

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

因此,使文件看起来像是被微软“签名”的唯一方法就是窃取他们的私钥。阅读Wikipedia 上的数字签名文章

有关该过程实际如何工作的更多详细信息,请阅读MSDN 上的“使用 Authenticode 签名和检查代码”“代码签名简介” 。

于 2009-03-07T17:09:09.723 回答
0

从记忆中,签名过程使用公钥密码术

来自维基百科的这张图表最好地解释了这个过程。

总之,

“使用发件人的私钥签名的消息可以由有权访问发件人公钥的任何人验证,从而证明发件人有权访问私钥(因此很可能是与使用的公钥相关联的人) ,以及消息中未被篡改的部分。”

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

于 2009-03-07T17:18:29.733 回答
-1

以其他人已经发布的内容为基础:

免责声明:MS 使用公钥/私钥术语 wrt 数字签名曾经让我很困惑。我刚刚有一个“啊哈!” 片刻。我会尝试分享我的想法,以防它对某人有所帮助。

输入 PPK


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

对于一对多通信,您将保留私钥并共享公钥。想要与您共享文档的朋友将使用您的公钥对其进行签名。您将使用您的私钥解密这些。请注意,您保留哪个特定密钥以及分发哪个密钥并不重要。只是不要同时放弃。

为什么 DigSig 不同?


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

以上是 MS 对其 dll 所做的事情。

客户端验证


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

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

于 2009-03-07T18:53:09.397 回答