Firma XML


La firma XML (también llamada XMLDSig , XML-DSig , XML-Sig ) define una sintaxis XML para firmas digitales y se define en la recomendación W3C Sintaxis y procesamiento de firmas XML . Funcionalmente, tiene mucho en común con PKCS #7 pero es más extensible y está orientado a la firma de documentos XML. Es utilizado por varias tecnologías web como SOAP , SAML y otras.

Las firmas XML se pueden usar para firmar datos, un recurso , de cualquier tipo , generalmente documentos XML, pero se puede firmar cualquier cosa a la que se pueda acceder a través de una URL . Una firma XML utilizada para firmar un recurso fuera del documento XML que lo contiene se denomina firma separada ; si se utiliza para firmar alguna parte del documento que lo contiene, se denomina firma envolvente ; si contiene los datos firmados dentro de sí mismo, se denomina firma con sobre .

Una firma XML consta de un Signatureelemento en el espacio de http://www.w3.org/2000/09/xmldsig#nombres. La estructura básica es la siguiente:

Este procedimiento establece si los recursos fueron realmente suscritos por la parte alegada. Sin embargo, debido a la extensibilidad de los métodos de canonicalización y transformación, la parte verificadora también debe asegurarse de que lo que realmente se firmó o digirió es realmente lo que estaba presente en los datos originales, en otras palabras, que se puede confiar en que los algoritmos utilizados no para cambiar el significado de los datos firmados.

Debido a que la estructura del documento firmado puede alterarse y provocar ataques de "envoltura de firma", el proceso de validación también debe cubrir la estructura del documento XML. El elemento firmado y el elemento de firma deben seleccionarse utilizando una expresión XPathgetElementByName absoluta, no métodos. [2]

La creación de firmas XML es sustancialmente más compleja que la creación de una firma digital ordinaria porque un documento XML determinado (un " conjunto de información ", de uso común entre los desarrolladores de XML) puede tener más de una representación legal serializada. Por ejemplo, los espacios en blanco dentro de un elemento XML no son sintácticamente significativos, por lo que <Elem >son sintácticamente idénticos a <Elem>.