确保您的签名XML已由您签名

时间:2012-05-23 00:20:31

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

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

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

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

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

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

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

3 个答案:

答案 0 :(得分:2)

本教程使用RSA签名密钥:

signedXml.SigningKey = Key;

link个州:

  

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

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

进行打包和分发

假设您是唯一拥有私钥的人,收件人拥有公钥(假设实施是安全的),没有人可以篡改签名文件没有验证步骤检测到篡改。

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

答案 1 :(得分:2)

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

一旦你阅读了这些文章,请看一下这个图表:

Digital Signature Diagram 从维基百科中获取的图表(具体来说,here

答案 2 :(得分:0)

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