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
.sigestá separado del documento. - El sello de tiempo OpenTimestamps se aplica sobre el archivo
.sig. - Por lo tanto, el archivo
.otssiempre 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.pdffirmante.cerofirmante.pemfirmante.sigfirmante.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.sigcorresponde al archivodocumento.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
.sigcorresponda a ese documento. - Que el certificado
.cercorresponda 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.sigfirmante.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
.sigexistí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
.sigcon editores que modifiquen el contenido binario. - No intentar verificar el
.otscontra 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.