Verificación de firma PDF Lo que necesitan los desarrolladores saber
La mayoría de desarrolladores enfrentan PDFs firmados sin saber qué garantiza realmente la firma criptográfica. A continuación, se detallan los aspectos que debes conocer para verificar correctamente la firma de PDF.
La mayoría de los desarrolladores han trabajado con PDFs firmados —un contrato firmado, un comprobante bancario certificado, un formulario gubernamental. Pero el término «firmado» puede tener diferentes significados según quien lo diga. El trazo visual en la caja de firma y la firma criptográfica incorporada en el archivo son dos cosas completamente distintas. Solo una de ellas garantiza algo real.
Esta guía explica cómo funcionan las firmas digitales en PDF, qué significan los diferentes estados de validez y cómo verificarlas de forma programática.
La firma que ves vs. la firma que importa
Cuando alguien «firma» un PDF con una herramienta de dibujo o una marca de imagen, está colocando una imagen de firma en la página. Aunque parece oficial, no ofrece ninguna garantía de seguridad. Cualquiera puede copiar esa imagen a otro documento.
Una firma digital es diferente. Es un artefacto criptográfico integrado en la estructura del PDF —independiente de cualquier elemento visual. Cuando un documento se firma digitalmente:
- Se calcula un hash del contenido del documento.
- Ese hash se encripta con la clave privada del firmante.
- El hash encriptado (la firma) se almacena en el PDF junto con la cadena de certificados del firmante.
Al verificar la firma, se descifra usando la clave pública del certificado, se recalcula el hash del contenido actual del documento y se compara. Si coinciden, el documento no ha sido modificado desde la firma. Si no coinciden —o el certificado no es de confianza— la firma es inválida.
Cuatro estados de validez de firma
No todas las firmas digitales son iguales. Cuando verifiques una firma PDF, podrás encontrar uno de cuatro estados:
| Estado de la firma | Qué significa | Qué hacer |
|---|---|---|
| Válido | El hash coincide, la cadena de certificados es de confianza y el certificado estaba activo en el momento de la firma | Confía en la firma —verifica la identidad del firmante contra el certificado esperado |
| Inválida | El contenido del documento cambió después de la firma, o los datos de la firma están corruptos | Rechaza el documento; ha sido alterado o está mal formado |
| Desconocida | La estructura de la firma es intacta, pero el certificado no puede verificarse (raíz no de confianza, OCSP ausente, etc.) | No puedes confiar en la firma —pide que se re-firme o obtén el certificado de raíz de confianza |
| Revocada | El certificado era válido al momento de emitirse, pero fue revocado posteriormente por el CA (por ejemplo, compromiso de clave) | Rechaza a menos que los datos de LTV prueben que el certificado era válido antes de la revocación |
El estado «Desconocido» confunde a la mayoría de los desarrolladores. Una firma estructuralmente correcta con un certificado autofirmado o interno de empresa aparece como desconocida en la mayoría de las herramientas porque estas no pueden alcanzar al emisor. En flujos de documentos internos, podrías confiar explícitamente en esa raíz; en documentos de terceros, el estado desconocido no es aceptable.
Validación a largo plazo (LTV): Por qué los timestamps importan
Los certificados caducan. Si alguien firmó un documento hace cinco años y su certificado ha expirado desde entonces, ¿la firma sigue siendo válida?
Depende de la validación a largo plazo (LTV). Cuando se incluye LTV, el PDF contiene:
- Un timestamp confiable de una autoridad de timestamp (TSA)
- Respuestas OCSP o datos CRL que confirman el estado del certificado en el momento de la firma
Con LTV, puedes probar que el certificado era válido en el momento en que se aplicó la firma, incluso después de que haya expirado. Sin LTV, solo puedes verificar la firma contra el estado actual del certificado, lo cual se vuelve imposible una vez que el certificado caduque o el proveedor de OCSP se cierre.
Para contratos o documentos regulados con largos periodos de retención (7 años o más en muchos jurisdicciones), la LTV no es opcional. Siempre debes verificarla cuando se construya un flujo de verificación de firmas.
Verificación de firmas PDF de forma programática
Usando Python con pypdf
El pypdf la biblioteca proporciona acceso a los campos de firma PDF y a su metadatos subyacentes. A continuación, un ejemplo mínimo para comprobar si un PDF tiene firmas digitales y leer su estado:
import sys
from pypdf import PdfReader
def check_pdf_signatures(path: str) -> None:
reader = PdfReader(path)
sig_fields = [
name for name, field in (reader.get_fields() or {}).items()
if field.get("/FT") == "/Sig"
]
if not sig_fields:
print("No digital signature fields found.")
return
print(f"Found {len(sig_fields)} signature field(s):")
for name in sig_fields:
sig_obj = reader.get_fields()[name]
sig_dict = sig_obj.get("/V")
if not sig_dict:
print(f" {name}: field present but unsigned")
continue
signer_name = sig_dict.get("/Name", "Unknown")
signing_time = sig_dict.get("/M", "No timestamp")
reason = sig_dict.get("/Reason", "")
location = sig_dict.get("/Location", "")
print(f" {name}:")
print(f" Signer: {signer_name}")
print(f" Time: {signing_time}")
if reason:
print(f" Reason: {reason}")
if location:
print(f" Location: {location}")
if __name__ == "__main__":
check_pdf_signatures(sys.argv[1])
Esto lee los metadatos de la firma directamente de la estructura del PDF. Para una verificación criptográfica completa —confirmar el hash y validar la cadena de certificados— usa pyhanko o endesive, ambas de las cuales envuelven la capa de verificación PKCS#7.
Usando qpdf desde la línea de comandos
Para inspección rápida desde la línea de comandos sin necesidad de entorno de Python:
# Show encryption and signature info
qpdf --show-encryption input.pdf
# Full JSON output with signature details
qpdf --json input.pdf | python3 -m json.tool | grep -A 20 '"sig"'
qpdf es útil en pipelines de CI o scripts en la shell donde configurar un entorno virtual de Python añade sobrecarga innecesaria.
Escenarios comunes de verificación
Contratos firmados por clientes — Verifica tanto el estado de validez como el emisor del certificado. Una firma válida de un certificado no confiable (autofirmado) no proporciona garantías externas. Estás confiando en quien generó la clave.
Documentos gubernamentales y regulatorios — Estos suelen usar autoridades de certificados nacionales de confianza. Asegúrate de que la cadena de certificados se enlace a la raíz esperada del CA, no solo que la firma muestre como «válida».
Estados y facturas bancarias — Muchos son firmados en lote usando certificados de firma emitidos a una organización. El nombre del firmante reflejará la institución, no a un empleado individual.
Verificación sin escribir código
Si necesitas verificar rápidamente un archivo sin configurar un entorno de desarrollo, el IO Tools PDF Signature Checker te permite subir un archivo y ver los detalles de la firma de inmediato —útil para verificaciones aisladas o para probar archivos de ejemplo antes de construir un flujo de producción.
Instalar extensiones
Agregue herramientas IO a su navegador favorito para obtener acceso instantáneo y búsquedas más rápidas
恵 ¡El marcador ha llegado!
Marcador es una forma divertida de llevar un registro de tus juegos, todos los datos se almacenan en tu navegador. ¡Próximamente habrá más funciones!
Herramientas clave
Ver todo Los recién llegados
Ver todoActualizar: Nuestro última herramienta was added on May 24, 2026
