Firma electrónica XAdES. Archivos xsig. Autofirma, firma de hash de archivos

En algunos casos, los procesos de firma electrónica en los Registros de Entrada no nos presentan el típico documento pdf con la firma visible en su panel de firmas. Lo que se firma en esas ocasiones es el hash del arvhivo, por lo que tenemos por separado los archivos originales, y por otro lado los archivos de firma con extensión .xsig, con firma XAdES (XML).

Todo el proceso de generación de este tipo de firmas (hash o resumen) y comprobación de las mismas está contemplado en la aplicación Autofirma https://firmaelectronica.gob.es/Home/Descargas.html

Vamos a ver esos dos procesos, primero la verificación de las firmas y los archivos (1) , y después como generarlos (firmar Hash) con Autofirma (2)

(1) Comprobación de firmas .xsig y los archivos que se firman

Tenemos por ejemplo, estos archivos descargados de un registro de entrada (he cambiado los nombres)

¿Cómo identificamos cada firma con el archivo que se firma?. Para ello, primero vamos a ver cómo es el archivo de firma .xsig en un editor de texto, para entender cómo funciona (veremos sólo una de ellas porque el resto es igual).

Firma_A.xsig

<?xml version=«1.0» encoding=«UTF-8»?> <AFIRMA Id=«AFIRMA-Root-d39f48ed-b2a2-4d55-b3a2-3f58d1d6ec7f» ><CONTENT Encoding=«http://www.w3.org/2000/09/xmldsig#base64» Id=«CONTENT-f8261e00-cdd8-49e2-bb2f-eb5558f7f6a9» MimeType=«application/octet-stream»>0arG9vVmBr+YFjNQ2ta4h6fw/oyxOj7x5VUpaLQEd6U= </CONTENT><ds:Signature Id=«Signature-76fd59e8-9ec1-4d39-8542-c95f2c495721-Signature» xmlns:ds=«http://www.w3.org/2000/09/xmldsig#»><ds:SignedInfo><ds:CanonicalizationMethod Algorithm=«http://www.w3.org/TR/2001/REC-xml-c14n-20010315»/> <ds:SignatureMethod Algorithm=«http://www.w3.org/2001/04/xmldsig-more#rsa-sha256»/> <ds:Reference Id=«Reference-796c272f-b3ae-48f8-b480-1ae887e40b2f»

Lo que se firma está entre las etiquetas <CONTENT> y simplemente es una cadena de caracteres codificada en Base64 (atributos clave del XML son Enconding y la etiqueta SignatureMethod Algorithm). Muy importante también, y lo que representa la firma «Detached» de un hash,es el atributo MimeType=»application/octet-stream»

Lo que representa esa cadena (0arG9vVmBr+YFjNQ2ta4h6fw/oyxOj7x5VUpaLQEd6U=), es decir, lo que se firma, es el Hash SHA-256 del archivo que se firma, codificado dicho hash en Base64 (esto es así para poder insertarlo en un xml)

Para verificar esto, simplemente (sabiendo previamente que este xsig se corresponde a la firma del hash del documento pdf), calculamos su Hash-256 y lo codificamos a Base 64:

Esto podemos hacerlo de varias maneras, una es usando algún servicio Web (p. ej. https://hash.online-convert.com/sha256-generator) o bien con el propio Autofirma.

El hash en base64 coincide exactamente con el archivo de firma .xsig

base64: 0arG9vVmBr+YFjNQ2ta4h6fw/oyxOj7x5VUpaLQEd6U=

Con Autofirma también puede realizarse, pues dispone de herramientas para calcular y comprobar los Hashes

Seleccionamos el tipo de Hash y el formato de salida:

Comprobamos el archivo que ha guardado, y efectivamente el contenido es de nuevo, el mismo Hash:

Comprobación sencilla con Autofirma de archivo de firma y archivo firmado.

Una vez entendido lo que se hace, Autofirma dispone de la herramienta de comprobación de huellas, para hacer todo de una manera más sencilla.

Primero, obtener el contenido firmado en el archivo xsig

Sabemos que es un Hash. Para ello hacemos doble click en el archivo xsig y extraemos su contenido:

Resulta que si abrimos el archivo que acabamos de guardar, con el Notepad, tenemos lo siguiente:

Que representa el Hash, en formato binario y decodificado ya. Podemos recuperar el valor con herramientas de codificación, por ejemplo con Notepad++ ( o bien con https://www.base64encode.org/ , pero seleccionando el tipo de caracteres ISO-8859-1)

Con Notepad++ copiamos, pegamos, seleccionamos todo y codificamos a Base64:

Y obtenemos de nuevo el hash base 64 que aparece en el archivo .xsig.

No es necesario comprobar y editar los resultados con los archivos de texto. Autofirma permite hacerlo con su herramienta comprobar huella, donde introducimos por un lado el archivo con la huella (contenido que hemos guardado al verificar la firma con Autofirma) y el archivo original. Por defecto, Autofirma busca archivos de huellas digitales con la extensión .hash, .hash64 o .hexhash. El que hemos obtenido con la verificación de la firma es el hash binario, por lo que lo podemos renombrar con la extensión .hash, o bien seleccionándolo en el diálogo

(ya he extraído los contenidos de cada una de las firmas con la verificación de Autofirma)

Basta entonces ir comprobando con qué archivo se va correspondiendo cada archivo de contenido (hash)

Y así podemos comprobar qué archivo se corresponde con qué firma.

(2) Firmar un Hash con Autofirma

Es muy sencillo. Primero se Genera la Huella digital del tipo que queramos, se guarda el archivo y posteriormente se firma esa huella. Para hacerlo con XaDES hay que cambiar la configuración.

XAdES para resto de archivos

Aceptamos y ahora calculamos el Hash del archivo que vamos a firmar. Lo voy a hacer con el zip de antes (Archivo 2.7z), y con el menú herramientas, calcular huella de archivo de Autofirma, que hemos visto antes. Pero hay que tener en cuenta que el formato de huella digital que tenemos que elegir es binario, (para conseguir en el .xsig el MimeType=»application/octet-stream«), ya que si no, en los otros casos estaremos firmando el archivo de texto con el valor del hash (MimeType=»text/plain»)

Podemos comprobar que el resultado que hemos obtenido es idéntico al que obtendríamos haciendo lo del paso 1 anterior, estamos yendo hacia atrás:

Y posteriormente procedemos a firmar este archivo hash, usando Autofirma de la manera habitual, firmando un archivo

Lo guardamos,

Y ya está, ya nos encontramos en la situación inicial de este post. Con un archov de firma xml (.xsig) detached, que firma el hash de un archivo, y su archivo asociado.

1 Comment

  1. Sandra · jueves, 23 julio, 2020 Reply

    Muchas gracias por compartir. Es realmente útil Realmente necesito eso, y en el momento adecuado, lo obtuve.

Leave a Reply

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.