欢迎来到天天文库
浏览记录
ID:25116147
大小:171.01 KB
页数:25页
时间:2018-11-18
《通过xml签名和加密更安全地交换数据》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、[摘要]XML签名和XML加密标准目前被广泛地用作构建快(building-block)技术。本文解释了XML签名和XML加密标准,并且说明了如何通过.NET使用它们。 注:本文的某些部分基于.NETFramework2.0的预发布版本。与这些部分有关的所有信息都有可能更改。 XML签名和XML加密标准目前被广泛地用作积木(building-block)技术。MicrosoftOfficeInfoPath使用XML签名对部分或整个表单进行签名。Web服务使用XML签名对SOAP消息进行签名,并且使用XML加密技术对它们进行加密。基于ClickOnce的
2、应用程序的XML清单(VisualStudio2005中的新增功能)也使用XML签名。.NETFramework1.x包含XML签名标准的对象模型,而.NETFramework2.0则添加了其他支持,同时还添加了XML加密的对象模型。本文解释了XML签名和XML加密标准,并且说明了如何通过.NET使用它们。有关实际的XML签名规范,请参阅位于http://www.w3.org/TR/xmldsig-core的W3C标准。数字签名 在深入探讨XML签名标准之前,让我们回顾一下数字签名的基础知识。因为防止恶意用户在传输期间改变消息很重要,所以数字签名保护数据的
3、完整性,并且可以检测数据在到达接收地的途中受到的任何更改。因为能够标识发送方也很重要,所以消息通常使用发送方的私有(秘密)密钥进行签名,并且用相应的公钥进行验证,从而使接收者在知道发送方的公钥时可以确认发送方的标识。这可以防止恶意用户通过尝试作为已知的发送方发送消息,或者通过截获来自已知发送方的消息并将其替换为他们自己的消息(一种中间人形式的攻击),冒充已知的发送方。 要创建数字签名,首先需要使用加密哈希函数来对需签名的消息进行哈希运算。对于任何长度的输入,加密哈希函数都会返回固定长度的位组,称为哈希值。该哈希值无法容易地重新转换为原来的输入。即使输入中只
4、有一个位发生更改,哈希值也会以不可预知的方式更改,因此无法仅仅通过查找类似的哈希值来找到与原始输入类似的输入。一个常用的哈希函数是SHA-1,它可以产生160位的哈希值。下一个步骤是使用签名算法和您的私钥对该哈希值进行签名,以产生签名值。您用您的私钥创建该签名,以便具有您的公钥的其他人可以对其进行验证(本文稍后将对此进行详细讨论)。RSA是一种流行的用于签名的加密算法。在您将消息和该签名发送给接收者之后,验证过程开始。收到的消息被在签名时使用的相同哈希函数用来进行哈希运算;然后,通过将签名值以及公钥和计算得到的哈希一起传递给签名算法,对签名值进行验证。如果计算
5、得到的哈希与签名哈希相匹配,则签名有效。如果这两个哈希不匹配,则表明数据或签名已经更改,因此不能确保数据的完整性。还可以使用密钥哈希算法签名和验证数据,但是这超出了本文讨论的范围。.NETFramework已经为所有种类的哈希、加密/解密和签名/验证算法包含了一组丰富的类。有关这些类的详细信息,请参阅.NETFrameworkSDK文档以及由BrianLaMacchia等人编写的《NETFrameworkSecurity》(Addison-Wesley,2002)。XML签名基础知识 您可以使用XML签名对任何种类的数据进行签名,这些数据包括XML文档的某
6、个部分、其他XML文档或任何格式的其他数据。但是,实际上,XML签名最常用于对以XML表示的其他数据进行签名。XML签名标准还非常灵活,它允许您在签名之前对数据进行筛选和转换,并且使您可以精确地选择要签名的内容以及签名方式。 一个简单的文档: Hello World 经过签名的文档: Hello World
7、
8、
此文档下载收益归作者所有