Inspecciona un PDF en busca de campos de firma, cuenta marcadores de firma y analiza la ventana de integridad ByteRange.
Inspecciona un PDF en busca de campos de firma, cuenta marcadores de firma y analiza la ventana de integridad ByteRange. Inspecciona un PDF en busca de campos de firma, cuenta marcadores de firma y analiza la ventana de integridad ByteRange.
Contexto
Como funcionan las firmas en PDF
Una firma digital en un PDF no es un sello dibujado en la pagina (aunque
tambien puede existir una apariencia visual). Es un objeto criptografico: el
valor /Contents del diccionario de firma guarda una estructura DER PKCS#7
SignedData. Esa estructura contiene el certificado del firmante, el algoritmo
de resumen y una firma calculada sobre un trozo preciso de los bytes del PDF.
El array /ByteRange del diccionario de firma describe exactamente que rangos
de bytes del archivo cubre la firma: tipicamente [0, a, b, c] significa "bytes
0..a-1 y b..b+c-1". Todo lo que esta dentro se firma; todo lo de fuera -- el
propio valor de firma -- no. Este diseno permite firmar un PDF sin conocer su
longitud final de antemano.
Por que ByteRange importa para detectar manipulaciones
Para verificar una firma, un comprobador hashea los bytes de los rangos
firmados y los compara con el resumen incrustado en la estructura PKCS#7. Si
alguien edita el PDF tras firmar, los bytes cubiertos cambian, el hash
recalculado diverge y la verificacion falla -- esa es la senal de
manipulacion. El /ByteRange define por tanto la ventana de integridad: una
firma solo puede proteger los bytes que cubre. Una firma cuyos rangos no
cubren todo el documento deja el resto del archivo abierto a modificaciones
no detectadas. Este comprobador informa de si el rango existe y de si empieza
en el byte 0 y cubre cabeza mas cola -- la forma que produce toda herramienta
de firma.
Que comprueba esta herramienta
Analiza el PDF con la biblioteca pdf-lib empaquetada (Apache-2.0) y reporta:
el numero de paginas; los campos de firma hallados en el AcroForm; los
marcadores /FT /Sig en el flujo de bytes crudo; si existe un array /ByteRange;
y si ese rango tiene la forma canonica [0, head, tailStart, tailLen]. Un PDF
sin marcadores no tiene firmas en absoluto. Un PDF con marcadores pero sin
rango parseable es inusual y merece una mirada atenta. La verificacion
criptografica completa -- recalcular hashes y validar la cadena de
certificados -- requiere la cadena completa del firmante y un almacen de
confianza; esta pagina se centra en el analisis estructural que revela si
existen firmas y si la ventana de integridad esta intacta.
Interpretar los resultados
Mas de un marcador de firma suele significar firmas multiples o una
actualizacion incremental que re-firmo el documento. Un PDF cifrado puede
ocultar diccionarios de firma al parser; se usa el modo ignoreEncryption para
que la estructura aun se reporte. Recuerda: esta herramienta comprueba
estructura, no identidad. No puede decirte si el firmante es quien dice ser --
eso requiere verificar el certificado contra una raiz de confianza. Usala
como triaje de primer paso en documentos recibidos y sigue con la verificacion
completa de tu plataforma para lo importante. El analisis corre por completo
en tu navegador; tu PDF nunca se sube.
Preguntas frecuentes
Esta herramienta verifica criptograficamente la firma?
Hace analisis estructural: detecta campos de firma, cuenta marcadores /FT /Sig y comprueba la forma de la ventana de integridad ByteRange. La recomputacion completa de hashes y la validacion de la cadena requieren la cadena del firmante y un almacen de confianza, que una pagina de navegador no puede dar offline.
Que significa un informe ByteRange vacio?
Si no se encuentra ningun array /ByteRange pero existen marcadores de firma, el PDF puede usar una disposicion de firma inusual o estar danado. Un PDF sin marcadores ni ByteRange simplemente no tiene firmas.
Que es una actualizacion incremental y por que importa?
Muchas herramientas de PDF anaden cambios al final del archivo en vez de reescribirlo. Cada anexion puede anadir o reemplazar objetos, y una re-firma aparece como un nuevo marcador. Por eso un PDF firmado puede mostrar mas de un marcador.
Puede comprobarse aun un PDF cifrado?
Si, con limites. El comprobador carga con ignoreEncryption para que los diccionarios de firma sigan visibles. El escaneo de bytes crudos de /FT /Sig funciona igualmente porque busca en el flujo de texto plano.
Se sube mi PDF a algun sitio?
No. El PDF se lee con FileReader y se analiza por completo en tu navegador con la biblioteca pdf-lib empaquetada. El PDF de muestra tambien se genera en local. Nada sale de tu dispositivo.
Que es PKCS#7 / CAdES / PAdES?
PKCS#7 es el formato contenedor que guarda los datos de firma (hoy estandarizado como CMS). PAdES es el perfil PDF de ese formato usado por las reglas europeas de firma electronica; anade atributos de validacion a largo plazo para que las firmas sigan verificables durante anos.