Inicio  |  General  |  Firma digital XML
La LCO fue actualizada por última vez el 08/dic/2023

XML Digital Signature

De acuerdo al RFC2828 una firma digital se define como "un valor calculado mediante un algoritmo criptográfico y añadido a la estructura de un objeto que contiene información de manera que cualquier receptor de la información pueda usar la firma para verificar su origen e integridad".

Solución Factible® provee una herramienta validadora de firma digital XML para la verificación, para aquellos casos en los que el SAT requiera que se generen peticiones de esta manera, tales como Sector primario, Timbrado - Enviar solicitud cancelación.

Herramienta firma digital XML


Muestra 1
Contenido del XML de la consulta al sector primario sin firmar.

Muestra 2
La firma resultante envuelta en el XML, se le ha dado formato para ser más legible.

Nota: el elemento Signature se ha incluido dentro del contenido que se esta firmando, por lo tanto creando una firma envuelta. El extracto 1 muestra el elemento SignedInfo que contiene la información que es firmada.

La firma consta de 3 elementos principales, en el elemento SignedInfo se encuentra la información que se firmó y como se procesó. SignatureValue es el resultado del procesamiento de la información, es decir, la firma KeyInfo contiene información sobre los elementos necesarios para comprobar la firma. Con la información incluida en el elemento KeyInfo más los incluidos en el elemento SignedInfo se deberá obtener el mismo valor del elemento SignatureValue, de no ser así, se concluye que la información fue alterada.

Extracto 1
Información extraida de la muestra 2

El elemento CanonicalizationMethod define el algoritmo usado para el elemento SignedInfo antes de que sea firmado o validado. Canonicalización es el proceso de convertir el contenido XML a su representación física, llamada forma canónica, a fin de eliminar cambios sutiles que puedan resultar en una firma inválida sobre la información. Es necesario aplicar la canonicalización debido a la naturaleza del lenguaje XML y la forma en la que es analizada por diferentes procesadores e intermediarios, los cuales pueden cambiar el contenido de forma tal que la firma ya no es válida, sin embargo, la información firmada aún sea lógicamente equivalente. La canonicalización elimina estas posibles variantes convirtiendo el XML a su forma canónica antes de generar o validar la firma.

El elemento SignatureMethod define el algoritmo de firma digital usado para generar la firma, en este caso es el algoritmo PKCS#1 RSA-SHA1 que se describe en RFC 2437. Uno o más elementos Reference identifican la información a ser firmada. Cada elemento Reference identifica la información por medio de una URI. El extracto 1 contiene un solo elemento Reference, y el URI es una cadena vacía , lo que indica la raíz del documento.

El elemento Transforms contiene una lista de uno o más elementos Transform, cada uno de los cuales describe un algoritmo de transformación usado para transformar la información antes de que se haya procesado la digestión y la firma, o antes de que se haya validado. Este ejemplo contiene un elemento Transform para el algoritmo de transformación. La transformación es requerida para las firmas envueltas para que el elemento Signature en sí mismo sea removido antes de hacer el calculo del valor de la firma. De otra manera, la firma se incluiria a si misma en la información a ser firmada, lo cual no es correcto.

El elemento DigestMethod definido como URI, es el algoritmo usado para crear la digestión de la información, en este caso, SHA1. El elemento DigestValue contiene la representación en base64 del valor resultante de la digestión.

El elemento SignatureValue contiene el valor de la firma codificada en base64 sobre el elemento SignedInfo, como se muestra en el extracto 2.

Extracto 2
Información extraida de la muestra 2

El elemento opcional KeyInfo contiene información sobre la llave que se necesita para validar la firma, como lo muestra el extracto 3.

Extracto 3
Información extraida de la muestra 2

El elemento KeyInfo puede contener diferentes tipos de información, en este caso, el elemento KeyName contiene el número de serie del certificado, pero también puede contener un elemento X509Data que contiene a su vez un elemento X509SubjectName identificando el nombre de quien firmó la información, tal es el caso de la solicitud cancelación.



Validador de firma digital XML

Esta herramienta verifica la validez de la firma digital XML dentro de un archivo.

Datos de contacto
comments powered by Disqus