La firma XML (también conocida como XMLDSig , XML-DSig o XML-Sig ) define una sintaxis XML para firmas digitales y se describe en la recomendación del W3C «Sintaxis y procesamiento de firmas XML» . Funcionalmente, comparte muchas características con PKCS #7 , pero es más extensible y está orientada a la firma de documentos XML. Se utiliza en diversas tecnologías web como SOAP , SAML y otras.
Las firmas XML se pueden usar para firmar datos ( un recurso ) de cualquier tipo , normalmente documentos XML, pero cualquier cosa accesible a través de una URL puede firmarse. Una firma XML que se usa para firmar un recurso fuera de su documento XML contenedor se llama firma separada ; si se usa para firmar alguna parte de su documento contenedor, se llama firma envuelta ; [ 1 ] si contiene los datos firmados en sí misma, se llama firma envolvente . [ 2 ]
Estructura
Una firma XML consta de un Signatureelemento en el http://www.w3.org/2000/09/xmldsig#espacio de nombres. La estructura básica es la siguiente:
<Firma> <InformaciónFirmada> <MétodoCanonización /> <MétodoFirma /> <Referencia> <Transformaciones /> <MétodoResumen /> <ValorResumen /> </Referencia> <Referencia /> etc. </InformaciónFirmada> <ValorFirma /> <InformaciónClave /> <Objeto /> </Firma>- El
SignedInfoelemento contiene o hace referencia a los datos firmados y especifica qué algoritmos se utilizan.- Los elementos
SignatureMethodyCanonicalizationMethodson utilizados por elSignatureValueelemento y se incluyenSignedInfopara protegerlos de manipulaciones. - Uno o más
Referenceelementos especifican el recurso que se firma mediante una referencia URI y cualquier transformación que se deba aplicar al recurso antes de la firma.TransformsContiene las transformaciones aplicadas al recurso antes de la firma. Una transformación puede ser una expresión XPath que selecciona un subconjunto definido del árbol del documento. [ 3 ]DigestMethodespecifica el algoritmo hash antes de aplicar el hash.DigestValueContiene el resultado codificado en Base64 de aplicar el algoritmo hash al/los recurso(s) transformado(s) definido(s) en losReferenceatributos del elemento.
- Los elementos
- El
SignatureValueelemento contiene el resultado de la firma codificada en Base64 (la firma generada con los parámetros especificados en elSignatureMethodelemento) delSignedInfoelemento después de aplicar el algoritmo especificado por elCanonicalizationMethod. KeyInfoEste elemento permite opcionalmente que el firmante proporcione 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 en la firma debe identificar la clave a partir del contexto siKeyInfono está presente.- El
Objectelemento (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 denominado Validación básica .
- Validación de referencia: Cada
Referenceresumen se verifica recuperando el recurso correspondiente y aplicándole las transformaciones necesarias y el método de resumen especificado. El resultado se compara con el resumen registradoDigestValue; si no coinciden, la validación falla. - Validación de firma: El
SignedInfoelemento se serializa utilizando el método de canonización especificado enCanonicalizationMethod, los datos de clave se recuperan utilizandoKeyInfoo por otros medios, y la firma se verifica utilizando el método especificado enSignatureMethod.
Este procedimiento determina si los recursos fueron realmente firmados por la parte presuntamente firmante. Sin embargo, debido a la extensibilidad de los métodos de canonización y transformación, la parte verificadora también debe asegurarse de que lo que se firmó o procesó sea realmente lo que figuraba en los datos originales; en otras palabras, que se pueda confiar en que los algoritmos utilizados no alteren el significado de los datos firmados.
Debido a que la estructura del documento firmado puede ser manipulada, lo que da lugar a ataques de "envoltura de firma", el proceso de validación también debe abarcar la estructura del documento XML. El elemento firmado y el elemento de firma deben seleccionarse mediante expresiones XPath absolutas , no getElementByNamemediante métodos. [ 4 ]
canonicalización XML
La creación de firmas XML es sustancialmente más compleja que la creación de una firma digital ordinaria porque un documento XML dado (un " Infoset ", en el uso común entre los desarrolladores XML) puede tener más de una representación serializada legal. 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 .<Elem ><Elem>
Dado que la firma digital garantiza la integridad de los datos, una diferencia de un solo byte provocaría que la firma variara. Además, si un documento XML se transfiere de un ordenador a otro, el terminador de línea puede cambiar de CR a LF, luego a CR LF, etc. Un programa que procesa y valida un documento XML puede posteriormente renderizarlo de forma diferente, por ejemplo, añadiendo espacio adicional entre las definiciones de atributos con una definición de elemento, utilizando URL relativas (en lugar de absolutas) o reordenando las definiciones de espacios de nombres. El XML canónico es especialmente importante cuando una firma XML hace referencia a un documento remoto, que puede ser renderizado de forma variable en el tiempo por un servidor remoto erróneo.
Para evitar estos problemas y garantizar que los documentos XML lógicamente idénticos generen firmas digitales idénticas, se emplea una transformación de canonización XML (frecuentemente abreviada como C14nSignedInfo ) al firmar documentos XML (para firmar el XML , la canonizació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 canonización predeterminado maneja las declaraciones de espacio de nombres; con frecuencia, un documento XML firmado debe estar incrustado en otro documento; en este caso, el algoritmo de canonización original no producirá el mismo resultado que si el documento se tratara de forma independiente. Por esta razón, se creó la denominada Canonización Exclusiva , que serializa las declaraciones de espacio de nombres XML independientemente del XML circundante.
Beneficios
La firma XML es más flexible que otras formas de firmas digitales como Pretty Good Privacy y Cryptographic Message Syntax , ya que no opera sobre datos binarios , sino sobre el conjunto de información XML , lo que permite trabajar con subconjuntos de datos (esto también es posible con datos binarios de maneras no estándar, por ejemplo, codificando bloques de datos binarios en base64 ASCII), ofreciendo diversas formas de vincular la firma y la información firmada, y realizar transformaciones. Otro concepto fundamental es la canonización, que consiste en firmar solo la "esencia", eliminando diferencias irrelevantes como espacios en blanco y saltos de línea.
Asuntos
Existen críticas dirigidas a la arquitectura de seguridad XML en general, [ 5 ] y a la idoneidad de la canonización XML en particular como interfaz para firmar y cifrar datos XML debido a su complejidad, requerimiento de procesamiento inherente y características de rendimiento deficientes. [ 6 ] [ 7 ] [ 8 ] El argumento es que realizar la canonización XML causa una latencia excesiva que es simplemente demasiado grande para superar en aplicaciones SOA transaccionales y sensibles al rendimiento.
Estos problemas se están abordando en el Grupo de Trabajo de Seguridad XML . [ 9 ] [ 10 ]
Sin una política e implementación adecuadas [ 4 ] el uso de XML Dsig en SOAP y WS-Security puede generar vulnerabilidades, [ 11 ] como el envoltorio de firmas XML. [ 12 ]
Aplicaciones
Un ejemplo de aplicaciones de las 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 [ 13 ] forma parte del programa holandés de informes empresariales estándar .
Véase 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
- ↑ "Sintaxis y procesamiento de firmas XML, versión 1.1" .
- ↑ "Sintaxis y procesamiento de firmas XML, versión 1.1" .
- ↑ Filtro XPath de firma XML 2.0
- 1 2 Pawel Krawczyk (2013). "Validación SAML segura para prevenir ataques de envoltura de firmas XML" . Archivado del original el 14-12-2013 . Recuperado el 19-01-2025 .
{{cite web}}: CS1 maint: bot: estado de la URL original desconocido ( enlace ) - ↑ "Por qué la seguridad XML está rota" .
- ↑ "Rendimiento de la seguridad de los servicios web" (PDF) . Archivado del original (PDF) el 24 de febrero de 2021. Consultado el 21 de mayo de 2007 .
- ↑ "Comparación del rendimiento de los mecanismos de seguridad para los servicios de la red" (PDF) . Archivado del original (PDF) el 28 de marzo de 2018. Consultado el 12 de agosto de 2007 .
- ↑ 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 y consideraciones de diseño para la seguridad XML 2.0" .
- ↑ "Ataques y contramedidas de envoltura de elementos de firma XML" (PDF) . División de Investigación de IBM. Archivado del original (PDF) el 3 de marzo de 2016. Consultado el 7 de septiembre de 2023 .
- ↑ Juraj Somorovsky; Andreas Mayer; Jorg Schwenk; Marco Kampmann; Meiko Jensen (2012). "Sobre romper SAML: Sé quien quieras ser" (PDF) .
- ↑ "Garantía SBR" . Archivado del original el 7 de septiembre de 2023. Consultado el 7 de septiembre de 2023 .
Enlaces externos
- Sintaxis y procesamiento de firmas XML
- XML canónico
- Identificadores uniformes de recursos (URI) de seguridad XML adicionales
- Canonización XML exclusiva
- Enlace Java de XMLSignatures Archivado el 11/04/2009 en Wayback Machine para XMLBeans y JAXB.
- Ejemplo paso a paso de cómo se crea una firma.
- Estándares de criptografía
- Estándares basados en XML