c# - 为什么建议在开源存储库中包含用于程序集签名的私钥?

标签 c# .net open-source signing strongname

根据 MSDN ,如果您正在开发开源软件,建议的做法是将用于强命名程序集的私钥和公钥都包含到公共(public)源代码控制系统中:

If you are an open-source developer and you want the identity benefits of a strong-named assembly, consider checking in the private key associated with an assembly into your source control system.

这让我很困惑。公开私钥?在这种情况下,非对称加密的全部目的和安全性不会被打败吗?

我在同一篇文章中看到这个注释:

Do not rely on strong names for security. They provide a unique identity only.

这无助于减少我的困惑。如果安全不是目标,为什么还要使用公私 key 对呢? .NET 中的强命名机制是否以不恰当的方式使用公私 key 对?我的猜测是我遗漏或误解了某些东西。

最佳答案

强名称签名不是为了安全,而是为了保证唯一性。如果两个人创建了 Foo.dll v1.0.0.0,您就有办法在 GAC 中区分他们。

如果您有一个开源库,并且您希望最终用户的 MyOpenSource.dll v1.0.0.0 能够用作已发布的 MyOpenSource.dll v1 的替代品.0.0.0 那么用户的副本和官方副本都必须使用相同的 key 签名(或者两者都必须根本不签名)。这就是为什么你想要分发它。

强名称键不是为了说“这是 MyOpenSource.dll 的官方未修改副本”,这就是 Authenticode signing是为了。它仅用于防止来自不同发布者的名称冲突。

关于c# - 为什么建议在开源存储库中包含用于程序集签名的私钥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36141302/

相关文章:

c# - WPF 设计器无法加载

git - 提交给开源项目的后门示例?

php - PHP 中好的开源分析/统计软件?

c# - 如何从文本框中获取当前编辑的文本而不是页面加载内容

c# - 如何将对象传递给自定义数据注释验证器

c# - 减少启动 MVC Web 应用程序和查看第一页之间的时间

.net - 自动化测试 OpenXML SDK

.net - 在 ubuntu 18.4 上为 .net 应用程序创建服务期间出错。可执行路径不是绝对的 :

c# - 开头没有选定行的 DataGridView

language-agnostic - 开源一个商业网站