Firma XML
Firma XML (también llamada XMLDSig, XML-DSig, XML-Sig) define una sintaxis XML para firmas digitales y se define en la recomendación del 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 firmar documentos XML. Es utilizado por diversas 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 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 envuelta; si contiene los datos firmados dentro de sí mismo, se denomina firma envolvente.
Estructura
Una firma XML consta de un elemento Signature
en el espacio de nombres http://www.w3.org/2000/09/xmldsig#
. La estructura básica es la siguiente:
Señaladura Identificado c)Canonicalización Método / SignatureMethod / " Referencia " ■Transformas / #DigestMethod / - Valor Digest / ■/Referencia *Referencia / etc.
Identificado/Firmado Signature Valor / *KeyInfo / Objeción /" Señal "
- El
SignedInfo
El elemento contiene o hace referencia a los datos firmados y especifica qué algoritmos se utilizan.- El
SignatureMethod
yCanonicalizationMethod
elementos son utilizados porSignatureValue
elemento y se incluyen enSignedInfo
para protegerlos de manipularlos. - Uno o más
Reference
Los elementos especifican el recurso que está firmando la referencia URI y cualquier transformación que se aplique al recurso antes de la firma.Transforms
contiene 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 de documentos.DigestMethod
especifica el algoritmo hash antes de aplicar el hash.DigestValue
contiene el resultado codificado Base64 de aplicar el algoritmo hash al recurso(s) transformado definido en elReference
atributos de elementos.
- El
- El
SignatureValue
elemento contiene el resultado de firma codificada Base64 - la firma generada con los parámetros especificados en elSignatureMethod
elemento - delSignedInfo
elemento después de aplicar el algoritmo especificado por elCanonicalizationMethod
. 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 desde el contexto siKeyInfo
no está presente.- El
Object
elemento (opcional) contiene los datos firmados si se trata de un enveloping signature.
Consideraciones de validación y seguridad
Al validar una firma XML, se sigue un procedimiento llamado Validación principal.
- Validación de referencia: Cada uno
Reference
's digest is verified by retrieving the corresponding resource and applying any transforms and then the specified digest method to it. El resultado se compara con el registradoDigestValue
; si no coinciden, la validación falla. - Validación de la firma: El
SignedInfo
elemento se serializa utilizando el método canónico especificado enCanonicalizationMethod
, los datos clave se recuperan utilizandoKeyInfo
o por otros medios, y la firma se verifica utilizando el método especificado enSignatureMethod
.
Este procedimiento establece si los recursos realmente fueron firmados por la presunta 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 digirió es realmente lo que estaba presente en los datos originales, en otras palabras, que se puede confiar en los algoritmos utilizados allí, no para cambiar el significado de los datos firmados.
Debido a que la estructura del documento firmado puede alterarse y provocar un "envoltorio de firma"; ataques, 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 los métodos getElementByName
.
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 determinado (un "conjunto de información", de uso común entre los desarrolladores XML) puede tener más de una firma serializada legal. representación. Por ejemplo, el espacio en blanco dentro de un elemento XML no es sintácticamente significativo, de modo que <Elem >
es sintácticamente idéntico a <Elem>
.
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 digiera y valide un documento XML puede luego representar el documento XML de una manera diferente, por ejemplo. agregando espacio excesivo entre definiciones de atributos con una definición de elemento, o usando URL relativas (vs. 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 un servidor remoto errante puede representar de forma variable 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 (frecuentemente abreviada C14n) al firmar documentos XML (para firmar el SignedInfo
, una 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; frecuentemente es necesario incrustar un documento XML firmado 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 llamada Canonicalización exclusiva, que serializa declaraciones de espacios 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, porque no opera con datos binarios, sino con el conjunto de información XML, lo que permite trabajar con subconjuntos de datos (esto es También es posible con datos binarios de formas no estándar, por ejemplo codificando bloques de datos binarios en base64 ASCII), teniendo varias formas de vincular la firma y la información firmada, y realizar transformaciones. Otro concepto central es la canonicalización, es decir, firmar sólo la "esencia", eliminando diferencias sin sentido como espacios en blanco y finales de línea.
Problemas
Hay críticas dirigidas a la arquitectura de seguridad XML en general y a 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 rendimiento deficientes. El argumento es que realizar la canonicalización XML provoca una latencia excesiva que es simplemente demasiado difícil de superar para aplicaciones SOA transaccionales y sensibles al rendimiento.
Estos problemas se están abordando en el Grupo de Trabajo de Seguridad XML.
Sin una política e implementación adecuadas, el uso de XML Dsig en SOAP y WS-Security puede provocar vulnerabilidades, como el ajuste de firmas XML.
Aplicaciones
Un ejemplo de aplicaciones de Firmas XML:
- Firma digital de informes anuales XBRL por auditores en Holanda. Certificado PKIoverheid X.509, aprobado por el Royal National Institute of Chartered Accountants , es necesario. La firma electrónica es jurídicamente vinculante. El estándar SBR Assurance es parte del programa holandés Standard Business Reporting.
Contenido relacionado
Historia de la cámara
Tubo de vacío
Señales de humo