2009-08-26 82 views
23

数字签名与强名称程序集有什么关系?我读到一个强命名的程序集有公钥和数字签名。.NET程序集签名

Wikipedia article "Assembly (CLI)"

“签约大会包括采取大会重要组成部分的哈希,然后用私钥加密哈希签名的散列值与公众一起存储在装配。密钥,公共密钥将解密已签名的散列,当CLR加载一个强命名的程序集时,它将从程序集生成一个散列,然后将其与已解密的散列进行比较,如果比较成功,则表示文件中的公钥(以及公钥标记)与用于签署程序集的私钥相关联,这意味着程序集中的公钥是程序集发布者的公钥,因此sp Oing攻击受挫。“

是上面的信息是否准确?它没有任何数字签名的参考。我无法找到解释程序集签名方式的MSDN页面,如何验证签名以及如何消除黑客攻击的可能性。想知道更多这些。

+0

你问了很多。它是一个复杂的主题,你似乎有兴趣了解它是如何工作的,从头到尾。 – Will 2009-08-26 13:23:40

+1

我想知道它是如何工作的。 – devnull 2009-08-26 13:29:57

回答

45

两个强命名和数字签名使用公钥加密提供证据有关程序集的起源,这样您就可以申请安全策略,以确定哪些权限被授予组装

它们的区别不在他们的技术细节,但什么问题,他们是为了解决。

强名称的目的仅仅是为了确保当您按名称加载程序集时您正在加载您认为正在加载程序集的程序集。那就是只有的一个强名的设计目的。你说“我想装载Frobber,版本4,来自FooCorp”。强大的名称设备可确保实际加载该DLL,而不是另一个名为Frobber的程序集,版本4,来自Dr. Evil Enterprises。

为了实现这一目标,所有需要的是你知道有FooCorp的私钥相关联的公钥标记。您如何知道公钥令牌完全是您的业务。没有任何旨在帮助您安全获取该信息的基础设施。不知何故,你只是想知道它是什么。

从发布者证书数字签名的目的是为了建立一个可验证的身份和信任链。信任链从未知或不确定来源的代码块转变为“可信根” - 您已将操作系统配置为信任的实体。您下载了一些代码,并且代码具有带有FooCorp证书的数字签名。您检查证书并说明“该程序来自FooCorp,VeriSign证明此证书的准确性。”由于VeriSign是您值得信赖的根源之一,因此您现在确信此代码确实来自FooCorp。

注意数字签名解决的问题有多复杂。我们并不是要简单地确定“这个与这个名字相关的代码块是不是?”相反,我们试图确定这些代码来自哪里,谁声称所负责的公司的存在,我们是否应该相信这家公司?

强名和数字签名之间的区别强调了基于加密安全性的难点。难题不是密码学;这只是数学。难题是安全管理密钥信息的分发并将它们与正确的实体相关联。强名称,因为他们试图解决一个非常小但重要的问题,没有关键的管理问题。或者,他们将关键管理问题强加给用户。数字签名都是关于试图通过证书自动安全地分发关键信息,以解决更复杂的信任和身份问题。

这是明确的吗?

(大问题;这会涨上my blog 9月3日)。

1

digital signature基本上是防止篡改的位。一旦程序集被签名,那么任何更改将使签名无效,并且clr将知道不加载它。

阅读维基百科的文章。数字签名可防止篡改任何数字文档。不只是组件。它解释得更好,然后我可以做到。

3

正如你可以在此阅读previous related question,避免与强命名组件篡改并不那么简单,因为你可以期待。

0

我发现一个有趣的解释here。张贴在这里为纸路径。希望它可以帮助某人。