首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET核心组件中非常特殊的PublicKey

.NET核心组件中非常特殊的PublicKey
EN

Stack Overflow用户
提问于 2011-08-26 21:22:19
回答 2查看 494关注 0票数 8

我注意到核心.NET程序集的PublicKey = 00000000000000000400000000000000。它不仅比sn.exe允许生成的那些(最小384位)短,而且它有很多零。

如何用如此花哨的公钥生成签名密钥?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-13 21:02:43

这是ECMA标准定义的公钥。

它是为了处理三个相互冲突的需求:

  1. 一种确保程序集由其创建者签名且不会由欺诈性的另一方创建的机制。
  2. 以开放的方式定义CLI,以便其他人可以自由地实现某个版本(Mono将是一个实际的示例)。
  3. 该框架的每个版本都有一个标准的类库。

这三件事不能同时发生!

如果我创建了一个版本的.NET (第2点),那么我需要提供一个标准库的版本(第3点),它需要被信任(第1点),所以我需要在它上面签名来证明我是微软的。等等,我不是微软!(再说一遍,第二点)。

相反,发生的情况是:

  1. I创建一个公钥-私钥对。受托在我的框架库实现中构建新发布版本的程序集的人可以访问私钥,任何在CLI上做任何工作的人都可以知道公钥。implementation.
  2. I将相关程序集标记为已使用与公钥00000000000000000400000000000000 (在ECMA标准中定义)相对应的密钥进行签名,尽管它们实际上是使用上述私钥进行签名的。
  3. 在CLI中的代码中,对声称已使用与公钥00000000000000000400000000000000相对应的密钥进行签名的程序集的任何检查都使用真正的公钥进行检查。如果验证无误,那么它只能由我们信任的构建这些程序集的人签名。

当然,MS的框架不会信任我们的程序集,Mono也不会信任它们,我们也不会信任他们中的任何一个,因为我们都有不同的真实密钥对应于ECMA标准密钥。这是理所当然的。

同时,00000000000000000400000000000000不匹配任何真正有效的公钥的事实意味着它不可能与任何其他公钥冲突。

票数 6
EN

Stack Overflow用户

发布于 2019-05-18 20:06:58

这不是这个问题的正确答案。这个答案唯一提供的是指向ECMA标准的指针,显然是带有CLI规范的ECMA-335。但是这个ECMA标准只提供了关于唯一/固定值和它应该被调用的名称的基本定义。否则,它不会提供有关如何以及在何处找到实际公钥的任何信息。值0000000000000000040000000000000000不是公钥,它只是一个称为标准公钥的标记,与真正的公钥无关。此值用于计算使用它的程序集的公钥令牌,但在处理程序集签名时,此值不用作RSA算法的任何公钥。你需要一个真正的公钥。问题的正确答案应该是如何以及在何处找到使用它的程序集的实际公钥

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7205272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档