Como saber se um PDF foi gerado por IA

Quais verificações respondem simplesmente sim ou não, quais devolvem uma probabilidade, e o que cada uma consegue, e não consegue, estabelecer.

Um holerite chega no WhatsApp da análise e alguém pergunta se foi feito por IA. São duas perguntas: se a declaração assinada que o arquivo faz sobre a própria origem ainda fecha, sim ou não, e uma nota, que tem taxa de erro.

Quase toda afirmação confiante sobre “detectar IA em documento” move de mansinho uma resposta do segundo tipo para o primeiro. Uma verificação determinística tem dois resultados e nenhuma margem; uma probabilística devolve um número, e um número só serve depois que alguém mediu a taxa de falso positivo dele. Só uma pode ser dita como fato.

Tudo acima da última caixa serve para decidir com que urgência fazer a última caixa.
o arquivo na sua mão 1 · DETERMINÍSTICA O manifesto fecha? O dígito verificador bate? Existe segunda revisão? O que a assinatura cobre? Sim ou não. Sem limiar para calibrar. 2 · PROBABILÍSTICA “Esta página parece feita por IA?” AUC 0,563 em documento forjado por IA (0,98 dentro da distribuição · 0,50 é acaso) Só para ordenar fila. Nunca como prova. vá ao emissor

1. A camada determinística: procedência C2PA

C2PA é a única verificação desta página sem limiar para calibrar. É um manifesto embutido no arquivo e assinado por quem o produziu, cuja ligação forte é um hash SHA-256 sobre os bytes: recalcule, compare, e fecha ou não fecha. A especificação e a implementação de referência são públicas.

O que um manifesto válido prova, e a lista é curta:

  • O arquivo passou por quem detém aquela chave, no momento registrado.
  • Os bytes não mudaram desde então. Qualquer alteração quebra o hash.

O que ele nunca prova:

  • Autoria. Quem assina é o último processo que tocou o arquivo, não quem escreveu o conteúdo.
  • Veracidade. Um manifesto válido numa nota diz que aquele arquivo é byte a byte o arquivo assinado. Não diz que a operação existiu, que o valor é devido ou que o pagamento caiu.
  • Confiança na cadeia. Nossos arquivos de teste autoassinados voltam com validation_state: Valid e signingCredential.untrusted ao mesmo tempo: a matemática fecha, a cadeia é desconhecida. Ler um campo e reportar o outro é de onde saem as frases erradas.

E a ausência de manifesto significa: nada. Medimos cinco regravações comuns de uma imagem assinada por ferramentas que não conhecem C2PA: recompressão JPEG em qualidade 70, regravação de PNG, conversão para JPEG, redimensionamento e um print de tela. As cinco destruíram a credencial por completo. Remover procedência não é ataque, é efeito colateral de salvar um arquivo, e um documento que passou pelo WhatsApp já passou por isso.

Quando o manifesto falha, diga o que falhou

A frase correta é “este arquivo foi modificado depois de assinado”, ou “a própria declaração assinada não corresponde mais”. Nossos arquivos de teste produzem os dois códigos: assertion.dataHash.mismatch quando o conteúdo mudou sob uma declaração intacta, claimSignature.mismatch quando os bytes da declaração é que mudaram. Nenhum dos dois é “adulterado”, nenhum é constatação de fraude.

Um manifesto quebra em dois lugares diferentes, e cada um é uma frase diferente.
a declaração quem assinou, quando, com que ferramenta um SHA-256 dos bytes do ativo a página, a figura, o arquivo em si SHA-256 mude a declaração mude os bytes claimSignature.mismatch a declaração assinada já não confere assertion.dataHash.mismatch o conteúdo mudou sob uma declaração intacta Os dois se leem como: modificado depois de assinado. signingCredential.untrusted Propriedade da cadeia do certificado, ortogonal às duas. Valid e untrusted chegam juntos.

Fabricante de imagem emite; para documento, ninguém emite

A Anthropic anunciou em 11 de agosto de 2026 que o Claude assina .svg, .png e .jpg gerados, e diz no mesmo documento que esses metadados “podem desaparecer em conversões de formato, prints de tela ou regravações”. A OpenAI publica Content Credentials nos modelos de imagem desde 2024 e agora combina isso com SynthID; o Google embute SynthID na geração. Até agosto de 2026 nenhum grande provedor anexa manifesto a um PDF, DOCX ou planilha gerados.

A implementação de referência lê um manifesto C2PA de dentro de um PDF e não consegue escrever um: o único formato da tabela com essa assimetria.
c2pa-rs LÊ c2pa-rs ESCREVE QUEM ASSINA ISSO HOJE JPEG sim sim PNG sim sim SVG sim sim saída de imagem de OpenAI, Anthropic, Google PDF sim não ninguém, para documento gerado

Tabela de suporte em contentauth/c2pa-rs, lida em 14 de agosto de 2026. Só leitura significa que o PDF consegue carregar uma credencial que alguém colocou nele, e o ferramental padrão não coloca.

Ou seja: procedência em documento é uma verificação que eleva confiança. A presença é sinal positivo forte; a ausência é o caso esmagadoramente normal.

2. O que medimos: a assinatura dentro do PDF

Um PDF é um contêiner, e as imagens embutidas nele são arquivos separados, com superfície de procedência própria. Ninguém mediu se uma imagem assinada mantém a credencial depois de entrar em um documento. Assinamos uma, passamos por todos os geradores de PDF de um laptop, extraímos os fluxos de volta e revalidamos cada um.

  • 6/6caminhos de JPEG preservaram a credencial, byte a byte
  • 0/2caminhos de PNG preservaram
  • 9/9PDFs respondem “No claim found”
Uma assinatura pode sobreviver à entrada no PDF enquanto a ferramenta padrão de ler assinaturas chama esse PDF de não assinado.
JPG assinado manifesto válido Chrome · img2pdf Ghostscript · qpdf PDF extrair o stream → Valid · 6 de 6 PNG assinado manifesto válido img2pdf · Chrome PDF raster recomprimido → perdida · 0 de 2 O PONTO CEGO $ c2patool chrome-jpg.pdf Error: No claim found Os nove PDFs respondem isso, inclusive os seis cujo JPEG embutido carrega um manifesto válido. O leitor olha o nível do documento; a credencial está um abaixo.
Caminho até o PDF Formato de origem Resultado
img2pdf JPEG Fluxo byte a byte idêntico, manifesto ainda válido
Chrome imprimir-para-PDF (tamanho natural e reduzido) JPEG Fluxo byte a byte idêntico, manifesto ainda válido
Ghostscript (direto e como reprocessamento) JPEG Fluxo byte a byte idêntico, manifesto ainda válido
qpdf --linearize JPEG Fluxo byte a byte idêntico, manifesto ainda válido
img2pdf, Chrome imprimir-para-PDF PNG Recomprimido para raster cru: credencial perdida
Chrome imprimir-para-PDF SVG Desenhado como vetor, sem fluxo de imagem: nada para carregar

Quem decide é o formato, não o gerador: um PDF não tem contêiner de PNG, então os pixels são reemitidos e o pedaço que guardava a credencial fica sem lugar. Dos três formatos que a Anthropic assina, exatamente um chega ao documento. O método completo e as versões estão no relato (em inglês): does a C2PA signature survive a PDF?

O que a Tamperlens faz com C2PA hoje, sem rodeio. O motor de imagem detecta a presença de um contêiner de Content Credentials em imagem avulsa (a caixa JUMBF no JPEG, o pedaço caBX no PNG), e reporta isso como sinal informativo que diz, no próprio relatório, “presença detectada, manifesto não interpretado”. Ele não decodifica o manifesto e não verifica a cadeia de assinatura. Não lê C2PA dentro de PDF; isso é trabalho proposto, não recurso entregue. Tudo nas duas seções acima é o padrão, ou a nossa própria medição com a ferramenta oficial.

3. Sinais de estrutura que o verificador lê hoje

São leituras determinísticas de fatos cujo significado é probabilístico. Se a string está no arquivo não é questão de opinião; o que ela sugere sobre o documento quase sempre é. Manter as duas coisas separadas é a maior parte da disciplina.

Uma reescrita completa regera todos os sinais da linha de cima. A aritmética da faixa de baixo é a única camada que sobrevive a ela.
ONDE MORA CADA SINAL %PDF-1.x versão objetos do corpo páginas, fontes, imagens, streams xref offsets dos objetos trailer /Info /ID metadados do documento era do producer subsets de fonte contagem de revisões Info contra XMP edições no conteúdo o par /ID UMA REESCRITA COMPLETA APAGA TUDO ISSO Abra e salve de novo com quase qualquer biblioteca de PDF e todo sinal acima é regerado como se o arquivo fosse novo. E ISTO É O QUE SOBRA Cadeia de saldos, totais, dígitos verificadores. Aritmética é propriedade das declarações impressas na página, não do contêiner.
Sinal O que é lido, exatamente Por que não é veredicto
Producer e creator O dicionário Info e o XMP nomeiam o software que gravou os bytes: ReportLab PDF Library, Skia/PDF m### para Chrome headless, string de versão do LibreOffice, nomes simples para WeasyPrint e wkhtmltopdf São campos de texto puro. Quem sabe escrever um PDF escreve Adobe PDF Library ali: leia como ponto fora da curva (consulta de producer)
Metadados de gerador em imagens embutidas O valor IPTC trainedAlgorithmicMedia no XMP; um bloco parameters do AUTOMATIC1111; um grafo prompt ou workflow do ComfyUI. Arquivo com bloco de parâmetros de geração não foi fotografado É a única família de imagem que chega a severidade alta, mas só no sentido da presença. Ausência continua não sendo nada
Atualizações incrementais e revisões O PDF cresce por acréscimo, então um arquivo pode conter as próprias versões anteriores. Contar isso é exato Assinar, preencher formulário e anotar são causas de rotina (incremental vs reescrita completa)
Cobertura da assinatura O /ByteRange nomeia os bytes protegidos; comparar o último byte coberto com o último byte do arquivo é aritmética (o que o validador do ITI verifica) Responde só se algo foi anexado depois da assinatura: não se o que foi anexado era mal-intencionado

Um documento gerado inteiro: uma revisão só, metadados coerentes, um producer, nunca aberto em editor. Passa por todas essas verificações, e essa é justamente a forma de um documento escrito por máquina. Estrutura pega edição. Para o arquivo que nasceu pronto, o peso passa para a próxima seção.

4. Aritmética: o sinal de conteúdo que sobrevive

O indício mais confiável em documento financeiro gerado por modelo não é visual. No estudo GPT4o-Receipt (1.235 comprovantes gerados por modelo contra autênticos), os humanos viram artefatos visuais melhor que as máquinas e ainda assim acertaram menos se o documento era de IA. O sinal que funcionou foi o que ninguém enxerga: as contas não fechavam.

Um saldo corrente é uma cadeia: cada linha restringe a seguinte, então mexer em um lançamento quebra a coluna a menos que o falsificador refaça todo o encadeamento.
lançamento valor saldo saldo anterior 1.000,00 PIX recebido +250,00 1.250,00 pagamento −90,00 1.110,00 pagamento −110,00 1.000,00 Mexa em um valor e todo saldo abaixo contradiz o próprio documento, sem precisar de cópia de referência. Mesma forma no dígito verificador: linha digitável, CRC do PIX, chave da NF-e, CPF, CNPJ.

Repare na assimetria, que é a metade honesta. Dígito verificador que falha é evidência; dígito que passa não é. Qualquer gerador que implemente a regra corretamente produz números que passam. E o nosso motor só reporta quebra de saldo depois que a coluna prova que é um saldo, porque a maioria das colunas numéricas de documento real não é saldo nenhum.

Na prática brasileira é aqui que o holerite se decide: proventos menos descontos tem que dar o líquido, e o valor por extenso tem que combinar com o numérico. Nada disso depende de o PDF ter sido feito por IA, por Excel ou por um sistema de folha. Veja também o verificador de holerite e fraude em extratos bancários.

5. A camada probabilística e os números reais

Detectores treinados em adulteração feita à mão caem para perto do acaso quando a adulteração vem de um modelo de difusão. Quatro trabalhos independentes de 2026 mediram isso. O acaso é uma AUC de 0,50.

Todo detector que marca 0,96-0,98 em adulteração feita à mão cai para algo entre 0,50 e 0,60 em adulteração feita por difusão.
AUC · 0,50 É ACASO FAIXA DO ACASO humanos, em documento com inpainting 0.501 modelo geral, juiz zero-shot 0.509 o modelo gerador julgando a si mesmo 0.532 DocTamper, documento forjado por IA 0.563 0.98 dentro da distribuição DocTamper, inpainting por difusão 0.585 TruFor, inpainting por difusão 0.599 0.962 adulteração tradicional 0,50 0,60 0,70 0,80 0,90 1,00 acaso

Fontes: When the Forger Is the Judge (humanos 0,501, autojulgamento 0,532, DocTamper 0,585, TruFor 0,599 contra 0,962) e AIForge-Doc (juiz zero-shot 0,509, DocTamper 0,563 contra 0,98), ambos de 2026.

Estudo O que foi medido Resultado
AIForge-Doc Documentos financeiros e formulários forjados, nove idiomas DocTamper com AUC 0,563 em conteúdo forjado por IA, contra 0,98 dentro da distribuição de treino; um modelo de uso geral como juiz, 0,509
When the Forger Is the Judge Preenchimento por difusão dentro de documentos, com máscaras de pixel TruFor 0,599 (contra 0,962 em adulteração tradicional), DocTamper 0,585, humanos 0,501 e o próprio modelo gerador julgando as forjas que fez, 0,532
DOCFORGE-BENCH 14 métodos de detecção em 8 conjuntos de dados, sem ajuste AUC de pixel razoável, mas F1 de pixel perto de zero; o veredicto dos próprios autores é que nenhum método avaliado funciona de forma confiável fora da caixa
GPT4o-Receipt Humanos e modelos sobre comprovantes gerados Humanos abaixo dos juízes automáticos no geral; o sinal confiável dominante foi a aritmética, não a aparência

Por que um classificador da página inteira não enxerga um valor trocado

O DOCFORGE-BENCH mediu a região adulterada em 0,27% a 4,17% dos pixels. Um modelo que pontua a página toda dilui uma anomalia de um por cento em noventa e nove por cento de documento intacto: daí manter métrica de ranqueamento razoável e quase não localizar nada.

As entradas também se mexem: regravar em outra qualidade, imprimir e digitalizar, ou uma tabela de quantização JPEG fora do comum já afastam o arquivo da distribuição em que esses detectores foram treinados.

Portanto: a Tamperlens não entrega nota de “isto é IA” e não publica taxa de detecção. Não existe benchmark independente de detectores de fraude documental que permita a ninguém sustentar uma comparação de acurácia, e qualquer porcentagem sem tamanho de amostra, processo de rotulagem e taxa de falso positivo é hipótese vestida de número. O que publicamos é a nossa própria taxa de erro medida.

O que isso não consegue dizer

  • Ausência de procedência não é prova de autoria humana. Quase nada escreve manifesto dentro de PDF, e toda regravação comum apaga os que existem, 5 de 5 na nossa medição. Arquivo silencioso é o caso normal, não atestado de saúde.
  • Manifesto válido não torna o conteúdo verdadeiro. Ele amarra bytes a um signatário, não um salário a um holerite.
  • Válido não é confiável. Uma cadeia autoassinada fecha matematicamente sem provar nada sobre quem assinou. As duas leituras precisam aparecer, ou a frase está errada.
  • Manifesto quebrado quer dizer “modificado depois de assinado”. Não é “adulterado” e não é constatação de fraude: regravar, converter ou otimizar quebram a assinatura exatamente como uma edição intencional.
  • Gerado por IA não é sinônimo de fraudulento. O fornecedor que diagrama a nota com um modelo e o contador que regera um extrato num PDF mais limpo produzem documentos feitos por máquina e inteiramente honestos. O que decide um caso é se as afirmações são verdadeiras e se o arquivo mudou depois de emitido.
  • Não existe negativa confiante. Nenhuma verificação estrutural ou estatística estabelece que um documento não foi gerado por modelo. A camada determinística só confirma positivos.
  • Nada disso substitui o emissor. O banco confirma o pagamento, o empregador confirma o holerite, a SEFAZ confirma a nota. Análise de arquivo é a segunda opinião, e é sempre afirmação sobre um arquivo, nunca sobre uma pessoa.

Uma ordem de trabalho

Todo degrau acima do último só decide com que velocidade você chega nele.
1 · Pergunte à camada determinística Existe manifesto, no documento, ou em alguma imagem embutida? Ele fecha, e contra qual cadeia? 2 · Leia a história do próprio arquivo Producer e XMP, contagem de revisões, o que uma revisão posterior substituiu, o que a assinatura cobre de fato. 3 · Confira os números entre si Cadeia de saldos, totais, dígitos verificadores: a camada que ainda funciona num documento gerado inteiro. 4 · Nota probabilística, só como desempate Nunca como base de decisão, e só com taxa de falso positivo medida na sua própria entrada. 5 · Vá até o emissor Para qualquer coisa que importe. Tudo acima disso é triagem.
  1. Pergunte primeiro à camada determinística. Existe manifesto, no documento ou em alguma imagem embutida? Ele fecha, e contra qual cadeia?
  2. Leia o histórico do próprio arquivo. Producer e XMP, contagem de revisões, o que uma revisão posterior substituiu, o que a assinatura cobre.
  3. Confira os números contra eles mesmos. Cadeias de saldo, totais, dígitos verificadores: a camada que ainda funciona no documento gerado inteiro e nunca editado.
  4. Trate qualquer nota probabilística como desempate, nunca como base da decisão, e só com taxa de falso positivo medida na sua própria entrada.
  5. Vá ao emissor no que for relevante.

Automatizando

A Tamperlens interpreta os bytes crus em vez de se apoiar numa biblioteca de PDF de alto nível: carregue e salve o arquivo com quase qualquer uma delas e o histórico de revisões some. Dezoito famílias de sinais rodam em todo documento, cada uma devolvendo severidade, explicação em linguagem simples e evidência legível por máquina, todas documentadas com suas causas legítimas no guia das famílias de sinais.

Os documentos são interpretados em memória e nunca gravados em disco. O motor usa só CPU, não chama serviço de terceiros e é determinístico.

Rode a camada determinística em um documento

Abra a amostra “Assinada e depois modificada”: um laudo pré-calculado sobre um PDF cuja assinatura já não cobre o que está embaixo dela, que é o passo 1 da ordem acima com a evidência junto. Sem conta, sem upload, sem cota. Seu próprio arquivo entra no mesmo verificador: o arquivo é enviado por HTTPS, processado em memória e nunca gravado em disco, num servidor em Helsinque, na Finlândia (privacidade).

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

Leitura relacionada