Алгоритм SignatureMethod и алгоритм DigestMethod в XML-подписи

Если мы возьмем следующий элемент 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". Был бы очень признателен, если бы кто-нибудь мог подтвердить, правильно ли я понял, или объяснить цели, которым служат эти два алгоритма. Спасибо.


person drox    schedule 11.07.2015    source источник


Ответы (1)


Вы совершенно правы, элементы алгоритма DigestMethod ссылаются на свой родительский элемент Reference. У вас могут быть разные алгоритмы DigestMethod для ваших нескольких элементов Reference и снова другой алгоритм SignatureMethod для хеширования и подписи всех ссылок.

person Cyrille    schedule 02.10.2015