Pular para o conteúdo
getnextpdf.com

Enterprise edição

Perícia Forense

O NextPDF Enterprise Forensics lê o histórico de atualizações incrementais de um PDF e produz um relatório estruturado e somente leitura de revisões, eventos classificados e mudanças por objeto. Ele dá suporte a fluxos de trabalho de análise forense. Ele não é um selo à prova de adulteração e não afirma que um documento é autêntico ou inalterado.

Este recurso é entregue no NextPDF Enterprise (nextpdf/enterprise) e é ativado com um envelope de licença de nível Enterprise. Uma implantação sem esse direito não carrega as classes do recurso. Compare as edições e obtenha uma licença.

Terminal window
composer require nextpdf/enterprise:^3

Um PDF pode ser atualizado anexando mudanças ao final do arquivo em vez de reescrevê-lo. Cada atualização adiciona uma nova seção de referência cruzada e um novo trailer, e os bytes originais são deixados no lugar — ISO 32000-2:2020 §7.5.6. Quando um objeto é alterado, a atualização anexa uma nova cópia e a seção de referência cruzada da atualização registra um byte offset que substitui o offset mais antigo; um leitor resolve a cópia mais recente — ISO 32000-2:2020 §7.5.6. A estrutura inicial do arquivo pode ser modificada por atualizações posteriores — ISO 32000-2:2020 §7.5.4. A seção de referência cruzada de uma atualização lista apenas os objetos que foram adicionados, modificados ou excluídos nessa atualização — ISO 32000-2:2020 §7.5.5.

O analisador lê essa estrutura em camadas. Ele analisa a tabela de referência cruzada de cada revisão, deriva os limites de bytes da revisão e compara as entradas de cada revisão com a próxima revisão mais antiga para classificar cada objeto como adicionado, modificado ou excluído. Em seguida, ele agrupa as mudanças de objeto em eventos de nível mais alto: uma assinatura foi adicionada, o catálogo do documento foi atualizado, um dicionário de criptografia apareceu ou um conjunto de objetos foi adicionado, modificado ou removido. A saída é um objeto de relatório que carrega uma contagem de revisões, o tamanho total, uma lista de resumo por revisão, uma linha do tempo de eventos classificados e a lista de mudanças por objeto.

O analisador é somente leitura. Ele detecta a existência de uma revisão de assinatura a partir de marcadores estruturais; ele não valida nenhuma assinatura, não recomputa nenhum resumo e não verifica nenhum certificado. A validação de assinatura é um recurso separado do Core. Um relatório produzido é uma descrição estrutural do histórico de atualizações como analisado; ele não é uma determinação de que um documento é autêntico, de que uma mudança foi não autorizada ou de que toda modificação foi detectada. Trate o relatório como detecção de evidência de adulteração conforme testada em relação à visão do parser sobre a cadeia de revisões, não como uma garantia forense ou uma atestação admissível em juízo.

O analisador para deliberadamente na estrutura. Ele relata o que a cadeia de revisões contém e nunca afirma que uma mudança foi autorizada ou que uma assinatura é válida. Presença estrutural e validade criptográfica são declarações diferentes; mesclá-las permitiria que um chamador confundisse evidência de adulteração com uma garantia. Portanto, a validade de assinatura permanece com a única superfície de assinatura do Core, com a qual o Forensics compõe em vez de duplicar. O relatório é metadado estrutural serializável em JSON, então um SIEM ingere o histórico de edições sem tocar no conteúdo do documento. Contexto de projeto: Atualizações incrementais e por que importam.

TipoCategoriaPapelEstabilidadeDesde
ForensicAnalyzerclassAnalisa um PDF e retorna um relatório forense (analyze estático)stable1.10.0
ForensicReportclassO resultado da análise; JsonSerializable para exportação a SIEMstable1.10.0
RevisionSummaryclassFatos por revisão: contagem de objetos, tamanho, limites de bytes, sinalizadores de presençastable1.10.0
ForensicEventclassUm evento classificado com uma lista de objetos afetadosstable1.10.0
ForensicEventTypeenumCategorias de evento (assinatura adicionada, catálogo atualizado, objetos adicionados e outras)stable1.10.0
ObjectChangeclassO registro de mudança de um objeto entre duas revisõesstable1.10.0
ObjectChangeTypeenumAdded, Modified ou Deletedstable1.10.0

ForensicReport expõe hasIncrementalUpdates(), hasAnySignature(), getEventsByType(), getChangesForRevision() e jsonSerialize(). O sinalizador hasSignature em um resumo de revisão é um sinal de presença estrutural, não um resultado de validade.

Analyze the revision history of a PDF
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Enterprise\Forensics\ForensicAnalyzer;
/**
* Produce a forensic report from PDF bytes.
*
* @param string $pdfData Raw PDF file bytes.
*
* @return array{revisions: int, incremental: bool, signedRevisionPresent: bool}
*/
function inspect(string $pdfData): array
{
$report = ForensicAnalyzer::analyze($pdfData);
return [
'revisions' => $report->revisionCount,
'incremental' => $report->hasIncrementalUpdates(),
'signedRevisionPresent' => $report->hasAnySignature(),
];
}

hasAnySignature() relata que uma revisão de assinatura está presente na estrutura. Ele não afirma que a assinatura é válida.

Forensic analysis with SIEM export and fail-closed handling
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Enterprise\Forensics\ForensicAnalyzer;
use NextPDF\Enterprise\Forensics\ForensicEventType;
use Psr\Log\LoggerInterface;
final readonly class RevisionAuditor
{
public function __construct(private LoggerInterface $logger) {}
/**
* Analyze a document and emit a structural JSON record for the SIEM.
*
* @param string $pdfData The PDF bytes to inspect.
*
* @return string A JSON forensic report (no document content).
*/
public function audit(string $pdfData): string
{
try {
$report = ForensicAnalyzer::analyze($pdfData);
$this->logger->info('Forensic analysis complete', [
'revisions' => $report->revisionCount,
'sizeBytes' => $report->totalSizeBytes,
'signatureAddedEvents' => count(
$report->getEventsByType(ForensicEventType::SignatureAdded),
),
]);
return json_encode($report, JSON_THROW_ON_ERROR);
} catch (\Throwable $e) {
$this->logger->error('Forensic analysis failed', ['error' => $e->getMessage()]);
throw $e;
}
}
}

O registro de log carrega apenas contagens e tamanhos. Ele não carrega texto do documento. O bloco catch relança a exceção; ele não engole uma falha de análise.

  • Um documento de revisão única não tem histórico incremental. A lista de mudanças está vazia; isso não é evidência de autenticidade.
  • Um evento SignatureAdded significa que uma revisão de assinatura está estruturalmente presente. Ele não é um resultado de validade de assinatura. Valide a assinatura com a superfície de assinatura do Core.
  • A reutilização de objetos é normal: um objeto atualizado mantém seu número de objeto e uma nova cópia é anexada. O analisador relata isso como Modified, não como remoção e recriação.
  • Uma classificação Deleted é uma transição de entrada livre na cadeia de referência cruzada. Um leitor ainda pode resolver uma cópia mais antiga desse objeto; a exclusão no nível da estrutura não é garantia de irrecuperabilidade.
  • O analisador relata o que o parser observou. Um documento elaborado para confundir um parser pode gerar um relatório que não corresponde à visão de uma ferramenta diferente. O relatório não é uma afirmação de que toda modificação foi detectada.
  • A entrada é limitada. Um documento superdimensionado ou excessivamente multirrevisão falha de forma segura com uma exceção de análise tipada, em vez de consumir memória ilimitada.

O custo da análise escala com a contagem de revisões e a contagem de objetos, não com a complexidade da página renderizada. O orçamento de 1500 ms de tempo de parede cobre um documento empresarial multirrevisão típico. O perfil de reprodutibilidade é structural: o relatório é determinístico para uma dada entrada, mas os byte offsets absolutos refletem o arquivo de entrada exato e não são portáveis entre cópias regravadas.

O analisador é somente leitura e nunca grava na entrada. Ele é uma superfície analítica, não transformacional. Ele detecta a existência de marcadores de assinatura e de criptografia, mas não realiza nenhuma operação criptográfica, então não faz nenhuma declaração FIPS. Um relatório descreve o histórico de atualizações analisado; ele não é uma afirmação de autenticidade e não deve ser apresentado como à prova de adulteração, forensicamente garantido ou admissível em juízo. Um operador tira conclusões; a biblioteca relata a estrutura.

A análise é executada em processo no host que mantém o PDF. Nenhum conteúdo do documento sai do host. O relatório carrega números de objeto, índices de revisão, tamanhos, limites de bytes e categorias de evento — metadados estruturais, não texto do documento nem dados pessoais detectados. Se o PDF de entrada ou o próprio relatório contém dados pessoais, e onde cada um é armazenado, é uma responsabilidade de implantação fora do limite da biblioteca.

A biblioteca lança exceções tipadas com mensagens estruturais e não coloca bytes do documento no texto da exceção. Uma implantação que registra em log ao redor da análise deve registrar as contagens e categorias do relatório — como mostrado no exemplo de produção — e não deve registrar o payload bruto do PDF em logs ou em um backend de APM. O relatório JSON é o artefato seguro para encaminhar a um SIEM.

Nenhuma operação criptográfica ocorre neste módulo, então não há comportamento específico de modo FIPS. A validação de assinatura, que é criptográfica, é um recurso separado do Core e é documentada lá.

DeclaraçãoNormaCláusula
As atualizações posteriores anexam elementos adicionais ao final do arquivo; a estrutura original é modificada por atualizações posteriores.ISO 32000-2:2020§7.5.6
Um objeto atualizado é anexado como uma nova cópia e a entrada de referência cruzada da atualização substitui o byte offset anterior; o leitor resolve a cópia mais recente.ISO 32000-2:2020§7.5.6
A estrutura inicial do arquivo pode ser modificada por atualizações posteriores.ISO 32000-2:2020§7.5.4
A seção de referência cruzada de uma atualização contém entradas apenas para objetos adicionados, modificados ou excluídos.ISO 32000-2:2020§7.5.5
O dicionário de assinatura registra o que é assinado.ISO 32000-2:2020§12.8.1
ByteRange define o intervalo de bytes que a assinatura cobre (a validação de assinatura é um recurso separado do Core).ISO 32000-2:2020§12.8.1
Um Document Security Store mantém material de validação de longo prazo em uma revisão posterior.ISO 32000-2:2020§12.8.4

Todas as cláusulas são parafraseadas. O NextPDF não reproduz texto normativo. Consulte a norma publicada para a redação autoritativa. O NextPDF não faz nenhuma declaração de certificação forense; o relatório descreve a estrutura de atualizações analisada, não uma determinação certificada da integridade do documento.

  • O analisador é somente leitura: ele nunca grava no documento de entrada e não realiza nenhuma operação criptográfica.
  • Ele analisa a tabela de referência cruzada de cada revisão, deriva os limites de bytes da revisão e classifica cada objeto como adicionado, modificado ou excluído, depois agrupa as mudanças em uma linha do tempo de eventos classificados.
  • Um evento SignatureAdded significa que uma revisão de assinatura está estruturalmente presente; ele não é um resultado de validade de assinatura — a validação é um recurso separado do Core.
  • Um documento de revisão única tem uma lista de mudanças vazia (não evidência de autenticidade); uma classificação Deleted é uma transição de entrada livre, não garantia de irrecuperabilidade.
  • A entrada é limitada: um documento superdimensionado ou excessivamente multirrevisão falha de forma segura com uma exceção de análise tipada. O relatório é detecção de evidência de adulteração conforme testada, não uma garantia forense ou uma atestação admissível em juízo.

Esta página documenta apenas o comportamento observável externamente e a superfície pública de API suportada. Caminhos de namespace internos, classes auxiliares, tabelas de mecanismos, nomes de arquivo de runbook e prefixos de tíquete estão fora do escopo.

O NextPDF Core (Apache-2.0) não tem nenhum analisador forense de histórico de revisões — nenhum; este recurso não tem equivalente no nível Core. O Core fornece a superfície autoritativa de validação de assinatura, com a qual o analisador compõe, mas que ele não substitui.

O NextPDF Pro não tem nenhum analisador forense de histórico de revisões — nenhum; este recurso não tem equivalente no nível Pro. O relato somente leitura de revisões e de mudanças por objeto e o relatório SIEM serializável em JSON são entregues apenas no pacote nextpdf/enterprise.

O parser de revisões, a classificação de mudanças e a linha do tempo de eventos são descritos no nível de comportamento. Os detalhes internos do parser e qualquer detalhe interno de classificação estão fora do escopo da superfície pública. A validade de assinatura deliberadamente não está no escopo aqui — ela é responsabilidade da superfície de assinatura do Core.

A análise é executada em processo no host que mantém o PDF; nenhum conteúdo do documento sai do host. Se o PDF de entrada ou o relatório contém dados pessoais, e onde cada um é armazenado, é uma responsabilidade de implantação fora do limite da biblioteca. O operador tira conclusões a partir do relatório; a biblioteca relata a estrutura e não afirma a autenticidade do documento.

Nenhuma restrição de controle de exportação se aplica à superfície de Forensics. O relatório não deve ser apresentado como à prova de adulteração, forensicamente garantido ou admissível em juízo. Esta documentação não é um parecer jurídico; consulte a sua própria assessoria de conformidade e jurídica.