Esta é a página de referência do motor de análise. Dezenove famílias de sinais rodam em todo documento, e cada uma é descrita sob os mesmos quatro títulos: o que detecta, a evidência que devolve, suas causas legítimas e sua lógica de severidade. Elas estão agrupadas nas quatro páginas abaixo, por qual parte do arquivo leem. 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
signalCounte não contribui em nada para a pontuação.
A invariante corta nos dois sentidos: uma família ausente do relatório não
disparou, mas uma família presente não diz quantas vezes o achado dela ocorre
no arquivo. Isso está dentro do evidence, não na contagem.
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.
Uma família é exceção, e ela é nomeada em vez de escondida. A
redaction-exposure reporta uma caixa preenchida desenhada sobre o
texto e uma imagem desenhada sobre o texto como dois sinais distintos, porque
não são o mesmo achado: a caixa é conclusiva e pontua high, a imagem
nunca foi demonstrada como tarja falha em 1.727 documentos publicados e pontua
info. Juntar as duas era o comportamento anterior e estava errado:
anunciava quatro linhas expostas em severidade alta quando três delas eram um
timbre. Todas as outras famílias respeitam a invariante, e um teste prende os
três motores a ela em cada fixture do repositório.
A divisão é o que explica os silêncios: uma reescrita completa do arquivo apaga a papelada e deixa a tinta e os valores intactos, então as duas metades de baixo continuam falando quando as de cima emudecem.
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-mismatchdate-anomaliesproducer-fingerprintfont-anomalieshybrid-page
Muitos emissores protegem extratos com senha por rotina, então a criptografia não é, por si só, um sinal, e a ausência de um achado de conteúdo aqui não diz nada sobre o documento.
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.
high70,medium25,low10,info0. -
Pisos. Um sinal
highforça a pontuação para pelo menos 70; ummediumforç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
highpresente, 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. -
signalCountconta os sinais acima deinfo. Um achado informativo é visível no relatório, mas invisível para a contagem e para a pontuação.
high é reservada: sem um achado que sozinho estabeleça uma
mudança, a aritmética não passa de 69.
É por isso que riskBand === "high" significa exatamente uma coisa:
existe pelo menos um achado que, sozinho, estabelece uma mudança. Nenhum
acúmulo de sinais fracos chega lá.
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:
- 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.
- 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.
- 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.
A frase que sai daqui também muda: “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.
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
- Forense de metadados de PDF Onde cada peça de evidência vive fisicamente no formato de arquivo.
- Como saber se um PDF foi editado As mesmas verificações feitas à mão, com comandos de shell.
- Sinais de fraude em extratos bancários O guia de campo aplicado a fluxos de crédito, BNPL, proptech e onboarding.
- Revisão incremental não é fraude 250 contratos assinados do PNCP: o documento autêntico tem a forma que um detector ingênuo chama de adulteração.
- Medindo minha própria taxa de falso positivo 1.728 documentos que não escolhi, uma taxa de 68,5% acima de baixo, e as quatro famílias que isso recalibrou.
- Referência da API Autenticação, as duas formas de requisição, o JSON do relatório anotado, cotas.