.net Snk文件及;延迟签字

.net Snk文件及;延迟签字,.net,snk,sn.exe,.net,Snk,Sn.exe,我正在使用一组延迟签名的程序集,在跳过验证(sn-Vr*)后,我可以从GAC安装和加载这些程序集 因为延迟签名作为一个进程只需要公钥文件 sn-k keys.snk(公钥和私钥) sn-p keys.snk pkey.snk(仅公钥) 将pkey.snk添加到项目属性并选中“仅限延迟符号” 序列号-v(显示程序集延迟签名) sn-e(提取pkey) fc(未找到差异) 我发现第一个…和其余436字节代表私钥 虽然出于开发目的,sn-Vr或sn-R keys.snk(新的公钥/私钥对,用于替换已签

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

因为延迟签名作为一个进程只需要公钥文件

  • sn-k keys.snk(公钥和私钥)
  • sn-p keys.snk pkey.snk(仅公钥)
  • 将pkey.snk添加到项目属性并选中“仅限延迟符号”
  • 序列号-v(显示程序集延迟签名)
  • sn-e(提取pkey)
  • fc(未找到差异)
  • 我发现第一个…和其余436字节代表私钥

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

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


    是否有一个地方可以保存整个SNK文件结构(文件格式)是否有文档记录?这种方法通常有效吗?您认为如何?

    您似乎担心有人会生成一个随机密钥对,将密钥对中的公钥替换为来自不同程序集的公钥,然后对自己的程序集进行签名以获得该公钥

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


    有关更多信息,请参阅。

    安全漏洞到底是什么?您的描述不清楚。我说的是“潜在的”…不是专家…我的头像:你可以假装其他人的公钥是你的…而你的公钥令牌将匹配..如果我有基于公钥令牌分配的安全权限/跳过验证,你可能会利用…@SLaks:谢谢你的回答…好吧,这不是安全问题:)或者至少不是故意的。。。您只需“公钥”即可延迟签名。。。我没有访问“生产”私钥的权限。。。为了让我能够加载延迟签名的程序集,我需要跳过验证和其他东西。。。我只是想知道我是否可以使用一个具有“release”公钥和我自己的自制私钥的SNK文件对程序集重新签名。。。换句话说,我在寻找替换SNK文件中同时包含两个密钥的公钥的方法…@SLaks:当您直接签名时,这是正确的。。。因为编译器使用您的私钥计算哈希。。。不是当你延迟签字的时候。。。你不需要私钥。。。此外,sn还可以选择重新计算哈希sn-Ra。。。我理解这一点,因为你也可以用新的散列替换程序集中的散列。正如我所解释的,不可以。你不能像那样混合和匹配关键部分。如果你问你是否可以用生产私钥对程序集重新签名,是的,你可以。