XML Signature (también llamado XMLDSig , XML-DSig , XML-Sig ) define una sintaxis XML para firmas digitales y se define en la recomendación W3C XML Signature Syntax and Processing . 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 utilizar para firmar datos, un recurso, de cualquier tipo , normalmente documentos XML, pero se puede firmar cualquier cosa que sea accesible 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 envuelta ; si contiene los datos firmados en sí mismo, se denomina firma envolvente .
Estructura
Una firma XML consta de un Signature
elemento en el http://www.w3.org/2000/09/xmldsig#
espacio de nombres. La estructura básica es la siguiente:
/> /> /> /> /> /> etc. /> / > />
- El
SignedInfo
elemento contiene o hace referencia a los datos firmados y especifica qué algoritmos se utilizan.- Los elementos
SignatureMethod
yCanonicalizationMethod
son utilizados por elSignatureValue
elemento y se incluyenSignedInfo
para protegerlos de la manipulación. - Uno o más
Reference
elementos especifican el recurso que se está firmando por referencia de URI y cualquier transformación que se aplicará al recurso antes de la firma.Transforms
contiene las transformaciones aplicadas al recurso antes de firmar. Una transformación puede ser una expresión XPath que selecciona un subconjunto definido del árbol del documento. [1]DigestMethod
especifica el algoritmo hash antes de aplicar el hash.DigestValue
contiene el resultado codificado en Base64 de aplicar el algoritmo hash a los recursos transformados definidos en losReference
atributos del elemento.
- Los elementos
- El
SignatureValue
elemento contiene el resultado de la firma codificada en Base64 , la firma generada con los parámetros especificados en elSignatureMethod
elemento, delSignedInfo
elemento después de aplicar el algoritmo especificado porCanonicalizationMethod
. KeyInfo
El elemento opcionalmente permite al firmante proporcionar a los destinatarios la clave que valida la firma, generalmente en forma de uno o más certificados digitales X.509 . La parte que confía debe identificar la clave del contexto siKeyInfo
no está presente.- El
Object
elemento (opcional) contiene los datos firmados si se trata de una firma envolvente .
Consideraciones de validación y seguridad
Al validar una firma XML, se sigue un procedimiento llamado Core Validation .
- Validación de referencia:
Reference
el resumen de cada uno se verifica recuperando el recurso correspondiente y aplicando las transformaciones y luego el método de resumen especificado. El resultado se compara con el registradoDigestValue
; si no coinciden, la validación falla. - Validación de firma: el
SignedInfo
elemento se serializa usando el método de canonicalización especificado enCanonicalizationMethod
, los datos clave se recuperan usandoKeyInfo
o por otros medios, y la firma se verifica usando el método especificado enSignatureMethod
.
Este procedimiento establece si los recursos realmente fueron firmados por la supuesta parte. 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 digerió es realmente lo que estaba presente en los datos originales, en otras palabras, que los algoritmos usados allí no pueden ser confiables. para cambiar el significado de los datos firmados.
Debido a que la estructura del documento firmado puede manipularse 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 XPath absoluta , no getElementByName
métodos. [2]
Canonicalización XML
La creación de firmas XML es mucho más compleja que la creación de una firma digital ordinario, porque un documento XML en cuestión (un " conjunto de información ", en el uso común entre los desarrolladores XML) puede tener más de una representación legal en serie. Por ejemplo, el espacio en blanco dentro de un elemento XML no es sintácticamente significativo, por lo que
es sintácticamente idéntico a
.
Dado que la firma digital garantiza la integridad de los datos, una diferencia de un solo byte haría que la firma varíe. Además, si un documento XML se transfiere de una computadora a otra, el terminador de línea puede cambiarse de CR a LF a CR LF, etc. Un programa que digiere y valida un documento XML puede luego representar el documento XML de una manera diferente, p. Ej. agregar un exceso de espacio entre las definiciones de atributos con una definición de elemento, o usar URL relativas (frente a absolutas), o reordenar las definiciones de espacios de nombres. El XML canónico es especialmente importante cuando una firma XML se refiere a un documento remoto, que un servidor remoto erróneo puede representar de distintas formas en el tiempo.
Para evitar estos problemas y garantizar que los documentos XML lógicamente idénticos proporcionen firmas digitales idénticas, se emplea una transformación de canonicalización XML (con frecuencia abreviada como C14n ) al firmar documentos XML (para firmar SignedInfo
, la canonicalización es obligatoria). Estos algoritmos garantizan que los documentos semánticamente idénticos produzcan representaciones serializadas exactamente idénticas.
Otra complicación surge debido a la forma en que el algoritmo de canonicalización predeterminado maneja las declaraciones de espacios de nombres; con frecuencia, un documento XML firmado debe integrarse en otro documento; en este caso, el algoritmo de canonicalización original no producirá el mismo resultado que si el documento se tratara solo. Por esta razón , se creó la denominada Canonicalización exclusiva , que serializa las declaraciones de espacios de nombres XML independientemente del XML circundante.
Beneficios
XML Signature es más flexible que otras formas de firmas digitales como Pretty Good Privacy y Cryptographic Message Syntax , porque no opera en datos binarios , sino en XML Infoset , lo que permite trabajar en subconjuntos de datos (esto también es posible con datos binarios de formas no estándar, por ejemplo, codificación de bloques de datos binarios en ASCII base64), que tienen varias formas de vincular la firma y la información firmada y realizar transformaciones. Otro concepto central es la canonicalización, es decir, firmar solo la "esencia", eliminando diferencias sin sentido como espacios en blanco y finales de línea.
Asuntos
Hay críticas dirigidas a la arquitectura de seguridad XML en general, [3] ya la idoneidad de la canonicalización XML en particular como interfaz para firmar y cifrar datos XML debido a su complejidad, requisitos de procesamiento inherentes y características de bajo rendimiento. [4] [5] [6] El argumento es que realizar canonicalización XML provoca una latencia excesiva que es simplemente demasiado para superar para aplicaciones SOA transaccionales sensibles al rendimiento .
Estos problemas se están abordando en el Grupo de trabajo de seguridad XML . [7] [8]
Sin una política e implementación adecuadas [2], el uso de XML Dsig en SOAP y WS-Security puede generar vulnerabilidades, [9] como el ajuste de firmas XML. [10]
Aplicaciones
Un ejemplo de aplicaciones de firmas XML:
- Firma digital de informes anuales XBRL por auditores en los Países Bajos . Se requiere un certificado PKIoverheid X.509 , aprobado por el Real Instituto Nacional de Contadores Públicos . La firma electrónica es legalmente vinculante. El estándar SBR Assurance [11] forma parte del programa de informes comerciales estándar holandés .
Ver también
- XML canónico
- Cifrado XML
- XAdES , extensiones de XML-DSig para su uso con firma electrónica avanzada
- Sintaxis de mensajes criptográficos
Referencias
- ^ http://www.w3.org/TR/xmldsig-filter2/ XML-Signature XPath Filter 2.0
- ↑ a b Pawel Krawczyk (2013). "Validación segura de SAML para evitar ataques de envoltura de firmas XML" .
- ^ Por qué la seguridad XML está rota
- ^ Rendimiento de la seguridad de los servicios web
- ^ Comparación de rendimiento de mecanismos de seguridad para servicios de red
- ^ Zhang, Jimmy (9 de enero de 2007). "Acelere las aplicaciones WSS con VTD-XML" . JavaWorld . Consultado el 24 de julio de 2020 .
- ^ Taller del W3C sobre los próximos pasos para la firma XML y el cifrado XML , 2007
- ^ Requisitos de XML Security 2.0 y consideraciones de diseño
- ^ http://domino.research.ibm.com/library/cyberdig.nsf/papers/73053F26BFE5D1D385257067004CFD80/$File/rc23691.pdf
- ^ Juraj Somorovsky; Andreas Mayer; Jorg Schwenk; Marco Kampmann; Meiko Jensen (2012). "Sobre romper SAML: Sea quien quiera ser" (PDF) .
- ^ https://www.sbr-nl.nl/english/what-is-sbr/assurance/ SBR Assurance, gobierno holandés, 2018
enlaces externos
- Sintaxis y procesamiento de firmas XML
- XML canónico
- Identificadores uniformes de recursos (URI) de seguridad XML adicionales
- Canonicalización XML exclusiva
- XMLSignatures Enlace de Java para XMLBeans y JAXB.
- Ejemplo paso a paso de cómo se crea una firma.