Описание тега xml-signature
Подписи 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 должно быть последним преобразованием. Тогда это удовлетворяет свойству "Что вы видите, то и подписываете" и, таким образом, является юридически действительным.