Подпись XML (также называемая XMLDSig , XML-DSig , XML-Sig ) определяет синтаксис XML для цифровых подписей и определена в рекомендации W3C Синтаксис и обработка подписи XML . Функционально он имеет много общего с PKCS #7 , но более расширяем и ориентирован на подписывание XML-документов. Он используется различными веб- технологиями, такими как SOAP , SAML и другими.
XML-подписи можно использовать для подписи данных — ресурсов — любого типа , обычно XML-документов, но можно подписывать все, что доступно через URL -адрес. Подпись XML, используемая для подписи ресурса за пределами содержащего его XML-документа, называется отдельной подписью ; если она используется для подписи какой-либо части содержащего ее документа, она называется обволакивающей подписью; если он содержит подписанные данные внутри себя, он называется обернутой подписью.
Подпись XML состоит из Signature
элемента в http://www.w3.org/2000/09/xmldsig#
пространстве имен. Базовая структура выглядит следующим образом:
Эта процедура устанавливает, действительно ли ресурсы были подписаны предполагаемой стороной. Однако из-за расширяемости методов канонизации и преобразования проверяющая сторона также должна удостовериться, что то, что было фактически подписано или обработано, действительно является тем, что присутствовало в исходных данных, другими словами, что используемым там алгоритмам можно доверять, а не изменить значение подписанных данных.
Поскольку структура подписанного документа может быть изменена, что может привести к атакам «обертывания подписи», процесс проверки должен также охватывать структуру XML-документа. Подписанный элемент и элемент подписи следует выбирать с использованием абсолютного выражения XPathgetElementByName
, а не методов. [2]
Создание XML-подписей значительно сложнее, чем создание обычной цифровой подписи, потому что данный XML-документ (" Информационный набор ", обычно используемый разработчиками XML) может иметь более одного законного сериализованного представления. Например, пробел внутри XML-элемента не имеет синтаксического значения, поэтому <Elem >
он синтаксически идентичен <Elem>
.