Um PDF assinado não é o mesmo que um PDF inalterado. Uma assinatura cobre uma faixa definida de bytes, e tudo que é anexado depois dessa faixa fica fora dela — legitimamente, porque foi assim que o formato foi desenhado. Estas três famílias relatam a distância entre “este documento está assinado” e “este documento é o que foi assinado”.
Parte do guia de sinais — três das dezoito famílias que o motor reporta.
Sinais, não veredictos. Todo achado aqui é um fato estrutural sobre um arquivo. "Este documento foi modificado depois de gerado" é verdadeiro ou falso sobre os bytes; "este documento é fraudulento" é um julgamento sobre uma pessoa, e o Tamperlens não o faz. A API não retorna nenhum campo de veredicto booleano, por construção.
signature-coverage
info alta- O que detecta
-
Se o
/ByteRangede cada assinatura de fato cobre o arquivo inteiro./ByteRangeé um array de pares deslocamento/comprimento que nomeia exatamente quais bytes uma assinatura protege — normalmente tudo, exceto a lacuna onde fica o próprio valor da assinatura. A Tamperlens calcula o maior deslocamento coberto e o compara com o tamanho do arquivo. Qualquer coisa além dele foi anexada após a assinatura e não está protegida por aquela assinatura. - Este é o achado estrutural mais forte do motor, e é aritmética em vez de criptografia: dois inteiros, nenhum certificado necessário, nenhuma cadeia de confiança consultada. Ele vale independentemente de a matemática da assinatura validar — e é exatamente por isso que merece ser reportado separadamente da validação.
- Evidência retornada
-
Por assinatura: número do objeto,
/SubFilter, o array/ByteRangebruto,coveredEnd,bytesAfterCoverage,coversWholeFilee o tamanho total do arquivo. MaisuncoveredCounte a contagem de revisões do documento. - Causas legítimas
- O mecanismo em si é uma parte normal e intencional do PDF: um segundo signatário, ou um salvamento incremental legítimo, como adicionar uma anotação permitida a um documento já assinado, produz bytes fora do intervalo da primeira assinatura. O PDF tem um conceito inteiro — as permissões DocMDP — para expressar quais mudanças posteriores um signatário permitiu. A Tamperlens reporta a lacuna de cobertura; ela não avalia se a mudança era permitida. Fluxos com múltiplas assinaturas, portanto, vão disparar este sinal legitimamente.
- Duas coisas que esta família explicitamente não faz: verificar a criptografia da assinatura, e validar o certificado do signatário ou sua cadeia de confiança. São trabalhos separados, e um relatório de cobertura não substitui nenhum dos dois.
- Lógica de severidade
-
Nenhum campo de assinatura: silenciosa.
alta quando ao menos uma assinatura tem um
/ByteRangeinterpretado que não alcança o fim do arquivo. info quando o documento está assinado e cada assinatura abrange o arquivo inteiro — reportado deliberadamente, como um fato positivo que vale ter no relatório em vez do silêncio.
signature-integrity
alta baixa- O que detecta
- Se os bytes que uma assinatura cobre ainda produzem o resumo com que aquela assinatura se comprometeu. Este é o par de signature-coverage, e os dois só fazem sentido juntos: a cobertura pergunta se algo foi acrescentado fora da faixa assinada, e este pergunta se algo mudou dentro dela. Um documento pode passar num e falhar no outro.
- A diferença importa porque as explicações inocentes de cada um não são comparáveis. Bytes acrescentados depois de uma assinatura são completamente normais — um segundo signatário, uma anotação adicionada, um campo de formulário preenchido fazem exatamente isso. Um resumo que não confere não é: um PDF assinado corretamente não pode ter um. Algo dentro da região protegida foi alterado depois de protegido.
-
É aritmética sobre os próprios bytes do arquivo. O
/ByteRangeda assinatura nomeia as faixas que ela cobre; essas faixas são resumidas e comparadas com o atributomessageDigestdentro do bloco PKCS#7. Nenhuma requisição de rede é feita e nenhum relógio é lido, então o mesmo arquivo dá a mesma resposta para sempre. - Evidências retornadas
-
signatures,verified,mismatchedeunreadablecomo contagens, depoisfindingscom ostatusde cada assinatura, oalgorithmdo resumo e — quando diferem — os primeiros bytes deexpectedDigesteactualDigest, para que a afirmação possa ser conferida em vez de aceita. - Causas legítimas
- Para uma divergência, essencialmente nenhuma — e é por isso que este é o achado raro reportado como alta sozinho. Para um resultado ilegível há muitas, e ele é reportado como baixa justamente porque não é uma acusação: a assinatura simplesmente não está num formato que este motor leia.
- O que não consegue ver
- Isto não é validação de certificado, e um resumo conferido não é uma afirmação de que o documento é confiável. A Tamperlens não examina quem assinou, não percorre a cadeia de certificados até uma raiz confiável e não verifica se aquele certificado foi revogado. Uma assinatura matematicamente íntegra de um signatário completamente desconhecido se lê exatamente igual aqui a uma de um banco.
-
Só assinaturas PKCS#7 destacadas (
adbe.pkcs7.detached,ETSI.CAdES.detached) são verificadas.adbe.pkcs7.sha1é deliberadamente recusada em vez de aproximada — ela guarda seu resumo de outro jeito, e verificá-la da mesma forma reportaria uma divergência numa assinatura perfeitamente boa. - Lógica de severidade
- alta quando os bytes cobertos não produzem o resumo comprometido. baixa quando uma assinatura está presente mas não pôde ser verificada — reportada em vez de omitida, porque o silêncio se leria igual a "verificada e em ordem". Um resumo conferido é reportado como info e não contribui em nada para a pontuação de risco.
signature-permissions
alta média baixa- O que detecta
- Se o documento mudou de um jeito que a própria assinatura dele dizia que não podia. Esta é a terceira das famílias de assinatura e a que torna a primeira utilizável: a signature-coverage informa que bytes foram acrescentados depois da assinatura e então precisa listar as explicações inocentes, porque não consegue distingui-las. Uma assinatura de certificação já respondeu a essa pergunta no momento da assinatura.
-
Quando um documento é certificado, o signatário grava nele um nível de
permissão —
/DocMDP /P. 1 não permite alteração alguma; 2 permite preencher campos de formulário e acrescentar novas assinaturas; 3 permite também anotações. Esta família compara esse número com o que as revisões escritas depois de fato tocaram. - A maioria dos PDFs assinados não é certificada. Uma assinatura de aprovação comum atesta o documento como ele estava e não declara nada sobre o que pode vir depois — e isso também é reportado, porque "a assinatura cobre o arquivo inteiro" se lê como "verificada" quando significa apenas a extensão da assinatura, não a permissão de alguém. É a situação que o validador do ITI classifica como indeterminada.
- Evidência retornada
-
docMDPPermission(e se foidocMDPPermissionDefaulted),permsTarget,appendedRevisionse um detalhamentotouchedque conta quantos fluxos de conteúdo de página, imagens, imagens alcançáveis por uma página, páginas, campos de formulário, outras anotações e objetos de assinatura as revisões posteriores escreveram —imagesepageImagesvêm separados, então 3 e 0 diz que chegaram imagens e que nenhuma delas caiu numa página — maischangedObjectSample, os números dos objetos por trás do achado, para que ele possa ser conferido no arquivo. - Causas benignas
-
Preencher um formulário regenera fluxos de aparência, que
parecem fluxos de conteúdo e não são. Só objetos alcançados pelo
/Contentsde uma página contam aqui, e é isso que impede que um preenchimento permitido se leia como violação. -
Uma assinatura visível carrega uma imagem. O bloco de
assinatura renderizado, uma marca institucional, uma rubrica digitalizada
— tudo isso vive no fluxo de aparência do campo de assinatura, não na
página, e acrescentar uma assinatura é exatamente o que o
/P 2permite. Só contam imagens que os recursos de uma página nomeiam. Medido sobre o corpus: 109 de 320 revisões que acrescentaram uma assinatura trazem uma imagem assim e nenhum conteúdo de página; antes da versão 1.24.0 do motor, todas elas seriam reportadas como violação. -
Dados de validação de longo prazo. Acrescentar os
certificados e respostas de revogação que permitem conferir uma assinatura
anos depois cria uma revisão mesmo num documento certificado com
/P 1. É rotina, é o que a política de Referência de Tempo da ICP-Brasil produz, e um documento cujo catálogo traz um armazenamento/DSStem isso reportado como info, não como alteração. - O que não consegue ver
-
/Pé um número num dicionário, e esta família não toma decisão de confiança alguma. Ela não verifica quem certificou o documento, se o certificado encadeia até uma raiz confiável, nem se a assinatura é válida — essa última pergunta é da signature-integrity. Uma permissão declarada por um signatário desconhecido se lê exatamente igual a uma de um órgão público. - Ela não diz para que serviu a alteração. Reporta que um fluxo de conteúdo de página foi reescrito depois de uma certificação que não permitia isso, não o que a nova página diz.
- Ela compara com a certificação e com mais nada. Num documento com várias assinaturas, uma alteração feita depois de um signatário anterior assinar mas antes de o documento ser certificado fazia parte do que foi certificado, e é invisível aqui — essa é uma pergunta por assinatura, respondida separadamente pela signature-coverage e pela signature-integrity.
-
Um documento
/P 3pode ser alterado visivelmente sem que nenhuma permissão seja violada./P 3permite anotações, e uma anotação carrega conteúdo visível arbitrário no seu fluxo de aparência. A resposta correta pela norma e a resposta que um leitor quer não são a mesma coisa em/P 3, e nenhuma leitura do/DocMDPsozinha fecha essa lacuna. - Lógica de severidade
-
alta quando um fluxo de conteúdo de página, ou uma imagem
que alguma página do documento nomeia, foi escrito depois da certificação
— nenhum nível de permissão autoriza repintar a página — ou quando
qualquer coisa foi alterada sob
/P 1. alta também quando o catálogo aponta uma assinatura de certificação que não carrega certificação alguma, que é o que sobra quando se remove uma. -
média quando uma anotação que não é campo de formulário
aparece sob
/P 2. baixa quando bytes foram acrescentados a um documento/P 1mas tocaram apenas objetos de assinatura e de controle, sem um/DSSque os explique — um "olhe isto", não uma acusação. Todo o resto é info e não contribui em nada para a pontuação de risco: um documento não certificado, e uma assinatura que declara uma certificação que o catálogo nunca adotou. Esta segunda foi média por cerca de uma hora — medida contra 915 documentos reais, disparou 5 vezes e errou as 5, todas contratos públicos cujo produtor grava a transformação e omite a entrada do catálogo.
Veja o relatório no seu próprio arquivo
O verificador gratuito roda todas as famílias desta página e mostra a evidência completa — sem conta, sem nada armazenado. Para rodar no seu próprio fluxo, veja o guia rápido da API ou crie uma conta para uma chave com 50 documentos grátis por mês.
O Tamperlens reporta sinais de risco, não veredictos de autenticidade. Sinais podem ter causas legítimas; combine-os com sua própria lógica de decisão.
O resto do guia
- Como um PDF registra a própria origem Cinco famílias.
- O que as páginas de um PDF entregam Seis famílias.
- Quando os números do documento não fecham Quatro famílias.
- Todas as dezoito famílias O índice, o vocabulário de severidade e como os sinais viram uma pontuação.