'是SignatureMethod'算法vs.' DigestMethod' XML签名算法

时间:2015-07-11 15:15:56

标签: 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)和一个DigestMethod算法(http://www.w3.org/2000/09/xmldsig#sha1)。

据我所知,SignatureMethod算法是&#39; rsa-sha1&#39;表示要使用SHA1首先对要签名的内容进行哈希(消化),然后使用RSA进行签名。

DigestMethod算法是否总是等于SignatureMethod算法(&#39; rsa-sha1&#39;的 sha1 部分)中指定的摘要机制?

我认为情况并非如此,因为两次指定相同的算法是没用的。我推测可以使用不同的DigestMethod算法消化多个参考,并使用SignatureMethod算法指定的摘要机制再次对这些摘要的集合进行散列。

尝试通过引用“XML签名语法和处理”来理解这一点。规格。如果有人能够确认我是否理解正确,或者解释这两种算法所服务的目的,我们将非常感激。感谢。

1 个答案:

答案 0 :(得分:5)

你是完全正确的,DigestMethod算法元素引用它们的父Reference元素。您可以为多个Reference元素使用不同的DigestMethod算法,并使用不同的SignatureMethod算法对所有引用进行散列和签名。