Tips: Xml Signature

 

¿Que es?

Es una especificación desarrollada bajo el amparo del w3c (http://www.w3.org/Signature/) que permite la firma( completa o parcial) de documentos utilizando una notación XML estandar. XML Signatures ofrece algunas ventajas frente a la firma tradicional ya que al estar basada en texto plano su estructura es legible por humanos.

Los documentos Xml Signature los podemos clasificar en tres tipos, dependiendo de la asociación con el documento firmado:

  • Enveloped: En el que el documento a firmar y la firma quedan ligados en un único xml. Este es el método mas recomendable para firmar documentos de texto o Xmls.
  • Enveloping: En el que el documento firmado(Debe ser un Xml), adjunta como un nodo mas el elemento Signature.
  • Detached: En el que el documento firmado se mantiene separado de la firma, manteniendo el XMLSignature una referencia al documento.

Un Ejemplito
Ejemplo de fichero XML Signature

Aunque parece un XML con un formato muy complejo, es sencillo de entender, su esquema de definición es :

<element name=»Signature» type=»ds:SignatureType» />
<complexType name=»SignatureType»>
<sequence>
<element ref=»ds:SignedInfo» />
<element ref=»ds:SignatureValue» />
<element ref=»ds:KeyInfo» minOccurs=»0″ />
<element ref=»ds:Object» minOccurs=»0″ maxOccurs=»unbounded»/>
</sequence>
<attribute name=»Id» type=»ID» use=»optional» />
</complexType>

Y buscando en el XML de ejemplo las estructuras definidas en el esquema, podemos ver que SignedInfo contiene la información relacionada con la firma( algoritmo utilizado, etc), en SignatureValue el resultado de la firma( en Base64), en KeyInfo los datos del certificado del firmante, y en Object los datos que se firmaron.

¿Apis para manejar XML Signatures?

En nuestro caso, estamos utilizando la implementación de Apache de XML Security , junto con Bouncy Castle.

XML Singature es un formato que ha llegado para quedarse entre nosotros, espero que esto sirva de una pequeña introducción para que deje de ser un desconocido o simplemente una palabreja, para convertirse en algo palpable y sencillo.

Comentarios

  1. Hola, en primer lugar un saludo y felidades por el blog, me parece muy interesante.
    En segundo lugar una pregunta sobre el tema de xml signatures: ¿hay opciones de compatibilizarlo con los certificados digitales tradicionales (tipo X509)?

    Un saludo

  2. Claro que es posible, de echo un XMLSignature contiene, ademas de el resultado del proceso de firma, la clave pública del certificado(X509).
    En nuestra plataforma de firma digital( que en unos meses sera liberada), utilizamos las librerías de Apache (http://santuario.apache.org/Java/index.html), aquí podrás encontrar algunos ejemplos de uso interesantes.

  3. Estimado Felix,

    Firmamos un XML con el metodo sign, y todo sale bien, salvo que cada tags del elemento signature es antecedido por «ds», lo cual no debe ir. Tu sabes por casualidad como evitar que salga ese texto en la generacion del xml firmado?

    Desde ya agradecido por lo que nos puedas ayudar …

    Se despide cordialmente,

    Cristian Ibañez V.

  4. Hola Cristian,
    No es incorrecto que aparezca el prefijo «ds», todo depende del espacio de nombres definido en el xml, por ejemplo en documento xml de ejemplo que aparece en el articulose define el espacio de nombres para xmldsig de esta forma: xmlns:ds=»http://www.w3.org/2000/09/xmldsig#».

    [Modo comercial]
    Este artículo es ya muy antiguo, aprovecho para recomendarte Viafirma para delegar en esta plataforma la generación de firmas complejas como XADES, XADES-A, etc.
    [/Modo comercial]

Comments are closed.