g/2000/09/xmldsig#enveloped-signature"/>
18. </Transforms>
19. <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
20. <DigestValue>9gETxLIm1huTZtMkmGlybtZWa5g=</DigestValue>
21. </Reference>
22. </SignedInfo>
23. <SignatureValue>
OIFpnZmeGt+tOywzTgrcYBje/04uGmGIrbZYYxxXj4jsBdq+0JwZ1A==
</SignatureValue>
24. <KeyInfo>
25. <KeyValue>
26. <DSAKeyValue>
27. <P>
28. /KaCzo4Syrom78z3EQ5SbbB4sF7ey80etKII864WF64
29. B81uRpH5t9jQTxeEu0ImbzRMqzVDZkVG9xD7nN1kuFw==
30. </P>
31. <Q>li7dzDacuo67Jg7mtqEm2TRuOMU=</Q>
32. <G>
33. Z4Rxsnqc9E7pGknFFH2xqaryRPBaQ01khpMdLRQnG
34. 541Awtx/XPaF5Bpsy4pNWMOHCBiNU0NogpsQW5QvnlMpA==
35. </G>
36. <Y>
37. NMxkCcO6Hdd146qBJ4FQGPpz8IncS8onBPshqlxsd
38. pAqgM2lgn8kCPHqfO7jLx7NPZwHeDtHLfKKSYg+Ln6Xzw==
39. </Y>
40. </DSAKeyValue>
41. </KeyValue>
42. </KeyInfo>
43. </Signature>
44. </PaymentInfo>
[1] [2] [3] [4] [5] 下一页
所有与 XML 数字签名相关的信息都存放在 <Signature> 元素中。<Signature> 元素包含有几个主要的子元素:
<Reference> 元素至少包含一个 <Reference> 元素,每个 <Reference> 元素用于对待签名数据进行引用,包含有引用方式、转换方法、摘要算法和摘要值等信息。<Reference> 还包含有 XML 数据的规则化方法,并指定了数字签名所使用的算法。
<SignatureValue> 元素包含对 <Reference> 元素规范化后的内容进行签名生成的数字签名的值。
<KeyInfo> 元素用于指定验证签名所需的公共密钥相关信息。
XML 数字签名的过程大致为:
- 1. 根据每个
<Reference> 元素中指定的资源引用方式,摘要算法,数据转换方法等信息,对引用资源进行转换,然后对转换后的结果计算出摘要值。
- 2. 根据
<SignedInfo> 元素中指定的 XML 数据的规范化方法对 <SignedInfo> 规则化,对规范化之后的数据生成摘要值,并使用私钥对摘要值进行加密,将生成的加密摘要值存放在 <SignatureValue> 元素中。
1.4 XML 数字签名的验证
XML 数字签名的验证主要包括两个步骤,首先需要对 <SignedInfo> 元素中包含的数据引用部分进行验证,然后对整个 <SignedInfo> 元素的签名值进行验证。其间任何一步验证失败则代表整个 XML 数字签名验证失败。
1. 对数据引用的验证
对 <SignedInfo> 中每一个 <Reference> 执行如下验证步骤:
- 1) 应用指定的数据转换方法取得引用的数据对象
- 2) 使用指定的摘要生成算法生成摘要值
- 3) 将生成的摘要值同
<Reference> 中 <DigestValue> 元素包含的摘要值相比较,如果不匹配,则验证失败。
2. 对 <SignedInfo> 签名值的验证
- 1) 从
<KeyInfo> 元素中的 <KeyValue> 元素或者根据 <KeyInfo> 元素中指定的信息从外部获取用于验证数字签名的数据发送方公共密钥。
- 2) 使用验证密钥将
<SignatureValue> 元素中的加密签名值解密,得到值 D
- 3) 使用
<SignatureMethod> 元素指定的签名算法对规则化之后的 <SignedInfo> 元素计算摘要值,得到值 D’
- 4) 判断
D 和 D’ 是否匹配,如果不匹配,则验证失败。
2. XML 数字签名的Java实现
在 W3C 推出 XML 数字签名规范之后不久,很多组织和厂商就已经开始提供实现产品。目前,除了各大厂商推出的实现产品之外,应用比较广泛的开源产品是 Apache XML Security 项目。该项目实现了 W3C 的 XML 数字签名规范和 XML 加密规范,并且提供 Java 和 C++ 两个版本供用户选用。
JSR 105 (Java XML Digital Signature API Specifica 上一页 [1] [2] [3] [4] [5] [6] [7] [8] 下一页
|