向开源项目的源代码管理添加强名称密钥的任何安全问题



给定一个强名称键(snk文件(。将此文件添加到开源项目的源代码管理是否存在任何安全问题?

简单的答案是肯定的和否定的 - 这取决于您首先对程序集进行强名称签名的目的。

有关强名称签名的 MSDN 页面很好地总结了这两个目的。

强命名为应用程序或组件提供唯一标识 其他软件可以用来明确引用它。例如 强命名使应用程序作者和管理员能够 指定要用于共享组件的精确服务版本。 这使不同的应用程序能够指定不同的版本 不影响其他应用程序。此外,您可以使用 组件的强名称作为建立信任的安全证据 两个组件之间的关系。

任何公共分布式库 (DLL( 都应使用强名称签名,只要它旨在供最终用户使用。(即,除非是实现细节等。

我看到的签名的主要目的往往是出于更多技术原因,包括唯一标识(命名空间有时会无意中发生冲突(和使程序集可用于 GAC。在这种情况下,公开密钥文件不会产生任何安全隐患,因为一开始就没有打算这样做。不提供信任/来源保证,但唯一标识仍然有效。MSDN 页面主要讨论此方案;您应该和不应该签署集会的时间;以及周围的细节。

但是,如果您为了身份验证而对程序集进行签名(特别是为了向使用者提供程序集来自声明源的保证(,则外部(公共分发(密钥将完全使此信任模型无效。也就是说,任何人都可以任意修改您的项目代码,并正确重新生成和重新签名您的程序集,实质上是伪造您的身份。不幸的是,MSDN 页面没有很好地解决这种用法(可能是因为它需要更广泛地考虑为安全策略的一部分(,但它仍然很重要。

最后,请注意,CLR/.NET 使用两种类型的密钥证书文件对程序集进行签名。正如你提到的,第一个是 SNK;这是不受密码保护的。第二个是PFX,它实际上只是SNK密钥文件的密码保护版本。只要此密码足够安全,因此使用开源软件分发安全的 PFX 就没有安全问题。Visual Studio(和命令行密钥生成实用程序(当然能够创建两者。

最新更新