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 принимает историю правок, не касаясь содержимого документа. Предыстория проектирования: Инкрементные обновления и почему они важны.
Программный интерфейс
Заголовок раздела «Программный интерфейс»| Тип | Вид | Роль | Стабильность | С версии |
|---|---|---|---|---|
ForensicAnalyzer | class | Разбирает PDF и возвращает криминалистический отчёт (статический analyze) | stable | 1.10.0 |
ForensicReport | class | Результат анализа; JsonSerializable для экспорта в SIEM | stable | 1.10.0 |
RevisionSummary | class | Факты по каждой ревизии: число объектов, размер, байтовые границы, флаги наличия | stable | 1.10.0 |
ForensicEvent | class | Одно классифицированное событие со списком затронутых объектов | stable | 1.10.0 |
ForensicEventType | enum | Категории событий (добавлена подпись, обновлён каталог, добавлены объекты и другие) | stable | 1.10.0 |
ObjectChange | class | Запись об изменении одного объекта между двумя ревизиями | stable | 1.10.0 |
ObjectChangeType | enum | Added, Modified или Deleted | stable | 1.10.0 |
ForensicReport предоставляет hasIncrementalUpdates(), hasAnySignature(), getEventsByType(), getChangesForRevision() и jsonSerialize(). Флаг hasSignature в сводке ревизии — это сигнал структурного наличия, а не результат действительности.
Пример кода — быстрый старт
Заголовок раздела «Пример кода — быстрый старт»<?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() сообщает, что ревизия с подписью присутствует в структуре. Он не утверждает, что подпись действительна.
Пример кода — продакшн
Заголовок раздела «Пример кода — продакшн»<?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. Отчёт описывает разобранную историю обновлений; это не утверждение о подлинности, и его нельзя представлять как защищённое от подделки, криминалистически гарантированное или допустимое в суде. Оператор делает выводы; библиотека сообщает структуру.
Резидентность данных и меры по защите PII
Заголовок раздела «Резидентность данных и меры по защите PII»Анализ выполняется внутри процесса на хосте, который хранит PDF. Никакое содержимое документа не покидает хост. Отчёт несёт номера объектов, индексы ревизий, размеры, байтовые границы и категории событий — структурные метаданные, а не текст документа или обнаруженные персональные данные. Содержит ли входной PDF или сам отчёт персональные данные и где каждый из них хранится — это ответственность развёртывания за пределами границы библиотеки.
Безопасная телеметрия и очистка журналов
Заголовок раздела «Безопасная телеметрия и очистка журналов»Библиотека вызывает типизированные исключения со структурными сообщениями и не помещает байты документа в текст исключения. Развёртывание, логирующее вокруг анализа, должно логировать счётчики и категории отчёта — как показано в продакшн-образце — и не должно логировать сырую полезную нагрузку PDF в журналы или бэкенд APM. JSON-отчёт — это безопасный артефакт для пересылки в SIEM.
Поведение в режиме FIPS
Заголовок раздела «Поведение в режиме FIPS»В этом модуле не выполняется криптографической операции, поэтому нет поведения, специфичного для режима 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 и префиксы тикетов находятся вне области.
Резервный вариант Core
Заголовок раздела «Резервный вариант Core»У NextPDF Core (Apache-2.0) нет криминалистического анализатора истории ревизий — никакого; у этой возможности нет эквивалента уровня Core. Core поставляет авторитетную поверхность проверки подписи, с которой анализатор сочетается, но не заменяет.
Резервный вариант Pro
Заголовок раздела «Резервный вариант Pro»У NextPDF Pro нет криминалистического анализатора истории ревизий — никакого; у этой возможности нет эквивалента уровня Pro. Отчётность по ревизиям и изменениям по каждому объекту в режиме чтения и сериализуемый в JSON отчёт для SIEM поставляются только в пакете nextpdf/enterprise.
Примечание о границе Enterprise
Заголовок раздела «Примечание о границе Enterprise»Парсер ревизий, классификация изменений и хронология событий описаны на уровне поведения. Внутренние детали парсера и любые внутренние детали классификации находятся вне области публичного интерфейса. Действительность подписи намеренно вне области здесь — это ответственность поверхности подписания Core.
Граница развёртывания
Заголовок раздела «Граница развёртывания»Анализ выполняется внутри процесса на хосте, который хранит PDF; никакое содержимое документа не покидает хост. Содержит ли входной PDF или отчёт персональные данные и где каждый из них хранится — это ответственность развёртывания за пределами границы библиотеки. Оператор делает выводы из отчёта; библиотека сообщает структуру и не утверждает подлинность документа.
Граница юридического соответствия
Заголовок раздела «Граница юридического соответствия»Никакое ограничение экспортного контроля не применяется к поверхности Forensics. Отчёт нельзя представлять как защищённый от подделки, криминалистически гарантированный или допустимый в суде. Эта документация не является юридическим заключением; обращайтесь к собственным консультантам по соответствию и юристам.
См. также
Заголовок раздела «См. также»- Криминалистика — глубокий справочник — правила вывода границ ревизий и классификации изменений объектов.
- Подписание Core — авторитетная поверхность проверки подписи.
- Пакеты доказательств — артефакты вывода цепочки хранения.
- NextPDF Enterprise — полная поверхность возможностей Enterprise.
- Core AST — модель разобранного документа.
- Incremental update · Cross-reference table · DSS — термины глоссария.