【问题标题】:Make sure your signed XML is signed by you确保您签名的 XML 由您签名
【发布时间】:2012-05-23 00:20:31
【问题描述】:

我想对我创建的 XML 文件进行签名,并按照本教程进行签名:

http://msdn.microsoft.com/en-us/library/ms229745.aspx

我还阅读了有关验证文件的教程:

http://msdn.microsoft.com/en-us/library/ms229950.aspx

我能够正确编译两者而没有问题,但我不明白的是如何使用它来生成一个 XML,保证是来自而不是伪造的。

我的想法(这是错误的,需要纠正):我制作了一个 XML 并使用这些教程中的代码对其进行签名。我还可以使用该代码对其进行验证。没问题,它可以工作并检测我何时修改了 XML。但是,其他人怎么不能只从教程中获取代码,制作自己的 XML,然后自己签名,然后在我的程序中使用呢?验证程序不还是验证一下吗?

【问题讨论】:

    标签: c# xml cryptography code-signing digital-signature


    【解决方案1】:

    本教程使用RSA 签名密钥:

    signedXml.SigningKey = Key;
    

    link 声明:

    使用 RSACryptoServiceProvider 类生成非对称密钥。关键是 将 CspParameters 对象传递给时自动保存到密钥容器 RSACryptoServiceProvider 类的构造函数。

    在您运行此示例时创建了一个新的 RSA 密钥,并将其存储在本地计算机上的密钥容器中。 RSA 密钥包含一个用于签名的 Private Key 和一个用于验证签名的 Public Key公钥可以分发给任何需要验证您签名消息的人。 公钥的通常使用Certificate进行打包和分发

    假设你是唯一拥有Private Key的人,接收者拥有Public Key(并且假设实现是安全的),没有人可以篡改该签名文档没有检测到该篡改的验证步骤。

    运行相同示例的任何其他人都应生成一个新的唯一 RSA 密钥,该密钥不能用于签署您的公钥将验证的文档。

    【讨论】:

    • 谢谢,这一切都为我澄清了
    【解决方案2】:

    您需要了解两条背景信息才能理解这些教程为何有效。

    稍微阅读这些文章后,请看一下这张图:

    图表取自维基百科(具体来说,here

    【讨论】:

      【解决方案3】:

      这两个链接都指向显示验证的文章。您将从阅读非对称密钥的工作原理中受益。当您对 XML 进行签名时,您使用您的私钥对其进行签名,只有您可以访问该私钥,并且只有您的公钥可供所有人使用才能解密。没有人,但您将拥有您的私钥。

      【讨论】:

        猜你喜欢
        • 2019-03-01
        • 2020-10-02
        • 1970-01-01
        • 2015-12-31
        • 2021-04-11
        • 1970-01-01
        • 2020-11-06
        • 2015-06-01
        • 2019-12-01
        相关资源
        最近更新 更多