何时应该使用密码保护一个强名称密钥文件?

19
在Visual Studio项目设置中,您可以选择一个强名称密钥文件来签名程序集。创建新的密钥文件时,您可以选择用密码来保护它。什么情况下应该这样做?什么情况下不应该?
我认为,如果项目是在Codeplex或类似平台上托管的开源项目,则使用密码保护可能不是一种明智的选择。那么,是否仍应该加密?如果密钥文件受到保护,人们是否无法下载源代码并编译它?具体是如何工作的?
1个回答

15

如果你不信任可以访问它的人,通常应该使用密码保护它。拥有密钥文件访问权限的任何人都可以创建一个带有你的强名称的程序集(与Authenticode不同,他们不会冒充你,但可以使他们的程序集加载而不是你的程序集)。

至于你描述的开源场景,人们总是可以编译代码 - 他们只需创建一个新的密钥文件,但他们创建的程序集将无法被试图加载你的程序集的程序集所加载。


2
哦,所以,如果我有两个使用强名称密钥签名的程序集。如果我从一个程序集引用到另一个程序集,那么它只能与使用正确密钥签名的程序集一起工作? - Svish
3
如果您引用了一个强名称程序集,它不能在运行时被一个使用不同密钥签名的程序集替换(这并非完全正确,但暂且不涉及更高级的内容)。 - On Freund
你所说的“在运行时”是指应用程序运行时,而不是正在运行时,对吗?(只是为了确保我没有误解:p) - Svish
1
我不确定我理解你对运行和正在运行的区别...我的意思是,当汇编引用被解析时,所选择的汇编必须具有相同的强名称。 - On Freund
1
我的意思是在应用程序运行时替换已解析的程序集,但我现在明白你的意思了 :) - Svish
1
实际上,一旦程序集被加载,就不可能“交换”它们,因为您无法从AppDomain中卸载程序集。另一方面,如果您有强制卸载程序集的工具,则可以使用它们来禁用安全检查。 - M.Stramm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接