是否有任何安全问题为开源项目的源代码控制添加强名称密钥?

Sim*_*mon 12 .net security strongname

给出一个强名称密钥(snk文件).将此文件添加到开源项目的源代码管理中是否存在任何安全问题?

Nol*_*rin 15

简单的答案是肯定的,不是 - 这取决于你首先签名强化名称的目的.

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

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

任何公开分发的库(DLL)都应该是强名称签名的,只要它打算由最终用户使用即可.(即除非是实施细节等.)

我所看到的签名的主要目的往往是出于更多技术原因,包括唯一标识(名称空间有时可能会无意中发生冲突)以及为GAC提供程序集.在这种情况下,公开提供密钥文件不会产生任何安全隐患,因为首先没有任何意图.不提供信任/来源保证,但唯一标识仍然有效.MSDN页面主要讨论这种情况; 你应该而且不应该签署集会的时候; 和周围的细节.

但是,如果您为了身份验证而签署程序集 - 特别是为了向消费者提供程序集来自声明的源的保证 - 那么一个开放的(公开分布的)密钥完全使该信任模型无效.也就是说,任何人都可以随意修改您的项目代码,并正确地重建和重新组装您的程序集,从根本上伪造您的身份.不幸的是,MSDN页面并没有很好地解决这个问题(可能因为它需要被更广泛地考虑作为安全策略的一部分),但它仍然很重要.

最后,请注意CLR/.NET使用两种类型的密钥证书文件来签署程序集.首先是SNK,如你所说; 这是非密码保护的.第二个是PFX,它实际上只是SNK密钥文件的密码保护版本.只要此密码足够安全,在使用您的开源软件分发安全的PFX时就没有安全问题.Visual Studio(以及命令行密钥生成实用程序)当然能够创建两者.