Algoritmo 'SignatureMethod' vs. Algoritmo 'DigestMethod' na assinatura XML
Se tomarmos o seguinte elemento Signature como exemplo:
<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>
Existe um algoritmo SignatureMethod (http://www.w3.org/2000/09/xmldsig#rsa-sha1) e um algoritmo DigestMethod (http://www.w3.org/2000/09/xmldsig#sha1)
Pelo que entendi, o algoritmo SignatureMethod sendo 'rsa-sha1' significa que o conteúdo a ser assinado é primeiro misturado (digerido) usando SHA1 e depois assinado usando RSA.
O Algoritmo DigestMethod sempre é igual ao mecanismo de digestão especificado no Algoritmo SignatureMethod (sha1 parte de 'rsa-sha1')?
Eu acredito que não é o caso, porque seria inútil especificar o mesmo algoritmo duas vezes. O que eu especulo é que pode haver várias 'referências' que podem ser digeridas usando diferentes algoritmos DigestMethod, e a coleção desses resumos será novamente hash usando o mecanismo de digitação especificado pelo algoritmo SignatureMethod.
Eu estoutentando para entender isso, consulte a especificação 'Sintaxe de assinatura XML e processamento'. Realmente apreciaria se alguém pudesse confirmar se eu entendi corretamente ou explicar os propósitos atendidos por esses dois algoritmos. Obrigado.