相关疑难解决方法(0)

签署.NET程序集

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

来自维基百科文章"Assembly(CLI)":

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

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

.net c# assembly-signing

24
推荐指数
1
解决办法
6340
查看次数

签名的.net程序集在加载时是否经过完全验证,以检查它们是否未被修改?

我以前认为已经签名和/或强名称的.net程序集在加载时由CLR验证,这意味着某人无法编辑IL并且仍然具有有效的程序集.然后我听了这个伟大的Herding Code播客,其中Jon McCoy说并没有真正发生(播客中约12:47) - 也就是说,任何人都可以编辑IL并弄乱你的程序集,CLR也不会关心.我知道这听起来很奇怪,但他似乎知道他在说什么,所以也许只是因为我不确切地知道他所指的是什么情景.

有人可以解释CLR是否以及何时实际验证装配的全部内容以确保某人没有篡改IL?如果"签名"或"强命名"没有这样做,您需要什么过程才能使CLR正确检查程序集?

其他一些参考文献(对我来说还没有完全清楚 - 可能我只是有点慢):

.net security clr code-signing .net-assembly

3
推荐指数
1
解决办法
719
查看次数