工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛
您的位置:软件 > 工具软件 > 网络工具 > 网际工具 > 正文
给你的XML文件做个数字签名
[文章信息]
作者:李红 原创
时间:2005-02-17
出处:天极软件
责任编辑:still
[文章导读]
我们可以对 XML文件进行 数字签名,保证 XML文档的安全,以便确认原始文档没有被污染或变更。
advertisement
热点推荐
· 2月17日软件精选 ImageReady制作焰火
· 如何鉴别防火墙的实际功能差异
· Win 2000与XP网络登录中的一点差异
· 合理使用Win XP硬件配置文件
· 在C++中创建并使用Web服务
[正文]

上一页  1 2 3 4 5  下一页

XML数字签名方式和示例

  XML签名可以用来确保XML文档内的内容没有发生改变,如果和XML加密联合使用,即可保证所接收的数据就是所发送的数据,外人无法阅读加密内容。XML数字签名有两种方式,即封装签名和分离签名,可以应用到任意数据内容。所谓封装(或被封装)签名,是指数据和签名在同一个XML文档中,而那些数据在签名元素外部的签名称为分离签名。下面是一个分离签名示例,XML文件经过数字签名之后,其内容如下所示:

  [s01]<Signature Id="MyFirstSignature"

  xmlns="http://www.w3.org/2000/09/xmldsig#">

  [s02]<SignedInfo>

  [s03]<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/

  REC-XML-c14n-20010315"/>

  [s04]<SignatureMethod Algorithm="http://www.w3.org/2000/09/

  xmldsig#dsa-sha1"/>

  [s05] <Reference URI="http://www.w3.org/TR/2000/REC-xhtml1-20000126/">

  [s06] <Transforms>

  [s07] <Transform Algorithm="http://www.w3.org/TR/2001/REC-XML-c14n-

  20010315"/>

  [s08] </Transforms>

  [s09] <DigestMethod?Algorithm="http://www.w3.org/2000/09/

  xmldsig#sha1"/>

  [s10] <Digestvalue>j6lwx3rvEPO0vKtMup4NbeVu8nk=</Digestvalue>

  [s11] </Reference>

  [s12]</SignedInfo>

  [s13]<Signaturevalue>MC0CFFrVLtRlk=...</Signaturevalue>

  [s14] <KeyInfo>

  [s15a] <Keyvalue>

  [s15b] <DSAKeyvalue>

  [s15c] <p>...</p><Q>...</Q><G>...</G><Y>...</Y>

  [s15d] </DSAKeyvalue>

  [s15e] </Keyvalue>

  [s16] </KeyInfo>

  [s17]</Signature>

  以上清单中 s02行和s12行之间是SignedInfo元素,即实际签名的信息。SignedInfo 的核心验证由两个必要过程组成:对 SignedInfo 的签名验证和 SignedInfo 内部每个 Reference 摘要的验证。

  s03行上, CanonicalizationMethod 标识了一种算法,这种算法被用来规范化 SignedInfo 元素,然后该元素作为签名操作的一部分被编摘。规范化(Canonicalization)是一种方法,过程使用该方法处理可包含在同一数据元素内部的不同数据流,例如,可以包含两种不同方法来表示文本。规范化是解释原始数据以使空格显示为空格而不显示为 ASCII 码的方法。

  s04行上,SignatureMethod引用的是将规范化的SignedInfo转换成Signaturevalue所用的算法。它是密钥相关的算法和摘要算法(在这里是DSA和SHA-1)的组合,为算法名签名以抵抗攻击,该攻击是基于替换成效率更低的算法。要提高应用程序的互操作性,候选方案指定一组需要实现的签名算法,虽然它们的使用任凭签名创建者处理。

  [s05-11] 每个 Reference 元素都包括摘要方法和对已标识数据对象计算得出的摘要值。它还可能包括产生对摘要操作的输入的转换。数据对象的签名是通过计算其摘要值并对该值的签名进行的。稍后通过引用和签名验证来检查该签名,这些验证将重新创建摘要值并确保它与该数据对象中的内容匹配。

  s05行上,Reference 的这个可选 URI 属性标识要签名的数据对象。在一个 Signature 中,至多可以对一个 Reference 省略该属性。(为了确保明确地匹配引用和对象,要强加这个限制。)

  [s05-08] 该标识与 transforms 一起是签名者提供的描述,其内容有关它们如何获得已编摘形式的已签名数据对象(即,已编摘的内容)。验证者还可能以另一种方法获得已编摘的内容,只要摘要验证这种方法。

  Transforms 是一种可选的处理步骤排序列表,在编摘资源内容之前,对它应用这些步骤。这是解密所需遵循的轨迹。Transforms 可以包括如规范化、编码/解码(包括压缩/扩张)、XSLT 和 XPath 等操作。XPath 转换有些复杂,因为它们允许签名者派生出省略一部分源文档的XML文档,并将XML树限制为它原来的那样。因此,未包含部分可以更改,而不影响签名有效性。 如果不存在 Transforms 元素,则直接编摘资源内容。应该记住,即使在候选方案中指定了基本缺省设置,还是允许用户指定的转换。

  [s09-10] DigestMethod 是在应用 Transforms(如果已经指定它)之后对数据应用以产生 DigestValue 的算法。DigestValue 的签名是将资源内容与签名者密钥绑定的机制。

  s13行上是SignatureValue 元素本身,它在 SignedInfo 之外,即位于签名部分之外,不过计算 SignatureValue 所使用的算法则包括在已签名的信息中。

  s14行和s16行之间是KeyInfo元素(该元素是可选的),它指出了用于验证签名的密钥。标识机制可以包括证书、密钥名称和密钥协议算法。KeyInfo 是可选的有两个原因。首先,签名者可能不希望向所有文档处理方披露任何密钥信息。为什么总要告诉人家?其次,该信息在应用程序上下文中可能是已知的,并且不需要明确表示。由于 KeyInfo 在 SignedInfo 之外,所以如果签名者希望将密钥信息与签名绑定,那么 Reference 可以容易地将 KeyInfo 作为签名的一部分标识并将其包括在内。

点这里回到文章导读>>>

上一页  1 2 3 4 5  下一页

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • Office要进驻企业服务器 首先整合XML
  • 与XML语言协同运用的.NET工具
  • XML遭遇性能瓶颈 “减肥”提高速度?
  • ASP.NET创建XML Web服务全接触
  • 用C#把文件转换为XML
  • 使用简单的T-SQL XML语法传递参数
  • 如何用SQL数据支持XML
  • 构建基于Web/XML的信息集成研究
  • 用Visual C#向Excel2002传输XML数据
  • 使用PHP 5.0 轻松解析XML文档
  • 惠普女CEO人走茶凉 中国公司合并前途难料
  • 美可能就知识产权向WTO投诉中国 称损失25亿
  • 2005年IT就业的热与冷 软件人才缺口较大
  • 联想IBM联姻照旧 配合国会调查不误正式合并
  • 民营家电商排队造手机 设备商全面杀入
  • 英特尔澄清杨旭任职传闻 官方没宣布此消息
  • 国资委河北密制联通拆分方案
  • 垃圾邮件害人害企害国 清除垃圾邮件不手软
  • Advertisement