Перейти к содержимому
getnextpdf.com

Enterprise редакция

Криминалистика

NextPDF Enterprise Forensics читает историю инкрементных обновлений PDF и формирует структурированный отчёт в режиме чтения о ревизиях, классифицированных событиях и изменениях по каждому объекту. Он поддерживает рабочие процессы криминалистического анализа. Это не печать с защитой от подделки, и он не утверждает, что документ подлинный или неизменённый.

Эта возможность поставляется в NextPDF Enterprise (nextpdf/enterprise) и активируется лицензионным конвертом уровня Enterprise. Развёртывание без этого права не загружает классы этой возможности. Сравнить редакции и получить лицензию.

Окно терминала
composer require nextpdf/enterprise:^3

PDF можно обновлять, добавляя изменения в конец файла, а не переписывая его. Каждое обновление добавляет новую секцию перекрёстных ссылок и новый трейлер, а исходные байты остаются на месте — ISO 32000-2:2020 §7.5.6. Когда объект изменён, обновление добавляет новую копию, а секция перекрёстных ссылок обновления записывает байтовое смещение, переопределяющее более старое смещение; читатель разрешает самую свежую копию — ISO 32000-2:2020 §7.5.6. Исходная структура файла может быть изменена более поздними обновлениями — ISO 32000-2:2020 §7.5.4. Секция перекрёстных ссылок обновления перечисляет только объекты, которые были добавлены, изменены или удалены в этом обновлении — ISO 32000-2:2020 §7.5.5.

Анализатор читает эту слоистую структуру. Он разбирает таблицу перекрёстных ссылок каждой ревизии, выводит байтовые границы ревизий и сравнивает записи каждой ревизии со следующей более старой ревизией, чтобы классифицировать каждый объект как добавленный, изменённый или удалённый. Затем он группирует изменения объектов в события более высокого уровня: добавлена подпись, обновлён каталог документа, появился словарь шифрования или набор объектов был добавлен, изменён или удалён. Вывод — это один объект отчёта, несущий число ревизий, общий размер, список сводок по каждой ревизии, классифицированную хронологию событий и список изменений по каждому объекту.

Анализатор работает в режиме чтения. Он обнаруживает существование ревизии с подписью по структурным маркерам; он не проверяет ни одну подпись, не пересчитывает ни один дайджест и не проверяет ни один сертификат. Проверка подписи — это отдельная возможность Core. Сформированный отчёт — это структурное описание истории обновлений в том виде, как она разобрана; это не определение того, что документ подлинный, что изменение было несанкционированным или что обнаружена каждая модификация. Считайте отчёт обнаружением свидетельств подделки в том объёме, в каком оно протестировано относительно представления парсера о цепочке ревизий, а не криминалистической гарантией или удостоверением, допустимым в суде.

Анализатор намеренно останавливается на структуре. Он сообщает, что содержит цепочка ревизий, и никогда не утверждает, что изменение было санкционировано, а подпись действительна. Структурное наличие и криптографическая действительность — это разные утверждения; их смешение позволило бы вызывающей стороне принять свидетельство подделки за гарантию. Поэтому действительность подписи остаётся за единственной поверхностью подписания Core, с которой Forensics сочетается, а не дублирует её. Отчёт — это сериализуемые в JSON структурные метаданные, поэтому SIEM принимает историю правок, не касаясь содержимого документа. Предыстория проектирования: Инкрементные обновления и почему они важны.

ТипВидРольСтабильностьС версии
ForensicAnalyzerclassРазбирает PDF и возвращает криминалистический отчёт (статический analyze)stable1.10.0
ForensicReportclassРезультат анализа; JsonSerializable для экспорта в SIEMstable1.10.0
RevisionSummaryclassФакты по каждой ревизии: число объектов, размер, байтовые границы, флаги наличияstable1.10.0
ForensicEventclassОдно классифицированное событие со списком затронутых объектовstable1.10.0
ForensicEventTypeenumКатегории событий (добавлена подпись, обновлён каталог, добавлены объекты и другие)stable1.10.0
ObjectChangeclassЗапись об изменении одного объекта между двумя ревизиямиstable1.10.0
ObjectChangeTypeenumAdded, Modified или Deletedstable1.10.0

ForensicReport предоставляет hasIncrementalUpdates(), hasAnySignature(), getEventsByType(), getChangesForRevision() и jsonSerialize(). Флаг hasSignature в сводке ревизии — это сигнал структурного наличия, а не результат действительности.

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() сообщает, что ревизия с подписью присутствует в структуре. Он не утверждает, что подпись действительна.

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;
}
}
}

Запись в журнале несёт только счётчики и размеры. Она не несёт текста документа. Блок catch перевыбрасывает исключение; он не проглатывает сбой разбора.

  • У документа с одной ревизией нет инкрементной истории. Список изменений пуст; это не доказательство подлинности.
  • Событие SignatureAdded означает, что ревизия с подписью структурно присутствует. Это не результат действительности подписи. Проверяйте подпись поверхностью подписания Core.
  • Повторное использование объекта нормально: обновлённый объект сохраняет свой номер, а новая копия добавляется. Анализатор сообщает это как Modified, а не как удаление и повторное создание.
  • Классификация Deleted — это переход на свободную запись в цепочке перекрёстных ссылок. Читатель всё ещё может разрешить более старую копию этого объекта; удаление на уровне структуры не гарантирует невосстановимость.
  • Анализатор сообщает то, что наблюдал парсер. Документ, составленный так, чтобы сбить парсер с толку, может дать отчёт, не совпадающий с представлением другого инструмента. Отчёт не является заявлением о том, что обнаружена каждая модификация.
  • Ввод ограничен. Чрезмерно большой или чрезмерно многоревизионный документ fail-closed с типизированным исключением разбора, а не потребляет неограниченную память.

Стоимость анализа растёт с числом ревизий и числом объектов, а не со сложностью отрисованных страниц. Бюджет 1500 мс по времени покрывает типичный многоревизионный деловой документ. Профиль воспроизводимости — structural: отчёт детерминирован для заданного входа, но абсолютные байтовые смещения отражают точный входной файл и непереносимы между пересохранёнными копиями.

Анализатор работает в режиме чтения и никогда не пишет во вход. Это аналитическая поверхность, а не преобразующая. Он обнаруживает существование маркеров подписи и шифрования, но не выполняет криптографической операции, поэтому не делает заявления о FIPS. Отчёт описывает разобранную историю обновлений; это не утверждение о подлинности, и его нельзя представлять как защищённое от подделки, криминалистически гарантированное или допустимое в суде. Оператор делает выводы; библиотека сообщает структуру.

Анализ выполняется внутри процесса на хосте, который хранит PDF. Никакое содержимое документа не покидает хост. Отчёт несёт номера объектов, индексы ревизий, размеры, байтовые границы и категории событий — структурные метаданные, а не текст документа или обнаруженные персональные данные. Содержит ли входной PDF или сам отчёт персональные данные и где каждый из них хранится — это ответственность развёртывания за пределами границы библиотеки.

Безопасная телеметрия и очистка журналов

Заголовок раздела «Безопасная телеметрия и очистка журналов»

Библиотека вызывает типизированные исключения со структурными сообщениями и не помещает байты документа в текст исключения. Развёртывание, логирующее вокруг анализа, должно логировать счётчики и категории отчёта — как показано в продакшн-образце — и не должно логировать сырую полезную нагрузку PDF в журналы или бэкенд APM. JSON-отчёт — это безопасный артефакт для пересылки в SIEM.

В этом модуле не выполняется криптографической операции, поэтому нет поведения, специфичного для режима FIPS. Проверка подписи, которая является криптографической, — это отдельная возможность Core и документирована там.

УтверждениеСтандартПункт
Более поздние обновления добавляют дополнительные элементы в конец файла; исходная структура изменяется более поздними обновлениями.ISO 32000-2:2020§7.5.6
Обновлённый объект добавляется как новая копия, а запись перекрёстной ссылки обновления переопределяет прежнее байтовое смещение; читатель разрешает самую свежую копию.ISO 32000-2:2020§7.5.6
Исходная структура файла может быть изменена более поздними обновлениями.ISO 32000-2:2020§7.5.4
Секция перекрёстных ссылок обновления содержит записи только для добавленных, изменённых или удалённых объектов.ISO 32000-2:2020§7.5.5
Словарь подписи записывает то, что подписано.ISO 32000-2:2020§12.8.1
ByteRange определяет байтовый промежуток, который покрывает подпись (проверка подписи — это отдельная возможность Core).ISO 32000-2:2020§12.8.1
Document Security Store хранит материал долгосрочной проверки в более поздней ревизии.ISO 32000-2:2020§12.8.4

Все пункты приведены в пересказе. NextPDF не воспроизводит нормативный текст. За авторитетной формулировкой обращайтесь к опубликованному стандарту. NextPDF не делает заявления о криминалистической сертификации; отчёт описывает разобранную структуру обновлений, а не сертифицированное определение целостности документа.

  • Анализатор работает в режиме чтения: он никогда не пишет во входной документ и не выполняет криптографической операции.
  • Он разбирает таблицу перекрёстных ссылок каждой ревизии, выводит байтовые границы ревизий и классифицирует каждый объект как добавленный, изменённый или удалённый, затем группирует изменения в классифицированную хронологию событий.
  • Событие SignatureAdded означает, что ревизия с подписью структурно присутствует; это не результат действительности подписи — проверка является отдельной возможностью Core.
  • У документа с одной ревизией пустой список изменений (не доказательство подлинности); классификация Deleted — это переход на свободную запись, а не гарантированная невосстановимость.
  • Ввод ограничен: чрезмерно большой или чрезмерно многоревизионный документ fail-closed с типизированным исключением разбора. Отчёт — это обнаружение свидетельств подделки в протестированном объёме, а не криминалистическая гарантия или удостоверение, допустимое в суде.

Эта страница документирует только внешне наблюдаемое поведение и поддерживаемую публичную поверхность API. Внутренние пути пространств имён, вспомогательные классы, таблицы механизмов, имена файлов runbook и префиксы тикетов находятся вне области.

У NextPDF Core (Apache-2.0) нет криминалистического анализатора истории ревизий — никакого; у этой возможности нет эквивалента уровня Core. Core поставляет авторитетную поверхность проверки подписи, с которой анализатор сочетается, но не заменяет.

У NextPDF Pro нет криминалистического анализатора истории ревизий — никакого; у этой возможности нет эквивалента уровня Pro. Отчётность по ревизиям и изменениям по каждому объекту в режиме чтения и сериализуемый в JSON отчёт для SIEM поставляются только в пакете nextpdf/enterprise.

Парсер ревизий, классификация изменений и хронология событий описаны на уровне поведения. Внутренние детали парсера и любые внутренние детали классификации находятся вне области публичного интерфейса. Действительность подписи намеренно вне области здесь — это ответственность поверхности подписания Core.

Анализ выполняется внутри процесса на хосте, который хранит PDF; никакое содержимое документа не покидает хост. Содержит ли входной PDF или отчёт персональные данные и где каждый из них хранится — это ответственность развёртывания за пределами границы библиотеки. Оператор делает выводы из отчёта; библиотека сообщает структуру и не утверждает подлинность документа.

Никакое ограничение экспортного контроля не применяется к поверхности Forensics. Отчёт нельзя представлять как защищённый от подделки, криминалистически гарантированный или допустимый в суде. Эта документация не является юридическим заключением; обращайтесь к собственным консультантам по соответствию и юристам.