1.4. Sello Digital o Firma electronica
El sello digital es el resultado de firmar la cadena original que se obtiene de la factura electronica, expresada en base64, en la cual viene información codificada que está asociada al emisor de la factura electronica (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 de 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 SHA1 y Firma con RSA en el mismo paso. Como se muestra en el DIAGRAMA
Ejemplo de sello digital:
ydOpikRVw+9B2Six0mbu3PjoPpO909oAYITrRyomdeUGJ4vmA2/12L86EJLWpU7vI
t4cL8HpkEw7TOFhSdpzb/890+jP+C1adBsHU1VHc="
Paso 1.- Cadena Original
Se obtiene la cadena orginal de la factura electronica. 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:
- Firmar y codificar la cadena original en un solo paso (algunas librerias lo manejan de esta menera)
- Primero codificar la cadena original y después Firmar con RSA
a) Usando 1 paso
Se inicializa un objeto que maneje el algoritmo de firma RSA con digestión SHA-1 de entrada. Usualmente se manda llamar con algunas variantes como: "SHA1withRSA",
b) Usando 2 pasos
1. SHA-1 - Calcular la digestión SHA-1 (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-1 se puede usar openssl y xsltproc desde linea de comandos.
- Linux: Ya estan instaladas las herramientas por default.
- Windows:
- Las herramientas necesarias para obtener la cadena original se describen en Tema Cadena Original
- Para codificar con SHA-1: 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 podemos ejecutar el comando:
xsltproc cadenaoriginal_3_2.xslt Factura_BS.xml | openssl dgst -sha1
2. RSA - Programáticamente hablando, se carga el archivo .KEY del CSD en un objeto que maneja el algoritmo RSA, una vez hecho esto, solo se firman los bytes de la digestión del SHA1.
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 electronica (archivo con extensión .XML) y la firma con el certificado, el resultado es el sello en base64.
Datos de salida:- Sello.
- Cadena Original.
- SHA-1 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.