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은 문서 콘텐츠를 건드리지 않고 편집 이력을 수집합니다. 설계 배경: 증분 업데이트와 그 중요성.
API 표면
섹션 제목: “API 표면”| 타입 | 종류 | 역할 | 안정성 | 도입 버전 |
|---|---|---|---|---|
ForensicAnalyzer | 클래스 | PDF를 파싱하고 포렌식 보고서를 반환합니다(정적 analyze) | stable | 1.10.0 |
ForensicReport | 클래스 | 분석 결과; SIEM 내보내기를 위한 JsonSerializable | stable | 1.10.0 |
RevisionSummary | 클래스 | 리비전별 사실: 객체 수, 크기, 바이트 경계, 존재 플래그 | stable | 1.10.0 |
ForensicEvent | 클래스 | 영향받은 객체 목록을 갖춘 하나의 분류된 이벤트 | stable | 1.10.0 |
ForensicEventType | enum | 이벤트 범주(서명 추가됨, 카탈로그 업데이트됨, 객체 추가됨 등) | stable | 1.10.0 |
ObjectChange | 클래스 | 두 리비전에 걸친 하나의 객체 변경 레코드 | stable | 1.10.0 |
ObjectChangeType | enum | 추가됨, 수정됨, 또는 삭제됨 | 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분류는 상호 참조 체인의 free-entry 전환입니다. 리더는 여전히 해당 객체의 이전 복사본을 해석할 수 있습니다. 구조 수준의 삭제는 복구 불가능성을 보장하지 않습니다.- 분석기는 파서가 관찰한 것을 보고합니다. 파서를 혼란시키도록 제작된 문서는 다른 도구의 관점과 일치하지 않는 보고서를 산출할 수 있습니다. 보고서는 모든 수정이 탐지되었다는 주장이 아닙니다.
- 입력은 제한됩니다. 너무 큰 문서나 과도한 다중 리비전 문서는 무한 메모리를 소비하는 대신 타입이 지정된 파싱 예외와 함께 실패-차단됩니다.
분석 비용은 렌더링된 페이지 복잡성이 아니라 리비전 수와 객체 수에 따라 증가합니다. 1500ms 경과 시간 예산은 일반적인 다중 리비전 비즈니스 문서를 포괄합니다. 재현성 프로파일은 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 |
| 문서 보안 저장소는 이후 리비전에 장기 검증 자료를 담습니다. | ISO 32000-2:2020 | §12.8.4 |
모든 조항은 의역되었습니다. NextPDF는 규범 텍스트를 재현하지 않습니다. 권위 있는 표현은 발행된 표준을 참조하십시오. NextPDF는 포렌식 인증 주장을 하지 않습니다. 보고서는 파싱된 업데이트 구조를 설명하며, 문서 무결성에 대한 인증된 판정이 아닙니다.
동작 계약
섹션 제목: “동작 계약”- 분석기는 읽기 전용입니다. 입력 문서에 결코 쓰지 않으며 암호화 작업을 수행하지 않습니다.
- 각 리비전의 상호 참조 테이블을 파싱하고, 리비전 바이트 경계를 도출하며, 모든 객체를 추가, 수정, 또는 삭제로 분류한 다음, 변경을 분류된 이벤트 타임라인으로 그룹화합니다.
SignatureAdded이벤트는 서명 리비전이 구조적으로 존재함을 의미합니다. 서명 유효성 결과가 아닙니다 — 검증은 별개의 Core 기능입니다.- 단일 리비전 문서는 빈 변경 목록을 갖습니다(진본성의 증거가 아님).
Deleted분류는 free-entry 전환이며 복구 불가능성을 보장하지 않습니다. - 입력은 제한됩니다. 너무 큰 문서나 과도한 다중 리비전 문서는 타입이 지정된 파싱 예외와 함께 실패-차단됩니다. 보고서는 테스트된 변조 증명 탐지이며, 포렌식 보장이나 법정 채택 가능한 증명이 아닙니다.
발행 경계
섹션 제목: “발행 경계”이 페이지는 외부에서 관찰 가능한 동작과 지원되는 공개 API 표면만 문서화합니다. 내부 네임스페이스 경로, 헬퍼 클래스, 메커니즘 테이블, 런북 파일명, 티켓 접두사는 범위 밖입니다.
Core 폴백
섹션 제목: “Core 폴백”NextPDF Core(Apache-2.0)에는 리비전 이력 포렌식 분석기가 — 전혀 — 없습니다. 이 기능에는 Core 계층의 등가물이 없습니다. Core는 분석기가 조합되지만 대체하지 않는 권위 있는 서명 검증 표면을 제공합니다.
Pro 폴백
섹션 제목: “Pro 폴백”NextPDF Pro에는 리비전 이력 포렌식 분석기가 — 전혀 — 없습니다. 이 기능에는 Pro 계층의 등가물이 없습니다. 읽기 전용 리비전 및 객체별 변경 보고와 JSON 직렬화 가능 SIEM 보고서는 nextpdf/enterprise 패키지로만 제공됩니다.
Enterprise 경계 참고
섹션 제목: “Enterprise 경계 참고”리비전 파서, 변경 분류, 이벤트 타임라인은 동작 수준에서 설명됩니다. 파서 내부 사항과 내부 분류 세부 사항은 공개 표면의 범위 밖입니다. 서명 유효성은 여기서 의도적으로 범위에서 제외됩니다 — Core 서명 표면의 책임입니다.
배포 경계
섹션 제목: “배포 경계”분석은 PDF를 보유한 호스트에서 인프로세스로 실행됩니다. 어떤 문서 콘텐츠도 호스트를 벗어나지 않습니다. 입력 PDF나 보고서가 개인 데이터를 담는지, 그리고 각각이 어디에 저장되는지는 라이브러리 경계 밖의 배포 책임입니다. 운영자는 보고서로부터 결론을 도출합니다. 라이브러리는 구조를 보고하며 문서 진본성을 단언하지 않습니다.
법률 준수 경계
섹션 제목: “법률 준수 경계”Forensics 표면에는 수출 통제 제한이 적용되지 않습니다. 보고서는 변조 방지, 포렌식 보장, 또는 법정 채택 가능으로 제시되어서는 안 됩니다. 이 문서는 법률 의견이 아닙니다. 자체 준수 담당자 및 법률 자문에게 문의하십시오.
함께 보기
섹션 제목: “함께 보기”- Forensics — 심화 레퍼런스 — 리비전 경계 도출 및 객체 변경 분류 규칙.
- Core signing — 권위 있는 서명 검증 표면.
- Evidence bundles — 보관 연속성(chain-of-custody) 출력 아티팩트.
- NextPDF Enterprise — 전체 Enterprise 기능 표면.
- Core AST — 파싱된 문서 모델.
- Incremental update · Cross-reference table · DSS — 용어집 항목.