签署.NET程序集

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

来自维基百科的文章“Assembly(CLI)” :

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

以上信息准确吗? 它没有任何数字签名的参考。 我找不到MSDN页面,解释如何签署程序集,如何validation签名以及如何消除黑客攻击的可能性。 想了解更多这些。

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

它们的技术细节不同,而是它们要解决的问题。

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

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

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

请注意数字签名解决的问题有多复杂。 我们不是试图简单地确定“这个名称是否与此名称相关联?” 相反,我们试图确定这些代码的来源,以及谁负责公司的存在,据称负责,我们应该信任该公司吗?

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

明白了吗?

(很好的问题;这将在9月3日在我的博客上发布。)

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

这篇强大的命名与数字签名博客文章很好地解释了它。

数字签名本质上是防止篡改的一点。 对程序集进行签名后,任何更改都将使签名无效,clr将知道不加载它。

阅读维基百科文章。 数字签名可防止篡改任何数字文档。 不只是assembly。 它解释它比我做得更好。

我在这里找到了一个有趣的解释 在这里张贴纸质文件。希望它可以帮助某人。