Tips: Xml Signature

¿Qué 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.

<!– @page { size: 8.5in 11in; margin: 0.79in } P { margin-bottom: 0.08in } –>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>

<!– @page { size: 8.5in 11in; margin: 0.79in } P { margin-bottom: 0.08in } –> 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.