.NET程序集签名

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

从维基百科文章“Assembly(CLI)”:

“对程序集签名包括对程序集重要部分进行散列,然后用私钥对散列进行加密,签名散列与公钥一起存储在程序集中,公钥将解密签名散列,当CLR加载一个强命名的程序集,它将从程序集生成一个哈希,然后将其与解密后的哈希进行比较,如果比较成功,则意味着文件中的公钥(以及公钥标记)与私钥相关联用于签署程序集,这意味着程序集中的公钥是程序集发布者的公钥,因此欺骗攻击受到挫败。“

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


强命名和数字签名都使用公钥加密技术提供关于程序集起源证据 ,以便您可以应用安全策略来确定授予程序集的 权限

他们的技术细节并不相同,但他们打算解决哪些问题。

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

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

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

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

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

明白了吗?

(伟大的问题;这将在9月3日我的博客上。)


正如你可以在前面的相关问题中看到的那样,避免篡改强命名的程序集并不像你所期望的那样简单。


这个强命名与数字签名博客文章解释得非常好。

链接地址: http://www.djcxy.com/p/57487.html

上一篇: Signing of .NET Assemblies

下一篇: Can strong naming an assembly be used to verify the assembly author?