2015-07-11 66 views
3

如果我们采取以下Signature元素作为一个例子:'是SignatureMethod' 算法相对于 'DigestMethod' 算法在XML签名

<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算法为'rsa-sha1'表示要签名的内容首先使用SHA1哈希(消化),然后使用RSA进行签名。

DigestMethod算法是否始终等于SignatureMethod算法中指定的摘要机制('rsa-sha1'的部分'sha1)?

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

我是试着通过引用'XML签名语法和处理'规范来理解这一点。如果有人能够确认我是否理解正确,或者解释这两种算法的用途,我将非常感激。谢谢。

回答

3

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