.net - 通过.NET进行文件数字签名的标准化方法

标签 .net digital-certificate

我正在构建一个用于分发由不同组织创建的程序包(.zip存档)的系统。我想要一种方法来验证软件包的发布者确实是他们声称的身份,并且文件没有被篡改。

要验证发布者,需要一个类似于网络浏览器使用的系统-例如,我的应用程序与验证身份的根证书颁发机构联系。换句话说,“绿色条” :)

我猜想软件包的创建将像这样工作:

  • 作者创建zip包
  • 作者哈希散列并签名哈希
  • 用以下命令重新包装:
  • 包含已签名的哈希和公共(public)证书
  • 的 header
  • 包含zip文件
  • 内容的主体

    打开包装将像这样工作:
  • 取数据主体
  • 使用相同的算法
  • 对其进行哈希处理
  • 使用证书
  • 中的公钥解密包的哈希
  • 比较两个散列-现在,我们具有完整性
  • 与根CA联系以验证身份

  • 这样,我已经验证了身份,还验证了内容(内容本身不需要加密-目标是验证,而不是隐私)。

    所以我的问题是:
  • 以上是正确的处理方法吗?
  • 人们通常使用哪种哈希算法?我认为应该是单向的。您是选择一个(MD5,SHA1,SHA2吗?),还是更正常地支持一个变体,然后让程序包作者告诉您使用了哪个变体(例如,文档的标题包含哈希函数的名称)。
  • 您如何使用根CA?这是X509Store类的工作,还是涉及其他步骤?
  • 这里涉及哪种证书?用于签署.NET程序集的证书是否相同? (代码签名证书?)

  • 最后,如果组织没有付费证书,而是决定使用自行发布的证书,我认为我仍然可以验证哈希(出于数据完整性的考虑)而不必在计算机的证书存储中安装内容或任何类似的魔术(在这种情况下,我只会显示:“XYZ Co.发布(未验证)”。对吗?

    我已经找到了很多有关如何使用X509和RSACryptoServiceProvider的链接,因此我可能可以弄清楚代码,我想我对该过程更感兴趣,并且知道我在使用正确的技术。

    最佳答案

    有一个标准的API可创建签名的ZIP包。

    System.IO.Packaging命名空间包含必要的类,以使用digital signatures创建符合OPS(开放包装规范)的ZIP包。

    关于.net - 通过.NET进行文件数字签名的标准化方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/495675/

    相关文章:

    pdf - 具有多个签名的数字签名 PDF 的到期时间

    clickonce - 如何将 DigiCert EV 证书应用于 ClickOnce 应用程序

    android - 忘记了 android 证书签名密码

    .net - 以编程方式从现有程序集中删除自定义属性

    .net - 暗影 : Create an RSS Feed problems

    c# - Linq语句中序列不包含匹配元素错误

    java - 为 JApplet 设置 "Publisher"

    c# - 如何在程序执行之间保留项目设置?

    .net - 如何根据上传的文件大小估计 maxReceivedMessageSize

    pdf - 签署 PDF 文件