Описание тега xml-signature

Подписи XML обеспечивают целостность, аутентификацию сообщений и / или службы аутентификации подписывающего лица для данных любого типа, независимо от того, находятся ли они в XML, который включает подпись, или где-либо еще.

Подписи XML могут быть объединенными, объединяющими или отдельными.

Обернутая XML-подпись - это когда элемент подписи находится в корневом элементе документа, который содержит или ссылается на данные, которые нужно подписать.

Обволакивающая XML-подпись - это когда подписываемые данные находятся или упоминаются внутри самого элемента подписи.

Отдельная подпись XML - это когда подписываемые XML-данные и подпись представляют собой два отдельных документа.

Подпись в целом содержит следующие элементы:

  • Подпись - корневой элемент.
  • SignedInfo - содержит информацию о том, какие элементы должны быть подписаны и как они должны быть подписаны.
  • CanonicalizationMethod - определяет алгоритм канонизации, который будет использоваться перед вычислением подписи элемента SignedInfo.
  • SignatureMethod - определяет метод подписи, который следует использовать для подписи элемента SignedInfo.
  • Ссылка - указывает на внешний документ или внутренние части документа, которые необходимо подписать.
  • Преобразования - содержат различные преобразования, которые должны выполняться с данными, которые нужно подписать, перед вычислением дайджеста.
  • DigestMethod - содержит алгоритм дайджеста, который следует использовать для вычисления дайджеста выходных данных преобразований.
  • DigestValue - содержит значение дайджеста, вычисленное с использованием алгоритма, указанного в элементе DigestMethod.
  • SignatureValue - содержит выходные данные после вычисления подписи всего элемента SignedInfo после его канонизации с использованием алгоритма, указанного в элементе CanonicalizationMethod.

Пример подписи в конверте.

<?xml version="1.0" encoding="ISO-8859-1"?>
<Document>
              <Pan>1234</Pan>
              <Name>Qwerty</Name>      
              <MobileNo>12335566</MobileNo>
              <Income-Salary>23000</Income-Salary>
              <Income-Other>12000</Income-Other>
              <TotalAmount>5000</TotalAmount>

              <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
               <SignedInfo>
                <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
                <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
                <Reference URI="">
                <Transforms>
                 <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
                 <Transform Algorithm="http://www.w3.org/TR/1999/REC-xslt-19991116">
                    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
                    <xsl:output method="text"/>
                    <xsl:template match="/">
                    Pan : <xsl:copy-of select="//Pan"/>

                    MobileNo : <xsl:copy-of select="//MobileNo"/>

                    TotalAmount : <xsl:copy-of select="//TotalAmount"/>
                    </xsl:template>
                    </xsl:stylesheet>
                 </Transform>
                </Transforms>
                <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                   <DigestValue>q5RNFTQLSOlNs2GHe+35UsT2aVMMXpsHNDR1LkjuxuQ=</DigestValue>
                </Reference>
                </SignedInfo>
                <SignatureValue>QW/kE0WFj6kfJvY4+xrLzn+uRgmPvTrWEP66he0JH7WtCqmWX1CbDhb2dUQj4nhzpG0KJMZzvV/2
                                Qsrh5kiE40s6IOHIFtlM33LxRTo3bF/lo5kHb0m1GZtY7HQXN0P1cQUw9+BeyI7rFz75flVGLlkv
                                 erjENwxwCD+5DQ+VipY=
                </SignatureValue>
                </Signature>

</Document>

Из приведенной выше спецификации элемента подписи и приведенного выше примера вы, должно быть, заметили, что элемент подписи включает в себя элемент Transforms. В этом элементе указывается список преобразований. Преобразование определяет, как данные должны быть извлечены и преобразованы перед вычислением дайджеста. Выходные данные преобразования являются входными данными для операции дайджеста.

XML-подписи были предметом юридических споров. Когда человек подписывает XML-документ (в отличие от машины), требуется, чтобы подписываемые данные были сначала преобразованы с использованиемxslt(см. пример выше). Если существует более одного преобразования, преобразование XSLT должно быть последним преобразованием. Тогда это удовлетворяет свойству "Что вы видите, то и подписываете" и, таким образом, является юридически действительным.