Введение
Синтаксис XML для цифровых подписей. XML Signature (также называемый XMLDSig, XML DSig, XML Sig) определяет синтаксис XML для цифровых подписей и описан в рекомендациях W3C «Синтаксис и обработка XML-подписей». По функциональности он во многом схож с PKCS #7, но обладает большей расширяемостью и предназначен для подписи XML-документов. Он используется различными веб-технологиями, такими как SOAP, SAML и другие. Подписи XML могут использоваться для подписания данных – ресурсов любого типа, обычно XML-документов, но можно подписывать любой ресурс, доступный по URL. XML-подпись, используемая для подписания ресурса вне содержащего его XML-документа, называется отсоединенной подписью; если она используется для подписания части содержащего документа, она называется встроенной подписью; если она содержит подписанные данные внутри себя, она называется охватывающей подписью.
XML Signature (also called XMLDSig, XML DSig, XML Sig) defines an XML syntax for digital signatures and is defined in the W3C recommendation XML Signature Syntax and Processing. Functionally, it has much in common with PKCS #7 but is more extensible and geared towards signing XML documents. It is used by various Web technologies such as SOAP, SAML, and others. XML signatures can be used to sign data–a resource–of any type, typically XML documents, but anything that is accessible via a URL can be signed. An XML signature used to sign a resource outside its containing XML document is called a detached signature; if it is used to sign some part of its containing document, it is called an enveloped signature; if it contains the signed data within itself it is called an enveloping signature.
Валидация и вопросы безопасности
При проверке подлинности XML-подписи применяется процедура, называемая Core Validation. Валидация ссылок: Дайджест каждой ссылки проверяется путем извлечения соответствующего ресурса, применения к нему любых преобразований и последующего применения указанного метода дайджестирования. Результат сравнивается с записанным значением DigestValue; если они не совпадают, проверка не проходит. Валидация подписи: Элемент SignedInfo сериализуется с использованием метода канонизации, указанного в CanonicalizationMethod, ключевые данные извлекаются с помощью KeyInfo или другими способами, а подпись проверяется с использованием метода, указанного в SignatureMethod. Эта процедура устанавливает, действительно ли ресурсы были подписаны предполагаемой стороной. Однако, из-за расширяемости методов канонизации и преобразований, проверяющая сторона также должна убедиться, что то, что было фактически подписано или дайджестировано, действительно соответствует исходным данным, иными словами, что используемым алгоритмам можно доверять и они не изменяют смысл подписанных данных. Поскольку структуру подписанного документа можно изменить, что приводит к атакам типа "обертывание подписи", процесс проверки также должен охватывать структуру XML-документа. Подписанный элемент и элемент подписи должны выбираться с использованием абсолютного XPath-выражения, а не методов getElementByName. Также следует учитывать пригодность канонизации XML, в частности, в качестве фронтенда для подписи и шифрования данных XML из-за ее сложности, присущих требований к обработке и недостаточной производительности. Утверждается, что выполнение канонизации XML вызывает чрезмерную задержку, которую сложно преодолеть для транзакционных SOA-приложений, критичных к производительности. Эти вопросы рассматриваются в рабочей группе по безопасности XML. Без надлежащей политики и реализации использование XML Dsig в SOAP и WS-Security может привести к уязвимостям, таким как обертывание XML-подписи.