数字签名与强命名程序集有什么关系.我读到一个强名称的程序集有公钥和数字签名.
"签署程序集涉及对程序集的重要部分进行散列,然后使用私钥加密散列.签名的散列与公钥一起存储在程序集中.公钥将解密签名的散列.当CLR加载一个强命名的程序集,它将从程序集生成一个哈希值,然后将其与解密的哈希值进行比较.如果比较成功,则表示文件中的公钥(以及公钥标记)与私钥相关联用于签署程序集.这意味着程序集中的公钥是程序集发布者的公钥,因此欺骗攻击被挫败."
以上信息准确吗?它没有任何数字签名的参考.我找不到MSDN页面,解释如何签署程序集,如何验证签名以及如何消除黑客攻击的可能性.我想更多地了解这些.
我以前认为已经签名和/或强名称的.net程序集在加载时由CLR验证,这意味着某人无法编辑IL并且仍然具有有效的程序集.然后我听了这个伟大的Herding Code播客,其中Jon McCoy说并没有真正发生(播客中约12:47) - 也就是说,任何人都可以编辑IL并弄乱你的程序集,CLR也不会关心.我知道这听起来很奇怪,但他似乎知道他在说什么,所以也许只是因为我不确切地知道他所指的是什么情景.
有人可以解释CLR是否以及何时实际验证装配的全部内容以确保某人没有篡改IL?如果"签名"或"强命名"没有这样做,您需要什么过程才能使CLR正确检查程序集?
其他一些参考文献(对我来说还没有完全清楚 - 可能我只是有点慢):
谈论编辑IL并绕过强名称签名验证.NET Framework程序集(我不知道这是否与Jon引用的攻击类型相同).
攻击者可以用他自己的密钥辞职但是不能保持你的签名完好无损:强制命名程序集可以用来验证程序集作者吗?(即不是Jon提到的同一攻击)
从.net 3.5说起CLR不会在完全信任下验证程序集:为什么.NET不验证BCL/CLR?(也许这就是Jon的意思?)
如何验证程序集:如何以编程方式验证程序集是否使用特定证书进行签名?
Grey Wolf(由Jon McCoy提供) - 用于复制强化名称在程序集上的签名!https://www.digitalbodyguard.com/graywolf.html