Signatura

Instructivo de verificación de firmas

Guía para obtener la evidencia probatoria y verificar firmas emitidas por Signatura con OpenSSL y OpenTimestamps.

Este instructivo explica cómo verificar una firma emitida por Signatura.

La verificación completa tiene dos etapas:

  • Obtener los archivos necesarios para verificar.
  • Ejecutar el proceso de verificación, que es común para cualquier forma de obtención.

Importante:

  • La firma es detached: el archivo .sig está separado del documento.
  • El sello de tiempo OpenTimestamps se aplica sobre el archivo .sig.
  • Por lo tanto, el archivo .ots siempre debe verificarse contra la firma .sig, no contra el PDF.

1. Archivos necesarios para la verificación

Para verificar una firma de Signatura hacen falta estos elementos:

  • El documento firmado, por ejemplo documento.pdf.
  • El certificado X.509 del firmante, por ejemplo firmante.cer.
  • La firma detached en binario, por ejemplo firmante.sig.
  • La prueba OpenTimestamps de esa firma, por ejemplo firmante.sig.ots.

2. Cómo obtener los archivos necesarios

Existen tres formas de obtener la información probatoria necesaria para realizar la verificación.

3. Opción A: partiendo del archivo .zip

Si el cliente descargó el .zip, ya dispone de todos los archivos necesarios en formato correcto.

3.1. Extraer el contenido

Descomprimir el .zip. Dentro encontrará normalmente:

  • El documento firmado.
  • El certificado de auditoría en PDF.
  • El certificado del firmante en .cer.
  • La firma detached en .sig.
  • La prueba de sello de tiempo en .sig.ots.

Con esos archivos ya puede pasar directamente a la sección 6.

4. Opción B: partiendo del certificado de auditoría

Si se dispone del documento firmado y del certificado de auditoría PDF, también es posible obtener toda la información necesaria para verificar la firma.

El certificado de auditoría incluye:

  • El certificado X.509 del firmante.
  • La firma detached en Base64.
  • La prueba OpenTimestamps en Base64.

4.1. Certificado del firmante

En el PDF buscar el bloque:

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

Copiarlo completo, incluyendo las líneas BEGIN CERTIFICATE y END CERTIFICATE, y guardarlo en un archivo llamado por ejemplo:

firmante.cer

o bien:

firmante.pem

OpenSSL puede trabajar con cualquiera de las dos extensiones si el contenido PEM es correcto.

4.2. Firma detached

En el PDF, inmediatamente después del certificado, aparece la firma digital en Base64.

Copiar únicamente el bloque Base64 de la firma, sin agregar espacios ni texto adicional, y guardarlo en un archivo de texto, por ejemplo:

firma.b64

Convertirlo a binario:

Con OpenSSL:

openssl base64 -d -in firma.b64 -out firmante.sig

En Windows, también puede usarse:

certutil -decode firma.b64 firmante.sig

4.3. Prueba OpenTimestamps

En el PDF, después de la firma en Base64, aparece la prueba OpenTimestamps en Base64.

Copiar ese bloque y guardarlo en:

ots.b64

Convertirlo a binario:

Con OpenSSL:

openssl base64 -d -in ots.b64 -out firmante.sig.ots

En Windows:

certutil -decode ots.b64 firmante.sig.ots

4.4. Resultado esperado

Al finalizar, deberían quedar:

  • documento.pdf
  • firmante.cer o firmante.pem
  • firmante.sig
  • firmante.sig.ots

Con esos archivos ya puede pasar a la sección 6.

5. Opción C: partiendo del enlace incluido en el documento

Los documentos firmados por Signatura incluyen un sello visible que indica que el documento fue firmado electrónicamente e incluye un enlace para descargar la información probatoria necesaria para realizar la verificación.

Al ingresar a ese enlace, es posible descargar directamente:

  • el certificado X.509 del firmante
  • la firma detached .sig
  • la prueba OpenTimestamps .ots

Si se obtienen esos tres archivos desde el enlace del sello, la verificación continúa exactamente igual que en la opción del .zip.

Con esos archivos ya puede pasar a la sección 6.

6. Proceso de verificación común

Una vez obtenidos el documento, el certificado del firmante, la firma .sig y la prueba .ots, el proceso de verificación es siempre el mismo.

7. Verificación de la firma digital con OpenSSL

7.1. Requisito

Tener OpenSSL instalado.

Para comprobarlo:

openssl version

7.2. Verificar que el certificado del firmante fue emitido por Signatura

Antes de verificar la firma, conviene validar que el certificado del firmante encadena contra la Autoridad Certificante de Signatura.

Descargar el certificado CA oficial de Signatura:

Guardarlo por ejemplo como:

CA.pem

Luego verificar el certificado del firmante:

openssl verify -CAfile CA.pem -attime <timestamp> firmante.cer

Donde <timestamp> es el timestamp Unix correspondiente a la fecha de firma (puede obtenerse del sello OpenTimestamps o del certificado de auditoría). Esto es necesario cuando se realiza una pericia tiempo después de la firma, ya que el certificado del firmante puede haber expirado. El flag -attime indica a OpenSSL que evalúe la validez del certificado al momento de la firma, no al momento actual.

Resultado esperado:

firmante.cer: OK

Si el resultado es OK, significa que el certificado del firmante fue emitido por la CA de Signatura contenida en CA.pem.

7.3. Extraer la clave pública desde el certificado

openssl x509 -in firmante.cer -pubkey -noout -out pubkey.pem

Esto genera el archivo pubkey.pem, que se utilizará para verificar la firma.

7.4. Verificar la firma detached

openssl dgst -sha256 -verify pubkey.pem -keyform PEM -signature firmante.sig documento.pdf

Resultado esperado:

Verified OK

Si aparece Verified OK, significa que:

  • La firma firmante.sig corresponde al archivo documento.pdf.
  • La firma fue generada con la clave privada asociada al certificado firmante.cer.

Si el resultado no es exitoso, revisar:

  • Que el documento sea exactamente el mismo que fue firmado.
  • Que la firma .sig corresponda a ese documento.
  • Que el certificado .cer corresponda a esa firma.
  • Que no haya cambios de extensión, renombre o conversión de archivos durante la descarga o copia.

8. Verificación del sello de tiempo OpenTimestamps por web

Esta verificación debe hacerse sobre la firma detached y su prueba .ots.

No debe hacerse sobre el PDF.

8.1. Archivos a utilizar

  • firmante.sig
  • firmante.sig.ots

8.2. Concepto clave

OpenTimestamps no sella el documento PDF directamente. En Signatura, lo que se sella es el binario de la firma detached, es decir, el archivo .sig.

Por eso, para verificar el sello de tiempo:

  • el archivo principal es firmante.sig
  • la prueba asociada es firmante.sig.ots

8.3. Verificación web

Ingresar al sitio oficial:

Luego:

  • Seleccionar la opción de verificación del timestamp.
  • Cargar el archivo firmante.sig.
  • Cargar el archivo firmante.sig.ots.
  • Ejecutar la verificación.

La validación correcta demostrará que:

  • el archivo .sig existía al momento acreditado por OpenTimestamps
  • esa prueba quedó anclada en Bitcoin

9. Verificación del sello de tiempo con línea de comandos

9.1. Instalación

Una forma habitual de instalar el cliente es con pip:

pip install opentimestamps-client

Luego verificar que el comando esté disponible:

ots --help

9.2. Verificar el sello de tiempo contra la firma

ots verify -f firmante.sig firmante.sig.ots

Si la prueba ya está completa y el entorno tiene acceso a la verificación de Bitcoin, el comando devolverá la fecha o la confirmación correspondiente.

Si se desea esperar una verificación completa:

ots -w verify -f firmante.sig firmante.sig.ots

9.3. Nota técnica

Según la configuración del entorno, ots puede intentar verificar contra un nodo Bitcoin local. Si no existe uno configurado, igualmente se puede inspeccionar la prueba:

ots info firmante.sig.ots

Y, si se desea una comprobación sin usar Bitcoin en forma automática:

ots --no-bitcoin verify -f firmante.sig firmante.sig.ots

En ese caso, la herramienta indicará el bloque y el merkle root que deberían verificarse manualmente.

10. Recomendaciones prácticas

  • Copiar los bloques Base64 exactamente como aparecen, sin encabezados adicionales, numeración ni texto descriptivo.
  • Verificar que no se inserten espacios al inicio o al final.
  • No abrir ni guardar la firma .sig con editores que modifiquen el contenido binario.
  • No intentar verificar el .ots contra el PDF: siempre debe verificarse contra la firma .sig.

11. Ejemplo resumido

Una vez obtenidos los archivos necesarios por cualquiera de las tres vías, la secuencia técnica de verificación es:

openssl verify -CAfile CA.pem -attime <timestamp> firmante.cer
openssl x509 -in firmante.cer -pubkey -noout -out pubkey.pem
openssl dgst -sha256 -verify pubkey.pem -keyform PEM -signature firmante.sig documento.pdf
ots verify -f firmante.sig firmante.sig.ots

12. Conclusión

Una verificación completa en Signatura consiste en comprobar tres cosas:

  • Que el certificado del firmante fue emitido por la CA de Signatura.
  • Que la firma detached corresponde exactamente al documento y al certificado del firmante.
  • Que esa firma detached fue sellada temporalmente con OpenTimestamps.

Esto permite demostrar tanto la integridad criptográfica del documento firmado como la existencia comprobable en el tiempo de la firma generada.

← Volver a Primeros pasos