Detectando Comprometimento de Assinatura
Detectando Comprometimento de Assinatura
SignaturesCompromiseDetector é o ponto de entrada para este guia: ele inspeciona o histórico de revisões de um documento assinado em busca de indicadores de que conteúdo foi adicionado após a última assinatura ter sido aplicada, e relata o que encontra como um CompromiseCheckResult. Esta é a superfície de segurança coberta por este cluster da base de conhecimento — não cobre a criação ou aplicação de assinaturas, nem a criptografia de documentos; ele apenas examina assinaturas que já existem em um documento.
Executando uma Verificação de Comprometimento
Construa SignaturesCompromiseDetector com o documento que você deseja inspecionar, então chame SignaturesCompromiseDetector.check(). A verificação percorre cada assinatura já presente no documento e procura por bytes não assinados anexados após a última revisão assinada — um sinal de que o conteúdo pode ter sido sobreposto posteriormente — enquanto tolera material de validação de longo prazo legítimo (como um repositório de segurança de documento ou um carimbo de tempo de arquivo) adicionado por uma assinatura posterior que cobre a anterior.
Interpretando o Resultado
SignaturesCompromiseDetector.check() retorna um CompromiseCheckResult com quatro propriedades:
CompromiseCheckResult.has_compromised_signatures—Truese alguma assinatura mostrou um indicador de adulteração.CompromiseCheckResult.compromised— espelhaCompromiseCheckResult.has_compromised_signatures, fornecido como um alias de conveniência somente leitura.CompromiseCheckResult.signatures_coverage— o número de assinaturas que o detector examinou no documento.CompromiseCheckResult.reasons— uma lista de strings curtas descrevendo por que o documento foi sinalizado, quando foi.
Um documento sem assinaturas, ou nenhum documento, é relatado como não comprometido, com CompromiseCheckResult.signatures_coverage igual a 0.
Dicas e Melhores Práticas
- Trate
CompromiseCheckResult.compromisedeCompromiseCheckResult.has_compromised_signaturescomo intercambiáveis — eles sempre relatam o mesmo valor. - Verifique
CompromiseCheckResult.signatures_coverageantes de confiar em um resultado deFalse: uma cobertura de0significa que o detector não encontrou assinaturas para examinar, não que assinaturas existentes foram verificadas como intactas. - Leia
CompromiseCheckResult.reasonsquandoCompromiseCheckResult.has_compromised_signaturesestáTrue— a lista explica qual heurística foi acionada, o que é útil ao registrar ou exibir o resultado para um revisor. SignaturesCompromiseDetectorinspeciona o histórico de revisões em busca de indicadores de adulteração; ele não valida a integridade da assinatura criptográfica por si só, portanto combine-o com os resultados de validação de assinatura do próprio documento onde isso for relevante para o seu fluxo de trabalho.
Problemas comuns
| Problema | Causa | Correção |
|---|---|---|
CompromiseCheckResult.signatures_coverage é 0 para um documento que você sabe que está assinado | SignaturesCompromiseDetector foi construído sem um documento, ou o objeto de documento não tem assinaturas acessíveis | Confirme se o documento passado para SignaturesCompromiseDetector expõe suas assinaturas antes de chamar SignaturesCompromiseDetector.check() |
CompromiseCheckResult.reasons está vazio mesmo que você esperasse uma explicação | CompromiseCheckResult.has_compromised_signatures é False para este documento | Os motivos são preenchidos somente quando um indicador de comprometimento foi realmente encontrado; uma lista vazia em um resultado limpo é esperada |
| Um PDF legitimamente atualizado (por exemplo, um com um carimbo de data/hora de validação de longo prazo adicionado) é marcado como comprometido | A adição posterior não está totalmente coberta por uma assinatura subsequente ou não é reconhecida como material apenas de validação | Execute a verificação novamente após confirmar que a atualização foi feita por uma assinatura ou carimbo de data/hora de cobertura adequado, e inspecione CompromiseCheckResult.reasons para o gatilho específico |
FAQ
O que CompromiseCheckResult.compromised realmente verifica?
Ele relata o mesmo valor que CompromiseCheckResult.has_compromised_signatures: se SignaturesCompromiseDetector.check() encontrou algum indicador de adulteração nas assinaturas do documento.
Um signatures_coverage de 0 significa que o documento está seguro?
Não — isso significa que nenhuma assinatura foi encontrada para examinar. SignaturesCompromiseDetector não pode relatar assinaturas que não vê, portanto, uma cobertura de 0 é um resultado de “nada a verificar”, não uma confirmação de integridade.
O SignaturesCompromiseDetector pode criar ou verificar uma assinatura criptográfica?
Não. Ele apenas inspeciona o histórico de revisões existente de um documento em busca de indicadores de que o conteúdo foi adicionado após a última assinatura. Criar, aplicar ou validar criptograficamente assinaturas está fora do escopo desta classe.
Adicionar um carimbo de tempo legítimo após a assinatura sempre disparará um achado de comprometimento?
Não necessariamente. O detector foi projetado para tolerar uma adição posterior que esteja coberta por uma assinatura subsequente, ou que apenas adicione material de validação em vez de novo conteúdo. Verifique CompromiseCheckResult.reasons se você encontrar um achado inesperado.
API Reference Resumo
| Classe/Método | Descrição |
|---|---|
SignaturesCompromiseDetector | Inspeciona um documento assinado em busca de indicadores de adulteração após a última assinatura |
SignaturesCompromiseDetector.check() | Executa a verificação e retorna um CompromiseCheckResult |
CompromiseCheckResult | O resultado de uma verificação de comprometimento |
CompromiseCheckResult.compromised | Alias somente leitura para CompromiseCheckResult.has_compromised_signatures |
CompromiseCheckResult.has_compromised_signatures | Se um indicador de adulteração foi encontrado |
CompromiseCheckResult.signatures_coverage | O número de assinaturas examinadas |
CompromiseCheckResult.reasons | Cadeias curtas explicando qualquer constatação |