'SignatureMethod' 算法与 'DigestMethod' 签名中的 XML 算法
'SignatureMethod' Algorithm vs. 'DigestMethod' Algorithm in XML Signature
如果以下面的Signature元素为例:
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<ds:Reference URI="#_884D49DAD03AD60748547F8322C11AA0">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<ds:DigestValue>...</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>...</ds:SignatureValue>
<ds:KeyInfo>
<ds:KeyName>...</ds:KeyName>
</ds:KeyInfo>
</ds:Signature>
有一个 SignatureMethod 算法(http://www.w3.org/2000/09/xmldsig#rsa-sha1) and a DigestMethod Algorithm (http://www.w3.org/2000/09/xmldsig#sha1)。
据我了解,SignatureMethod 算法 'rsa-sha1' 意味着要签名的内容首先使用 SHA1 进行哈希处理(消化),然后使用 RSA 进行签名。
DigestMethod 算法是否始终等于 SignatureMethod 算法中指定的摘要机制(sha1 'rsa-sha1' 的一部分)?
我相信不是这样的,因为指定同一个算法两次是没有用的。我推测可能有多个“参考”可以使用不同的 DigestMethod 算法进行消化,并且这些摘要的集合将使用 SignatureMethod 算法指定的摘要机制再次进行哈希处理。
我正在 尝试 通过参考 'XML Signature Syntax and Processing' 规范来理解这一点。如果有人能确认我是否理解正确,或者解释这两种算法的用途,我将不胜感激。谢谢。
您完全正确,DigestMethod Algorithm 元素引用它们的父 Reference 元素。您可以为多个引用元素使用不同的 DigestMethod 算法,并再次使用不同的 SignatureMethod 算法对所有引用进行哈希和签名。
如果以下面的Signature元素为例:
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<ds:Reference URI="#_884D49DAD03AD60748547F8322C11AA0">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<ds:DigestValue>...</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>...</ds:SignatureValue>
<ds:KeyInfo>
<ds:KeyName>...</ds:KeyName>
</ds:KeyInfo>
</ds:Signature>
有一个 SignatureMethod 算法(http://www.w3.org/2000/09/xmldsig#rsa-sha1) and a DigestMethod Algorithm (http://www.w3.org/2000/09/xmldsig#sha1)。
据我了解,SignatureMethod 算法 'rsa-sha1' 意味着要签名的内容首先使用 SHA1 进行哈希处理(消化),然后使用 RSA 进行签名。
DigestMethod 算法是否始终等于 SignatureMethod 算法中指定的摘要机制(sha1 'rsa-sha1' 的一部分)?
我相信不是这样的,因为指定同一个算法两次是没有用的。我推测可能有多个“参考”可以使用不同的 DigestMethod 算法进行消化,并且这些摘要的集合将使用 SignatureMethod 算法指定的摘要机制再次进行哈希处理。
我正在 尝试 通过参考 'XML Signature Syntax and Processing' 规范来理解这一点。如果有人能确认我是否理解正确,或者解释这两种算法的用途,我将不胜感激。谢谢。
您完全正确,DigestMethod Algorithm 元素引用它们的父 Reference 元素。您可以为多个引用元素使用不同的 DigestMethod 算法,并再次使用不同的 SignatureMethod 算法对所有引用进行哈希和签名。