Если мы возьмем следующий элемент 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 «rsa-sha1» означает, что подписываемый контент сначала хэшируется (переваривается) с использованием SHA1, а затем подписывается с использованием RSA.
Всегда ли алгоритм DigestMethod соответствует механизму дайджеста, указанному в алгоритме SignatureMethod (sha1 часть 'rsa-sha1')?
Я считаю, что это не так, потому что было бы бесполезно указывать один и тот же алгоритм дважды. Я предполагаю, что может быть несколько «Reference», которые могут быть обработаны с использованием разных алгоритмов DigestMethod, и коллекция этих дайджестов будет снова хеширована с использованием механизма дайджеста, указанного алгоритмом SignatureMethod.
Я пытаюсь понять это, обращаясь к Спецификации "Синтаксис и обработка подписи XML". Был бы очень признателен, если бы кто-нибудь мог подтвердить, правильно ли я понял, или объяснить цели, которым служат эти два алгоритма. Спасибо.