0

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

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

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

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

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

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

4

3 回答 3

2

您需要了解两条背景信息才能理解这些教程的工作原理。

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

数字签名图 图取自维基百科(特别是,here

于 2012-05-23T00:41:43.007 回答
2

本教程使用RSA签名密钥:

signedXml.SigningKey = Key;

链接指出:

使用 RSACryptoServiceProvider 类生成非对称密钥。当您将 CspParameters 对象传递给 RSACryptoServiceProvider 类的构造函数时,密钥会自动保存到密钥容器中。

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

假设您是唯一拥有Private Key的人,收件人拥有Public Key(并假设实施是安全的),如果没有验证步骤检测到篡改,任何人都无法篡改该签名文档。

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

于 2012-05-23T00:35:50.823 回答
0

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

于 2012-05-23T00:29:23.900 回答