1.4. Sello digital o firma electrónica
El sello digital es el resultado de firmar la cadena original que se obtiene de la factura electrónica, expresada en base64, en la cual viene información codificada que está asociada al emisor de la factura electrónica (o cualquier otro CFD) y a los datos de la misma. Ya que el sello es generado con los datos de la factura, cualquier cambio en ésta se notará dando como resultado un sello o firma diferente. Este sello digital permitirá acreditar la autoría del comprobante fiscal digital (CFD) que usted emita, y de esta manera sus clientes sabrán que usted fue el autor de dicho comprobante digital.
Pasos y elementos necesarios para generar el Sello
- 1.-   Obtener la "Cadena Original" del CFD. Más.
- 2.-   Firmar "Cadena Original", esto se puede llevar a cabo en 2 pasos por separado ó en un solo paso conjunto Más.
- 3.-   El resultado de la firma es en binario, por lo tanto, el último paso es codificarlo en base64 Más.
- El resultado de aplicar base64 a la firma es el Sello o Firma digital.
IMPORTANTE: existen librerías que hacen el proceso de cifrado SHA256 y Firma con RSA en el mismo paso. Como se muestra en el DIAGRAMA
Ejemplo de sello digital:
Paso 1.- Cadena Original
Se obtiene la cadena original de la factura electrónica. CadenaOriginal
Paso 2.- Firmar Cadena Original
Elementos necesarios para el firmado o sellado de comprobantes fiscales digitales:
Este proceso se puede llevar a cabo de 2 diferentes maneras:
- A) Firmar y codificar la cadena original en un solo paso (algunas librerias lo manejan de esta manera)
- B) Primero codificar la cadena original y después firmar con RSA
A) Primer paso
Se inicializa un objeto que maneje el algoritmo de firma RSA con digestión SHA-256 de entrada. Usualmente se manda llamar con algunas variantes como: "SHA256withRSA",
b) Segundo paso
1. SHA-256 - Calcular la digestión SHA-256 (es un algoritmo de digestión o resumen) de la
cadena original, producirá una salida resumen de 160 bits (20 bytes) de un mensaje que puede tener un tamaño
máximo de 264 bits, esta es generalmente una secuencia binaria de bytes pero se puede representar en hexadecimal
como una cadena de caracteres.
Ejemplo:
Nota: esta es solo una representación, internamente se debe tratar como un arreglo de 20 bytes.
Para comprobar el SHA-256 se puede usar openssl y xsltproc desde linea de comandos.
- Linux: Ya estan instaladas las herramientas por defecto.
- Windows:
- Las herramientas necesarias para obtener la cadena original se describen en Tema Cadena Original
- Para codificar con SHA-256: openssl
Para ejecutar estas herramientas en linea de comandos se tiene que actualizar la variable de entorno PATH con la ubicación de el directorio bin de cada herramienta necesaria ó extraer los archivos que vienen en el directorio bin de cada herramienta y ponerlos en el mismo lugar y solo agregar esa ruta al PATH:
C:\> PATH=%PATH%;C:\xsltproc_bin_files;C:\OpenSSL-Win32\bin
Finalmente ejecute el comando:
xsltproc cadenaoriginal_3_3.xslt Factura_BS.xml | openssl dgst -sha256
2. RSA - Programáticamente hablando, se carga el archivo .KEY del CSD o FIEL en un objeto que maneja el algoritmo RSA, una vez hecho esto, solo se firman los bytes de la digestión del SHA256.
Paso 3.- Aplicar Base64
El resultado de firmar la "cadena original" con RSA es binario, por lo tanto tiene que codificarse en base64 para poder ponerla en el atributo de "sello" de la factura electronica.
Diagrama de procesos para obtener el Sello
Herramientas
Generador de sellos digitales
Herramienta generador de sellos digitales - Esta herramienta obtiene la cadena original de la factura electrónica (archivo con extensión XML) y la firma con el certificado, el resultado es el sello en base64.
Datos de salida:- Sello.
- Cadena Original.
- Digestión correspondiente a la versión de CFD representado en hexadecimal aplicado a la cadena original.
Verificador de sello digital (verificador de firma)
Esta herramienta carga una factura electrónica y válida la firma, si se agrega el .CER con el que fue generada la firma se
intentará validar con éste. Si no se agrega el archivo .CER pero el CFD contiene el atributo "certificado" y no está vacío
se validará con éste.
Nota: Puede omitirse el archivo "Certificado" si éste se encuentra en el XML.