gpt4 book ai didi

.net - .NET 核心程序集中非常特殊的 PublicKey

转载 作者:行者123 更新时间:2023-12-04 07:58:11 27 4
gpt4 key购买 nike

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

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

最佳答案

这是 ECMA 标准定义的公钥。

它是为了处理三个相互矛盾的要求:

  • 一种机制,可确保程序集由其创建者签名,并且不可能由欺诈性的其他方创建。
  • 以其他人可以自由实现一个版本的方式公开定义 CLI(Mono 将是一个真实的例子)。
  • 每个版本的框架都有一个标准的类库。

  • 这三件事不能同时发生!

    如果我创建了一个.NET版本(第2点),那么我需要提供一个标准库的版本(第3点),它需要被信任(第1点),所以我需要签名以证明我'微软。哦等等,我不是微软! (嗯,又是第 2 点)。

    相反,发生的是:
  • 我创建了一个公私钥对。在我的框架库实现中构建新版本程序集的人可以访问私钥,任何在 CLI 实现上进行任何工作的人都可以知道公钥。
  • 我将相关程序集标记为已使用与公钥相对应的 key 00000000000000000400000000000000 签名(在 ECMA 标准中定义),尽管它们实际上是用上面提到的私钥签名的。
  • 在 CLI 的代码中,任何对声称已使用与公钥相对应的 key 签名的程序集的检查 00000000000000000400000000000000使用真实的公钥进行检查。如果这检查出来,那么它只能由我们信任的人在构建这些程序集时签名。

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

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

    关于.net - .NET 核心程序集中非常特殊的 PublicKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7205272/

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