Sinais de fraude em PDF: o guia de campo

Cada família de sinais que a Tamperlens reporta, o que ela realmente mede, por que dispara em documentos honestos e como a severidade é decidida.

Esta é a página de referência do motor de análise. Dez famílias de sinais rodam em todo documento; cada uma é descrita abaixo sob os mesmos quatro títulos — o que detecta, a evidência que devolve, suas causas legítimas e sua lógica de severidade. As seções de causas legítimas não são um aviso legal pregado no final. Elas são a parte de que você precisa para montar uma fila de revisão que a sua equipe de operações não aprenda a ignorar.

Sinais, não veredictos. Cada achado aqui é um fato estrutural sobre um arquivo. "Este documento foi modificado após a geração" é verdadeiro ou falso sobre os bytes; "este documento é fraudulento" é um julgamento sobre uma pessoa, e a Tamperlens não o faz. A API não retorna nenhum campo booleano de veredicto, por decisão de projeto.

Vocabulário de severidade

Quatro severidades, em hierarquia estrita. Elas descrevem quanto um achado isolado estabelece por si só, não a probabilidade de fraude.

  • alta Por si só estabelece que o documento mudou após a geração, ou que uma ferramenta com intenção de edição esteve envolvida.
  • média Um desvio real do padrão "escrito uma única vez por uma única ferramenta", com explicações legítimas comuns.
  • baixa Fraca ou baseada em ausência; remove um fato corroborante em vez de acrescentar um.
  • info Contexto. Não entra no signalCount e não contribui em nada para a pontuação.

Um relatório contém no máximo um sinal por família — isso é uma invariante do relatório. Uma família ou dispara uma única vez, com todos os seus achados reunidos em um único objeto evidence, ou não aparece de forma alguma. Os sinais são ordenados do mais severo para o menos severo e, em seguida, alfabeticamente por id, de modo que os relatórios são estáveis byte a byte entre execuções.

1. Histórico de revisões

incremental-updates

média alta
O que detecta
Que o arquivo contém mais de uma revisão — bytes foram anexados depois que o documento foi escrito pela primeira vez e terminado com %%EOF. O mecanismo de atualização incremental do PDF anexa novos objetos, uma nova seção de referências cruzadas e um novo trailer em vez de reescrever o arquivo, de modo que estados anteriores do documento continuam fisicamente presentes. O parser percorre a cadeia /Prev de trás para frente e determina quais números de objeto cada revisão introduziu e quais ela sobrescreveu.
A escalada depende do que mudou, não de quantas vezes. Se uma revisão posterior substitui um número de objeto que já existia em uma revisão anterior, e esse objeto carrega dados de página, de stream de conteúdo ou de imagem, então a aparência renderizada do documento mudou após a geração. Objetos de anotação e de metadados não escalam a severidade.
Evidência retornada
revisions, updatesAfterCreation, eofOffsets, startxrefValues, revisionChainBroken, um detalhamento por revisão (changedPerRevision: quais objetos cada revisão escreveu e quais deles ela sobrescreveu, com o tipo de cada um) e contentObjectsOverwritten.
Causas legítimas
Extremamente comuns — esta é a família com mais chance de disparar em um arquivo honesto. Aplicar uma assinatura digital é uma atualização incremental — é assim que a assinatura preserva os bytes assinados. O mesmo vale para preencher um campo de AcroForm, adicionar uma anotação, um comentário ou uma nota adesiva, aplicar uma tarja em algumas ferramentas, e certos passes de linearização e otimização. Sistemas de gestão de documentos rotineiramente adicionam uma revisão na ingestão. Um extrato que o cliente abriu, assinou e salvou de novo não é uma falsificação.
A armadilha inversa: uma única revisão não significa que o arquivo nunca foi editado. Uma ferramenta que reescreve o documento inteiro achata o histórico, e então esta família fica em silêncio enquanto metadata-mismatch, producer-fingerprint ou font-anomalies carregam o achado em seu lugar.
Lógica de severidade
Silenciosa com uma revisão. média para qualquer revisão adicional. alta quando ao menos um objeto sobrescrito é do tipo page, content ou image.

2. Metadados

metadata-mismatch

média alta
O que detecta
Desacordo entre os dois repositórios de metadados independentes que um PDF pode carregar: o dicionário Info do trailer e um pacote XMP incorporado. Quatro campos são comparados — producer, creator/creator-tool, data de criação e data de modificação. Uma única ferramenta escrevendo o arquivo uma única vez preenche os dois de forma consistente; editores de consumo com muita frequência atualizam um e deixam o outro desatualizado.
A comparação é deliberadamente tolerante, para que uma simples deriva de versão não vire um achado. As strings de ferramenta são normalizadas para caracteres alfanuméricos minúsculos e contam como concordantes quando uma é substring da outra, de modo que iText 7.2.5 e iText concordam. Timestamps concordam dentro de um minuto, porque os dois repositórios arredondam de formas diferentes. Um campo é pulado por completo quando está ausente de qualquer um dos repositórios, e a família nem sequer roda a menos que ambos os repositórios estejam presentes.
Evidência retornada
Um array mismatches (campo, valor do Info, valor do XMP), as strings brutas de producer/creator dos dois repositórios, os dois pares de datas, infoEditorTool / xmpEditorTool (qual editor de consumo conhecido cada repositório nomeia, se algum) e editorRevealedByMismatch.
Causas legítimas
Pipelines de publicação em múltiplos estágios produzem esse padrão de forma legítima e constante: um aplicativo de design escreve o XMP, um distiller escreve o dicionário Info, um pós-processador atualiza um dos dois. Alguns geradores server-side escrevem o XMP uma vez e nunca o renovam. O Quartz do macOS e vários drivers de impressão em PDF são conhecidos por deixar os repositórios divergentes. Uma divergência pura e simples é uma pergunta, não uma acusação.
Lógica de severidade
média para qualquer divergência. Escala para alta apenas em um caso específico: a divergência está em um campo producer ou creator e os dois repositórios nomeiam editores de consumo conhecidos diferentes — incluindo o caso em que um nomeia um editor e o outro não nomeia nenhum. Nessa situação, a divergência é a única razão pela qual a ferramenta de edição fica visível, o que é materialmente diferente de duas bibliotecas de servidor discordando entre si.

date-anomalies

baixa média
O que detecta
Timestamps que um gerador funcionando corretamente não poderia ter produzido. Quatro achados distintos, avaliados sobre os quatro campos de data disponíveis (Info /CreationDate e /ModDate, XMP xmp:CreateDate e xmp:ModifyDate):
mod-before-creation — o timestamp de modificação precede o timestamp de criação dentro do mesmo repositório (os dois repositórios são comparados como pares separados; a divergência entre repositórios é tratada por metadata-mismatch). future-date — um timestamp mais de um dia no futuro. impossible-timezone — um deslocamento UTC declarado além de ±14:00, que não corresponde a nenhum fuso horário real. unparseable-date — uma string que não segue nem a sintaxe PDF D:YYYYMMDDHHmmSSOHH'mm' nem a ISO-8601.
Evidência retornada
Um array findings — cada um com um tipo, o campo ou par de campos envolvido, o valor problemático e uma nota de uma linha — mais as quatro strings de data brutas exatamente como aparecem no arquivo.
Causas legítimas
Datas malformadas são, em grande parte, uma questão de qualidade do gerador: muitos produtores de nicho e legados emitem datas que não podem ser interpretadas, e é por isso que um relatório contendo apenas datas ininterpretáveis é rebaixado em vez de tratado como manipulação. Datas futuras podem vir de um relógio de sistema genuinamente errado, e é por isso que o limiar é de um dia inteiro em vez de um segundo. Modificação anterior à criação é o mais difícil de explicar de forma legítima, mas de fato ocorre com ferramentas que copiam a data de criação de um documento de origem enquanto escrevem uma data de modificação nova.
Lógica de severidade
baixa quando todos os achados são unparseable-date. média nos demais casos. O título reflete o achado mais forte: um par com modificação anterior à criação é nomeado explicitamente, relatórios só de datas malformadas dizem isso, e todo o resto reporta inconsistência interna.

producer-fingerprint

baixa média alta
O que detecta
Uma ferramenta cujo propósito é alterar o conteúdo da página aparecendo na cadeia de produção do documento. Quatro campos de origem são verificados — Info /Producer, Info /Creator, pdf:Producer e xmp:CreatorTool — contra uma lista curada de impressões digitais em cinco categorias: editores e conversores online (iLovePDF, Sejda, Smallpdf, PDFescape, PDF24, PDFfiller, DocHub, Soda PDF, PDF2Go, Convertio, Zamzar e outros), editores de PDF de desktop (PDF-XChange, Foxit, Nitro, PDFelement, Wondershare, Acrobat Pro interativo), pós-processadores de OCR (ABBYY, Readiris), editores de imagem e design (Photoshop, Illustrator, GIMP, Inkscape, Canva, Figma, Affinity) e pipelines de re-salvamento de escritório e impressão (LibreOffice, Word, Microsoft Print to PDF, Quartz PDFContext, CutePDF, doPDF, PrimoPDF).
O raciocínio é específico do domínio: extratos, faturas, holerites e certificados são emitidos diretamente por geradores server-side. Um editor de consumo na cadeia significa que o arquivo foi a algum lugar aonde não precisava ir. A correspondência ignora maiúsculas e minúsculas sobre a string normalizada para caracteres alfanuméricos, então pontuação e números de versão não a derrotam.
Um ramo separado trata do caso oposto: nenhuma ferramenta produtora declarada em nenhum dos repositórios.
Evidência retornada
matches (qual campo, o valor bruto, o rótulo da ferramenta correspondida e sua categoria), a lista deduplicada tools, as quatro strings brutas, revisions e fullPageImagePages.
Causas legítimas
Enormes — esta é a família que mais precisa de calibração local. Razões legítimas para uma ferramenta de consumo aparecer: o cliente baixou o extrato e o salvou de novo no Preview ou no Acrobat para combinar páginas; usou uma ferramenta online para mesclar dois extratos em um único upload, ou para comprimir um arquivo abaixo de um limite de upload; imprimiu em PDF a partir do internet banking porque não havia botão de download; o próprio emissor usa LibreOffice ou um driver de impressão no seu pipeline — instituições pequenas genuinamente usam. ABBYY e outras ferramentas de OCR aparecem de forma rotineira e legítima em fluxos de digitalização.
O caso do producer ausente é ainda mais fraco: remover metadados é um passo normal de higiene de privacidade, e alguns geradores minimalistas simplesmente nunca escrevem o campo. Ele remove um fato corroborante em vez de fornecer um.
Lógica de severidade
Nenhuma correspondência, com um producer declarado: silenciosa. baixa quando nenhuma ferramenta produtora é declarada em lugar algum. média para uma correspondência de impressão digital sem corroboração estrutural no mesmo arquivo. alta quando a correspondência é corroborada — mais de uma revisão, ou ao menos uma página cujo fundo é uma imagem rasterizada de página inteira. Esse acoplamento é deliberado: um editor de consumo mais evidência estrutural independente é uma afirmação diferente de um editor de consumo sozinho.

id-inconsistency

info média
O que detecta
Divergência no array /ID do trailer. A especificação PDF atribui aos dois elementos funções diferentes: o primeiro é um identificador permanente definido quando o documento é criado e nunca deve mudar; o segundo é reescrito pelo aplicativo produtor a cada salvamento. A divergência entre eles é o registro legível por máquina do próprio formato de que o arquivo foi salvo de novo após a criação. A Tamperlens lê o /ID do trailer mais recente que carrega um, e reporta o /ID de cada trailer como evidência.
Evidência retornada
idOriginal e idCurrent em hexadecimal, trailerCount e allTrailerIds, para que você veja o identificador evoluir através das revisões.
Causas legítimas
Qualquer coisa que legitimamente salve o documento de novo atualiza o segundo elemento — assinar, preencher formulários, anotar. O sinal diz "salvo de novo", nada mais. Duas fraquezas adicionais que vale conhecer: alguns geradores minimalistas omitem o /ID por completo, e uma ferramenta que reescreve o arquivo inteiro pode definir os dois elementos com o mesmo valor novo, apagando o vestígio completamente. Um par idêntico, portanto, não é evidência de um documento intocado.
Lógica de severidade
Par idêntico: silenciosa. Par divergente: média. Nenhum array /ID: info — sua ausência remove a verificação em vez de indicar uma mudança, então não contribui em nada para a pontuação e é reportada apenas para que você saiba por que a verificação está faltando.

3. Conteúdo da página

font-anomalies

alta
O que detecta
Dois ou mais prefixos de subconjunto diferentes para a mesma fonte base. Fontes incorporadas geralmente são subconjuntos — apenas os glifos de que o documento precisa são incluídos, e o nome recebe um prefixo de seis letras maiúsculas e um sinal de mais, como em ABCDEF+Helvetica. Um gerador escrevendo o documento uma única vez reúne todos os glifos de que precisa para um tipo de letra em um único subconjunto com um único prefixo. Dois prefixos para um mesmo tipo de letra significam que glifos daquele tipo foram incorporados em duas ocasiões distintas.
Este é o clássico vestígio de "mudaram os números", e seu valor está em viver nos recursos da página em vez dos metadados: ele sobrevive à remoção de metadados e sobrevive a uma reescrita completa do arquivo que achata o histórico de revisões. Fontes não subconjuntadas são ignoradas — não há prefixo a comparar.
Evidência retornada
conflicts (nome da fonte base mais a lista ordenada de prefixos encontrados para ela), a lista completa de fontes em subconjunto com os nomes brutos, e totalFonts.
Causas legítimas
Montagem de documentos é a grande causa. Mescle dois PDFs de origens diferentes e um tipo de letra comum a ambos chega com dois subconjuntos — totalmente inocente, e é a razão pela qual um cliente que combinou dois extratos mensais em um único upload vai disparar este sinal. Anotações de assinatura e carimbo frequentemente trazem seus próprios recursos de fonte. Alguns produtores emitem um subconjunto separado por página ou por XObject de formulário, por decisão de projeto. Algumas ferramentas re-subconjuntam ao salvar e deixam o subconjunto antigo órfão no arquivo.
Esta família não tem uma severidade mais baixa para onde recuar, o que a torna a mais importante de todas para ser lida junto com o resto do relatório em vez de isoladamente. Dois subconjuntos em um documento de duas páginas cujo histórico de revisões está limpo e cujo producer é uma biblioteca de servidor é, muito provavelmente, uma mesclagem.
Lógica de severidade
alta sempre que existe ao menos um conflito; caso contrário, silenciosa. Não há gradação — a observação é binária, e sua força vem de ser difícil de produzir acidentalmente em um gerador de passe único.

hybrid-page

info média
O que detecta
Uma página cujo fundo é uma única imagem rasterizada cobrindo essencialmente todo o MediaBox, com texto desenhado por cima. A distinção que carrega o sinal é o modo de renderização de texto. Uma camada de OCR sobre uma digitalização é desenhada no modo 3 — invisível — para que a página continue pesquisável enquanto a digitalização é o que se vê. Glifos vetoriais visíveis sobre uma digitalização de página inteira significam que caracteres foram colocados na página depois que a imagem foi feita — que é como valores em um documento digitalizado são alterados.
A detecção exige percorrer o stream de conteúdo de cada página, contar os operadores de exibição de texto e separá-los entre visíveis e invisíveis. Um teto de volume separa edições de design: acima de 25 operadores de exibição de texto visíveis, a página é tratada como um layout projetado — uma página de revista, pôster ou folheto com imagem de fundo sangrada — e não é contada. O limiar foi calibrado contra páginas reais de publicações com imagem sangrada, cujas contagens de operadores visíveis começam na casa dos trinta e poucos para capas e chegam aos milhares em páginas de miolo. Uma edição por sobreposição em um extrato carrega uma contagem de um dígito.
Evidência retornada
Por página afetada: número da página, número do objeto, largura e altura do MediaBox, e as contagens total, visível e invisível de operadores de texto. Mais plausibleOcrLayer, o limiar maxOverlayTextOps em vigor e designedLayoutPagesIgnored — as páginas excluídas pelo teto, para que a exclusão seja auditável em vez de silenciosa.
Causas legítimas
Documentos digitalizados com camadas de OCR são o caso normal, e é por isso que essa forma é reportada como info e não contribui em nada para a pontuação. Texto visível legítimo sobre uma imagem de página inteira de fato ocorre: um modelo de formulário distribuído como digitalização e depois preenchido eletronicamente, uma data ou número de página carimbados por um sistema de gestão de documentos, um número Bates, uma marca-d'água "CÓPIA"/"DUPLICATA" aplicada pelo emissor, uma imagem de assinatura aplicada eletronicamente com um nome digitado ao lado.
Inversamente, a ausência deste sinal diz pouco: uma edição feita dentro da própria imagem rasterizada, sem camada de texto adicionada, não deixa nada para esta família ver. Forense de imagem em nível de pixel é uma disciplina diferente e não faz parte do motor atual.
Lógica de severidade
média quando ao menos uma página tem entre 1 e 25 operadores de exibição de texto visíveis sobre uma imagem de página inteira. info quando páginas com imagem de página inteira carregam texto, mas todo ele é invisível — a forma padrão do OCR, reportada como contexto. Silenciosa quando nenhuma página tem, ao mesmo tempo, uma imagem de página inteira e algum texto.

active-content

média
O que detecta
JavaScript incorporado, ações automáticas (/OpenAction), ações /Launch e arquivos anexados (/EmbeddedFiles). Documentos estáticos gerados por máquina não carregam nenhum desses, então a presença deles significa que o arquivo foi criado ou recriado em uma ferramenta que adiciona comportamento interativo. Os mesmos quatro construtos são também o mecanismo padrão de entrega de PDFs maliciosos, então esta família cumpre papel duplo como sinal de fraude documental e sinal de segurança.
A detecção é restrita a genuínas posições de chave de dicionário em objetos interpretados, nunca a busca em bytes brutos. Um token /JS que apenas aparece dentro do stream de conteúdo de uma página é conteúdo de página — texto que por acaso se parece com uma ação — e não pode disparar esta família. Streams de conteúdo não são varridos em busca desses marcadores. A Tamperlens sinaliza o que encontra e nunca executa, avalia, extrai ou abre nada disso.
/AcroForm sozinho não dispara esta família. Um formulário não é conteúdo ativo; ele é reportado na evidência apenas como contexto.
Evidência retornada
Um booleano por construto (javaScript, openAction, launch, embeddedFiles, mais acroForm como contexto), uma lista legível found e até 50 containers informando a flag, a chave de dicionário, o número do objeto e o caminho em que cada ocorrência foi encontrada. Também scanScope: "dictionary-keys" e contentStreamsScanned: false, para que a fronteira de detecção esteja declarada no relatório em vez de presumida.
Causas legítimas
Formulários interativos com scripts de validação ou cálculo de campos são inteiramente normais, e muitos formulários fiscais, governamentais e de seguros estão cheios deles. /OpenAction é comumente usado para algo tão inócuo quanto "abrir com zoom de 100%" ou "ir para a página 1". PDFs de portfólio e padrões de fatura eletrônica como ZUGFeRD e Factur-X incorporam anexos por decisão de projeto — uma fatura XML legítima dentro de um PDF vai disparar embeddedFiles toda vez.
Em um documento criptografado, as chaves de dicionário continuam legíveis, mas uma ação carregada dentro de um object stream criptografado não pode ser examinada, então a lista pode estar incompleta — o detalhe do sinal diz isso explicitamente quando é o caso.
Lógica de severidade
média sempre que qualquer um dos quatro construtos está presente; caso contrário, silenciosa. Não há escalada, porque a relevância do conteúdo ativo para fraude depende quase inteiramente do tipo de documento — um contexto que só você tem.

4. Assinaturas e estrutura

signature-coverage

info alta
O que detecta
Se o /ByteRange de 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 /ByteRange bruto, coveredEnd, bytesAfterCoverage, coversWholeFile e o tamanho total do arquivo. Mais uncoveredCount e 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 /ByteRange interpretado 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.

structure-warnings

baixa média
O que detecta
Tudo o que o parser não conseguiu reconciliar entre a contabilidade interna do arquivo e seus bytes reais: entradas de referência cruzada apontando para deslocamentos que não contêm o objeto que afirmam conter, seções de referências cruzadas ilegíveis ou reconstruídas, subseções e entradas malformadas, laços na cadeia de referências cruzadas, comprimentos de stream que discordam do stream, referências pendentes e bytes sobrando depois do %%EOF final.
Um PDF corretamente escrito é internamente autoconsistente. Irregularidades significam ou um produtor fora de conformidade, ou manipulação posterior dos bytes — e elas também delimitam quanto do documento o resto do relatório pôde examinar, e é por isso que são reportadas mesmo quando parecem sem graça.
Esta família também carrega a divulgação de documento criptografado, descrita por completo na próxima seção.
Evidência retornada
warningCount, a lista codes deduplicada e ordenada, até 25 avisos individuais com mensagens, xrefConflicts, trailingGarbageBytes, revisionChainBroken e parseTruncated.
Causas legítimas
Produtores fora de conformidade estão em toda parte. Muitos geradores de longa vida e inteiramente honestos emitem deslocamentos de referência cruzada levemente errados, porque todo leitor de PDF do mundo real os conserta em silêncio e ninguém nunca percebeu. Arquivos que passaram por gateways de e-mail, antivírus ou caminhos de transferência ingênuos podem adquirir bytes sobrando no final. Um download truncado produz uma versão espetacular deste sinal e não significa nada sobre a autenticidade do documento.
Lógica de severidade
Silenciosa quando não há avisos e o documento não está criptografado. média quando há ao menos um conflito de referência cruzada, ou ao menos um aviso cujo código está no conjunto sério — xref-conflict, bad-offset, unparseable-xref, bad-xref-stream, bad-xref-subsection, bad-xref-entry, xref-chain-loop, xref-reconstructed, stream-length-mismatch — ou seja, a contabilidade do arquivo contradiz seus bytes em vez de estar meramente incompleta. baixa nos demais casos.

Documentos criptografados: o que o relatório diz que não fez

Quando o trailer referencia um dicionário /Encrypt, as strings e os streams do arquivo são texto cifrado. Valores de metadados, nomes de fontes incorporadas e streams de conteúdo de página não podem ser lidos sem a senha, que a Tamperlens não possui e nunca pede.

O comportamento ingênuo seria rodar todas as famílias de sinais mesmo assim e reportar o que disparasse sobre o ruído. Em vez disso, as cinco famílias dependentes de conteúdo não rodam de forma alguma e a omissão é divulgada como parte de primeira classe do relatório:

  • metadata-mismatch
  • date-anomalies
  • producer-fingerprint
  • font-anomalies
  • hybrid-page

A divulgação chega como o sinal structure-warnings, com o título "Documento criptografado — conteúdo não analisado", carregando evidence.code: "encrypted-content-not-analysed", a lista explícita suppressedFamilies, contentAnalysed: false e structuralAnalysisRan: true. Ela viaja em structure-warnings em vez de chegar como sinal próprio por causa da invariante de um sinal por família.

A análise estrutural não é afetada e de fato roda. A contagem de revisões, o par /ID do trailer, os intervalos de bytes das assinaturas e a consistência das referências cruzadas são todos legíveis sem a senha, assim como a detecção de dicionários de ação — chaves de dicionário também não são criptografadas. Metadados que por acaso sejam legíveis como texto simples ainda são reportados: um produtor pode deixar o pacote XMP em claro via /EncryptMetadata false, e um teste de plausibilidade de texto deixa isso passar enquanto descarta campos cujos bytes não são texto legível. Quaisquer campos descartados dessa forma são nomeados em metadataFieldsSuppressed.

Leia isto com atenção ao triar um arquivo criptografado. A ausência de um sinal de nível de conteúdo no relatório de um documento criptografado não diz absolutamente nada sobre aquele documento. Essas verificações não rodaram. Trate o relatório como estritamente estrutural, e não como um atestado de idoneidade — e note que muitos emissores protegem extratos com senha por rotina, então a criptografia não é, por si só, um sinal.

Como os sinais viram uma pontuação

summary.riskScore é uma agregação ponderada de 0 a 100, não uma probabilidade e não uma confiança. As regras são curtas o bastante para serem enunciadas por completo — e esse é o ponto: você deve conseguir reconstruir o número a partir da lista de sinais.

  • Pesos. high 70, medium 25, low 10, info 0.
  • Pisos. Um sinal high força a pontuação para pelo menos 70; um medium força pelo menos 30.
  • Retornos decrescentes. Os dois primeiros sinais de uma dada severidade contribuem com seu peso integral; a partir daí, cada sinal adicional da mesma severidade contribui com uma fração que decai acentuadamente. Um acúmulo de achados fracos converge em vez de somar indefinidamente.
  • A faixa alta é reservada. Sem nenhum sinal high presente, a pontuação é limitada a 69, diga o que disser a aritmética. Assim, riskBand === "high" é exatamente equivalente a "pelo menos um achado que, por si só, estabelece uma mudança".
  • Faixas. Abaixo de 30, low; de 30 a 69, elevated; 70 ou mais, high.
  • signalCount conta os sinais acima de info. Um achado informativo é visível no relatório, mas invisível para a contagem e para a pontuação.

Os pesos são versionados por engineVersion: alterá-los é uma mudança de versão, então uma pontuação que você registrou no trimestre passado continua significando o que significava. O motor é determinístico — bytes idênticos produzem um relatório idêntico, exceto pelo id de cada chamada — o que significa que você pode fixar fixtures e testar por regressão os seus próprios limiares contra nós.

Como usar isto com honestidade

Três hábitos que separam uma etapa de triagem útil de um gerador de clientes furiosos:

  1. Estabeleça a baseline antes de definir limiares. Rode pelo motor documentos que você acredita serem genuínos, agrupados por emissor, e observe quais sinais disparam normalmente na sua população. Strings de producer e hábitos de revisão variam enormemente entre instituições.
  2. Reporte o fato, não a inferência. "Este arquivo contém duas revisões e nomeia um editor de PDF online" é defensável e específico. "Nosso sistema marcou este documento como fraudulento" não é nenhum dos dois — e é a frase que acaba em uma reclamação.
  3. Correlacione. Um único sinal de severidade média é uma pergunta. Um editor de consumo mais uma revisão que sobrescreve conteúdo mais dois subconjuntos de um mesmo tipo de letra é uma história coerente — e a história é aquilo sobre o que um revisor humano pode agir.

Veja o relatório do seu próprio arquivo

O verificador gratuito roda todas as famílias descritas nesta página e exibe a evidência completa — sem conta, nada é armazenado. Para rodá-lo no seu próprio pipeline, veja o guia rápido da API ou crie uma conta para uma chave com 25 documentos grátis por mês.

A Tamperlens reporta sinais de risco, não veredictos de autenticidade. Sinais podem ter causas legítimas; combine-os com a sua própria lógica de decisão.

Leitura relacionada