使用强名称(存储在 .snk 文件中的密钥对)进行签名(除其他用途外)旨在防止伪造组件。
例如:我发送了一个用强名称签名的程序集,然后其他一些开发人员使用我的程序集,所以他的程序集现在包含对我的引用,提到我的密钥对的公钥。一些用户安装了该开发人员程序集和我的程序集,并愉快地使用了该开发人员的代码。如果其他人试图生成一个看起来像我的版本的程序集并说服用户这是一个“值得安装的更新”,那么伪造的程序集将不会加载,因为我控制着我的密钥对并且伪造的程序集没有使用相同的密钥对进行签名. 好的,酷。
但是,是什么阻止了恶意方伪造我的程序集和其他开发人员的依赖程序集并“运送”它们呢?他们抓住我的程序集和那个开发人员的程序集,篡改两者,用任何密钥对我的程序集的伪造版本进行签名,然后将对其的引用添加到依赖程序集的伪造版本中,也对其进行签名,然后将两者都发送出去。我的意思是恶意“运送”两个程序集不应该比“运送”一个程序集困难得多。
使用强名称签名如何防止伪造多个程序集?