gpt4 book ai didi

.net - 发布 .net 强名称私钥的含义?

转载 作者:行者123 更新时间:2023-12-02 22:40:58 25 4
gpt4 key购买 nike

假设我想发布一个开源类库。我想知道我是否应该用它发布 snk。例如,我确实想要一个 snk 来使 dll GAC 友好。我见过有公共(public) snk (NHibernate) 和非公开 snk (DevExpress) 的大项目,也见过双方的小项目,所以没有普遍一致,这是肯定的。

假设我不发布私钥。该库的用户本身就是开发人员,如果他们想要进行任何更改,则需要重新编译我的源代码,或者对强名称验证进行异常(exception)处理。既有颈痛,我也有过。

假设我发布了它。我看不出如何利用它。 CAS 之类的东西不再被广泛使用,更重要的是,它甚至在 .NET 4.5 中被弃用了。因此,这不像可怜的用户根据其公钥 token 向我的程序集授予某些权利,而坏人则使用相同的 token 产生了一个错误的程序集。如果坏人可以将自己的 dll 放到某人的计算机上,那么真正阻止他们的并不是强名称。

我认为没有人会检查程序集的公钥 token 。当然,运行时会检查自引用程序集编译后它没有更改,仅此而已。发布者不发布他们的 token ,因此据我所知,我在编译我的代码时可能会首先引用错误程序集。

所以我倾向于发布snk。在我看来,它在理论上提供的安全性很小,在实践中没有安全性,所以为什么要让我的用户的生活更加艰难。也许我应该进行 X.509 代码签名(使用真正私钥的那个),但我认为大多数人也不会检查它。

发布还是不发布?最好的论据获胜。理论方面、实践方面、MS™ 指南,都欢迎。

最佳答案

我不会发布它。

它将允许攻击者重新编译程序集并向其中添加恶意代码。更改后的程序集将与您的程序集具有相同的强名称。

如果您不发布 key ,您可以在没有 key 的情况下分发库和源代码的“可信”二进制文件。如果第 3 方开发人员需要自定义库,他们只需要为其生成一个新 key (但生成的程序集将具有与官方版本不同的强名称,允许运行时区分两者)。

关于.net - 发布 .net 强名称私钥的含义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10787051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com