Snk文件&延迟签名

时间:2009-12-23 00:37:45

标签: .net snk sn.exe

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

由于Delaysigning作为一个进程只需要公钥文件

  1. sn -k keys.snk(公钥和私钥)
  2. sn -p keys.snk pkey.snk(仅限公钥)
  3. 将pkey.snk添加到项目属性并选中“仅延迟签名”
  4. sn -v(显示程序集延迟签名)
  5. sn -e(extract pkey)
  6. fc(没有发现差异)
  7. 我发现第一个160 bytes of the SNK file is the PKey ...和其余436个字节代表私钥。

    虽然出于开发目的,sn-Vr或sn -R keys.snk(用于替换延迟签名的新公钥/私钥对)应该足够了,我很想知道是否从程序集中提取公钥并将其与您自己的私钥配对将起作用......

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

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

1 个答案:

答案 0 :(得分:1)

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

这不起作用。
密钥对中的公钥是从私钥加密导出的,并且程序集使用只能使用正确的私有密钥计算的值进行签名。
每个私钥都会生成不同的签名,并且它们不可互换。

有关详细信息,请参阅here