XML-подпись


Подпись 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>.