Detección de compromiso de firma
Detección de compromiso de firma
SignaturesCompromiseDetector es el punto de entrada para esta guía: inspecciona el historial de revisiones de un documento firmado en busca de indicadores de que el contenido se añadió después de que se aplicó la última firma, y reporta lo que encuentra como un CompromiseCheckResult. Esta es la superficie de seguridad cubierta por este conjunto del base de conocimientos — no cubre la creación o aplicación de firmas, ni el cifrado de documentos; solo examina firmas que ya existen en un documento.
Ejecutando una verificación de compromiso
Construye SignaturesCompromiseDetector con el documento que deseas inspeccionar, luego llama a SignaturesCompromiseDetector.check(). La verificación recorre cada firma ya presente en el documento y busca bytes sin firmar añadidos después de la última revisión firmada — una señal de que el contenido pudo haberse superpuesto posteriormente — mientras tolera material legítimo de validación a largo plazo (como un almacén de seguridad del documento o una marca de tiempo de archivo) añadido por una firma posterior que cubre.
Interpretando el resultado
SignaturesCompromiseDetector.check() devuelve un CompromiseCheckResult con cuatro propiedades:
CompromiseCheckResult.has_compromised_signatures—Truesi alguna firma mostró un indicador de manipulación.CompromiseCheckResult.compromised— replicaCompromiseCheckResult.has_compromised_signatures, provisto como un alias de conveniencia solo de lectura.CompromiseCheckResult.signatures_coverage— el número de firmas que el detector examinó en el documento.CompromiseCheckResult.reasons— una lista de cadenas cortas que describen por qué el documento fue marcado, cuándo ocurrió.
Un documento sin firmas, o ningún documento en absoluto, se informa como no comprometido, con CompromiseCheckResult.signatures_coverage igual a 0.
Consejos y Mejores Prácticas
- Trate
CompromiseCheckResult.compromisedyCompromiseCheckResult.has_compromised_signaturescomo intercambiables — siempre informan el mismo valor. - Verifique
CompromiseCheckResult.signatures_coverageantes de confiar en un resultado deFalse: una cobertura de0significa que el detector no encontró firmas para examinar, no que las firmas existentes se verificaron como intactas. - Lea
CompromiseCheckResult.reasonscuandoCompromiseCheckResult.has_compromised_signaturesseaTrue— la lista explica qué heurística se activó, lo cual es útil al registrar o presentar el resultado a un revisor. SignaturesCompromiseDetectorinspecciona el historial de revisiones en busca de indicadores de manipulación; no valida la integridad de la firma criptográfica por sí mismo, así que combínalo con los resultados de validación de firmas del propio documento donde eso sea importante para tu flujo de trabajo.
Problemas comunes
| Problema | Causa | Solución |
|---|---|---|
CompromiseCheckResult.signatures_coverage es 0 para un documento que sabes que está firmado | SignaturesCompromiseDetector se construyó sin un documento, o el objeto documento no tiene firmas accesibles | Confirma que el documento pasado a SignaturesCompromiseDetector expone sus firmas antes de llamar a SignaturesCompromiseDetector.check() |
CompromiseCheckResult.reasons está vacío aunque esperabas una explicación | CompromiseCheckResult.has_compromised_signatures es False para este documento | Las razones solo se completan cuando se encontró realmente un indicador de compromiso; se espera una lista vacía en un resultado limpio |
| Un PDF actualizado legítimamente (p.ej., uno con una marca de tiempo de validación a largo plazo añadida) se marca como comprometido | La adición posterior no está completamente cubierta por una firma subsiguiente o no se reconoce como material solo de validación | Vuelva a ejecutar la verificación después de confirmar que la actualización se realizó mediante una firma o marca de tiempo de cobertura adecuada, e inspeccione CompromiseCheckResult.reasons para el desencadenante específico |
FAQ
¿Qué verifica realmente CompromiseCheckResult.compromised?
Informa el mismo valor que CompromiseCheckResult.has_compromised_signatures: si SignaturesCompromiseDetector.check() encontró algún indicador de manipulación en las firmas del documento.
¿Significa que un signatures_coverage de 0 indica que el documento es seguro?
No — significa que no se encontraron firmas para examinar. SignaturesCompromiseDetector no puede informar sobre firmas que no puede ver, por lo que una cobertura de 0 es un resultado de “nada que comprobar”, no una confirmación de integridad.
¿Puede SignaturesCompromiseDetector crear o verificar una firma criptográfica?
No. Solo inspecciona el historial de revisiones existente de un documento en busca de indicadores de que se añadió contenido después de la última firma. Crear, aplicar o validar criptográficamente firmas está fuera del alcance de lo que hace esta clase.
¿Agregar una marca de tiempo legítima después de firmar siempre provocará un hallazgo de compromiso?
No necesariamente. El detector está diseñado para tolerar una adición posterior que esté cubierta por una firma subsecuente, o que solo añada material de validación en lugar de contenido nuevo. Consulte CompromiseCheckResult.reasons si observa un hallazgo inesperado.
API Reference Resumen
| Clase/Método | Descripción |
|---|---|
SignaturesCompromiseDetector | Inspecciona un documento firmado en busca de indicadores de manipulación después de la última firma |
SignaturesCompromiseDetector.check() | Ejecuta la comprobación y devuelve un CompromiseCheckResult |
CompromiseCheckResult | El resultado de una comprobación de compromiso |
CompromiseCheckResult.compromised | Alias de solo lectura para CompromiseCheckResult.has_compromised_signatures |
CompromiseCheckResult.has_compromised_signatures | Si se encontró un indicador de manipulación |
CompromiseCheckResult.signatures_coverage | El número de firmas examinadas |
CompromiseCheckResult.reasons | Cadenas cortas que explican cualquier hallazgo |