0

我正在使用一组延迟签名的程序集,我可以在跳过验证后从 GAC 安装和加载这些程序集(sn -Vr * ...

由于延迟签名作为一个过程只需要公钥文件

  1. sn -k keys.snk(公钥和私钥)
  2. sn -p keys.snk pkey.snk(仅公钥)
  3. 将 pkey.snk 添加到项目属性并选中“仅延迟签名”
  4. sn -v(显示组件是延迟签名的)
  5. sn -e (提取 pkey)
  6. fc(未找到差异)

我发现SNK 文件的前 160 个字节是 PKey ...,其余 436 个字节代表私钥。

虽然出于开发目的 sn-Vr 或 sn -R keys.snk (新的公钥/私钥对替换延迟签名的一个)就足够了,但我很想知道是否从程序集中提取公钥并将其配对用你自己的私钥就可以了……

这可能是一个潜在的安全漏洞(因为使用公钥令牌查找程序集)......难怪.Net框架/ SDK中没有内置工具允许这样做。

是否有记录整个 SNK 文件结构(文件格式)的地方?一般来说,这种方法可以奏效吗?你怎么看?

4

1 回答 1

1

您似乎担心有人会生成一个随机密钥对,用来自不同程序集的公钥替换密钥对中的公钥,然后签署他们自己的程序集以获得该公钥。

这行不通。
密钥对中的公钥是从私钥以加密方式派生的,并且程序集使用只能使用正确私钥计算的值进行签名。
每个私钥将生成不同的签名,并且它们不可互换。

有关详细信息,请参阅此处

于 2009-12-23T01:37:08.740 回答