.net 使用.snk';s私钥对任意数据进行签名

.net 使用.snk';s私钥对任意数据进行签名,.net,strongname,private-key,.net,Strongname,Private Key,我正在开发一个.NET,有一件事让我想到了安全性 鉴于任何人都有可能将程序集上载到存储库,我如何验证所述程序集是否来自可信源?例如,如果它是用NHForge的家伙的私钥签名的,我会更加信任NHibernate.dll。为了确保这一点,我所要做的就是用NHForges的公钥验证程序集签名 现在,考虑到这一点,如何建立这种关系(这个特定的公钥属于这个特定的人)?我的想法如下: 项目作者创建一个XML文件,其中包含有关项目和作者的信息(姓名、电子邮件等) 此XML文件使用从.snk文件中提取的作者私

我正在开发一个.NET,有一件事让我想到了安全性

鉴于任何人都有可能将程序集上载到存储库,我如何验证所述程序集是否来自可信源?例如,如果它是用NHForge的家伙的私钥签名的,我会更加信任
NHibernate.dll
。为了确保这一点,我所要做的就是用NHForges的公钥验证程序集签名

现在,考虑到这一点,如何建立这种关系(这个特定的公钥属于这个特定的人)?我的想法如下:

  • 项目作者创建一个XML文件,其中包含有关项目和作者的信息(姓名、电子邮件等)
  • 此XML文件使用从
    .snk
    文件中提取的作者私钥进行签名,该文件稍后用于对程序集本身进行签名
  • Author将这个签名的XML文件上传到存储库,在存储库中对其进行检查,并在Author和公钥之间建立关系

为了实现这一点(顺便说一句,这是一个可行的想法吗?),我需要一种访问
.snk
文件和读取PK的编程方式。在.NET中有这样的功能吗?

首先,强名称不应被用作安全机制,它们仅用于程序集标识机制。对于类似的内容,我将研究Authenticode,它专门用于验证程序集的发布者/源(即安全性,而不仅仅是身份)

话虽如此,您概述的想法是不可行的,因为您不能对XML文件进行强名称签名。强名称签名仅适用于.NET程序集。从理论上讲,您可以为每个公钥维护到特定发布者的某种映射(可能通过发布者注册过程或其他方式),然后在将程序集添加到存储库之前验证程序集的强名称签名


至于技术方面,您可以通过函数(非托管强命名API的一部分)从
.snk
文件中提取公钥。不过,您必须自己将
.snk
文件加载到内存中。

好吧,鉴于强名称不能保证是不可破解的,而且人们每天使用的许多程序集都没有强名称(如EF),我认为您比与项目作者建立信任关系有更大的问题。@Will True,但是有了这个基础设施,我至少可以确保上传
NHibernate.dll
的人确实来自NHForge,并且程序集本身可以不签名。哈哈,安东,我想你已经被打败了:不确定这是否是你想象的100%。查看Hanselman的博客。我想它很快也会出现在scottgu's上。@Will:这真让我抓狂。这项工作已经做了将近一年了(),但微软ans的出现显然是因为我(和其他人的项目)可能会被抛弃。唉,我同情你。我有一个网站的想法,人们可以有朋友,按“喜欢”按钮,并有假农场。严肃地说,你的好点了吗?也许你学到的一些东西可以应用于nupack。或者你可能有更好的选择。