PAdES 기준선 매핑
한눈에 보기
섹션 제목: “한눈에 보기”PAdES는 ETSI EN 319 142에서 표준화된 PDF 고급 전자 서명 프로파일 제품군입니다. 이 표준은 네 가지 기준선 적합성 레벨, 즉 B-B, B-T, B-LT, B-LTA를 정의하며, 각 상위 레벨은 하위 레벨에 자료를 추가합니다. 이 페이지는 이러한 레벨이 NextPDF가 생성하는 결과물에 어떻게 대응되는지 설명합니다. 또한 Core 표면을 Pro 및 Enterprise 에디션과 구분합니다. 이 매핑은 내부 클래스가 아니라 엔진 출력물을 기준으로 설명하는 동작 수준의 매핑입니다.
간단히 말하면 다음과 같습니다. NextPDF Core는 B-B 및 B-T 레벨에 부합하는 서명 구조를 생성합니다. B-LT 및 B-LTA 생성기 경로는 Pro 및 Enterprise 에디션에 포함되어 제공됩니다. 생성된 서명이 특정 레벨에 적합한 것으로 인정되는지는 검증자와 해당 검증자에 구성된 신뢰 앵커에 따라 달라집니다. 생성기는 검증자를 대신해 적합성을 단언할 수 없습니다.
composer require nextpdf/core:^3개념 개요
섹션 제목: “개념 개요”PDF 디지털 서명은 서명 딕셔너리의 Contents 항목에 저장되는 CMS SignedData 구조입니다. ByteRange 배열은 다이제스트에 포함되는 바이트 범위를 지정합니다 — ISO 32000-2 §12.8.1. CMS SignerInfo는 content-type 및 message-digest 속성을 비롯한 서명된 속성을 담습니다 — RFC 5652 §5.3. 이러한 속성의 메시지 다이제스트는 §5.4 프로세스로 계산됩니다. PAdES는 CAdES 속성 모델을 차용해 해당 PDF 서명 딕셔너리 안에 내장합니다.
네 가지 기준선 레벨은 누적적입니다.
- B-B는 필수 서명된 속성과 함께 기본 서명을 담습니다.
- B-T는 서명 값에 대해 계산된 서명 타임스탬프 속성을 추가합니다. 이 속성은 타임스탬프 시점에 서명이 존재했음을 증명합니다 — ETSI PAdES §5.4.3. 토큰은 RFC 3161 타임스탬프 기관(Time-Stamping Authority)이 생성합니다 — RFC 3161 §2.4.1.
- B-LT는 Document Security Store에 배치되는 장기 검증 자료, 즉 인증서, OCSP, CRL 데이터를 추가합니다 — ETSI PAdES §6.2.2, ISO 32000-2 §12.8.4.3, 그리고 ETSI EN 319 142-2 §6.3에 설명된 검증 데이터 배치를 따릅니다.
- B-LTA는 장기간에 걸쳐 유효성을 유지할 수 있도록 아카이브 문서 타임스탬프를 추가합니다 — ETSI PAdES §6.2.2.
네 가지 레벨은 엄격히 누적됩니다. 각 상위 레벨은 하위 레벨이 담은 모든 것을 유지하면서 정확히 하나의 새로운 자료 계층을 추가합니다. 각 단계를 제공하는 생성기 에디션은 전이(transition)에 표시되어 있습니다.
API 표면
섹션 제목: “API 표면”레벨 선택자는 SignatureLevel 열거형이며, PAdES_B_B, PAdES_B_T, PAdES_B_LT, PAdES_B_LTA 케이스를 포함합니다. 이 열거형의 requiresTimestamp(), requiresDss(), requiresDocumentTimestamp(), isAvailableInEnvironment() 메서드는 레벨이 어떤 조건을 요구하는지와 현재 런타임이 이를 충족할 수 있는지를 보고합니다. Core 배포판에서 isAvailableInEnvironment()는 B-B 및 B-T에 대해 true를, B-LT 및 B-LTA에 대해 false를 반환합니다. 장기 검증 생성기는 런타임에 확인되며 오픈 소스 패키지에 포함되어 있지 않으므로, B-LT 및 B-LTA에 대해서는 false를 반환합니다. 프로덕션 코드는 이러한 내부 타입이 아니라 SignerInterface 계약을 사용합니다.
레벨 지원 매트릭스
섹션 제목: “레벨 지원 매트릭스”| 레벨 | 추가하는 항목 | Core (nextpdf/core) 에디션 | Pro / Enterprise 에디션 |
|---|---|---|---|
| B-B | 필수 서명된 속성을 갖춘 기본 서명 | 부합하는 구조를 생성합니다. 합성 골든 기준선에 대해 테스트되었습니다 | 동일한 표면 |
| B-T | 서명 값에 대한 서명 타임스탬프 | RFC 3161 타임스탬프 서비스가 제공되면 부합하는 구조를 생성합니다 | 동일한 표면 |
| B-LT | Document Security Store에 포함된 검증 데이터 | 생성기가 Core에 포함되지 않습니다. Enterprise 패키지 없이 B-LT를 선택하면 안전하게 실패합니다 | 생성기가 포함됩니다 |
| B-LTA | 아카이브 문서 타임스탬프 | 생성기가 Core에 포함되지 않습니다. 위와 같이 안전하게 실패합니다 | 생성기가 포함됩니다 |
“부합하는 구조를 생성합니다”는 엔진이 인용된 조항을 따르는 구조의 서명을 출력한다는 의미입니다. 해당 구조는 프로젝트의 tests/Corpus/pades/ 및 tests/Golden/baselines/ 아티팩트로 검증됩니다. 이는 외부 검증자가 출력물을 해당 레벨로 인증한다는 의미가 아닙니다. 적합성 섹션을 참조하십시오.
코드 샘플 — 빠른 시작
섹션 제목: “코드 샘플 — 빠른 시작”<?php
declare(strict_types=1);
require_once __DIR__ . '/../../vendor/autoload.php';
use NextPDF\Contracts\SignerInterface;
/** * Sign a byte range with any SignerInterface implementation. * * @param SignerInterface $signer A Core or Premium signer. * @param string $byteRange The PDF byte range to sign. * * @return string Hex-encoded CMS SignedData for the PDF /Contents field. */function signByteRange(SignerInterface $signer, string $byteRange): string{ return $signer->sign($byteRange)->toHex();}이 함수는 특정 클래스가 아니라 SignerInterface 계약에 의존합니다. Core 소프트웨어 서명자(B-B 또는 B-T)와 Premium HSM 서명자 모두 이 계약을 충족합니다. 에디션이 변경되어도 호출자 코드는 변경되지 않습니다.
코드 샘플 — 프로덕션
섹션 제목: “코드 샘플 — 프로덕션”<?php
declare(strict_types=1);
require_once __DIR__ . '/../../vendor/autoload.php';
use NextPDF\Security\Signature\SignatureLevel;
/** * Resolve the highest baseline level the current runtime can produce. * * B-B and B-T are produced by the Core distribution. B-LT and B-LTA * require the Enterprise long-term-validation package; without it the * level reports unavailable so callers fail closed rather than emit a * structure that does not carry the validation material the level names. * * @return SignatureLevel The highest level available in this runtime. */function highestAvailableLevel(): SignatureLevel{ foreach ([ SignatureLevel::PAdES_B_LTA, SignatureLevel::PAdES_B_LT, SignatureLevel::PAdES_B_T, SignatureLevel::PAdES_B_B, ] as $level) { if ($level->isAvailableInEnvironment()) { return $level; } }
return SignatureLevel::PAdES_B_B;}isAvailableInEnvironment()는 추가 패키지 없이 B-B 및 B-T에 대해 true를 반환합니다. Enterprise 장기 검증 패키지가 설치된 경우에만 B-LT 및 B-LTA에 대해 true를 반환합니다. 다운그레이드를 선택하지 않은 상태에서 사용할 수 없는 레벨을 선택하면, 메시지에 누락된 패키지를 명시하는 타입 지정 도달 불가 레벨 예외가 발생합니다. 따라서 잘못 구성된 배포는 호출자가 요청한 것보다 낮은 레벨을 조용히 출력하는 대신 안전하게 실패합니다.
엣지 케이스 및 주의 사항
섹션 제목: “엣지 케이스 및 주의 사항”- 구조적으로 B-T인 서명은 B-T로 검증된 서명과 동일하지 않습니다. 검증은 검증자의 신뢰 앵커와 해지 정보의 최신성을 바탕으로 검증자 측에서 수행됩니다. 생성기는 그 결과를 단언할 수 없습니다.
- PAdES B-LT 및 B-LTA에는 NextPDF Enterprise 패키지(
nextpdf/enterprise)가 필요합니다. 설치되지 않은 경우 서명자는 안전하게 실패하며 B-LT/B-LTA를 사용할 수 없습니다. Core 표면은 공개NextPDF\Contracts\SignerInterface를 통해 B-B/B-T를 제공하고, 장기 검증은LtvManagerInterface뒤에 둡니다. Core 배포판에서 사용할 수 없는 레벨을 선택하면 기본적으로 안전하게 실패합니다. 타입 지정 예외는 내부 타입이 아니라 누락된 공개 패키지를 명시합니다. 하위 레벨로 정상 다운그레이드하는 동작은 옵트인 방식이며 기본값이 아닙니다. - 바이트 범위 다이제스트는 서명 값을 제외해야 합니다.
Contents옥텟을 포함하는 다이제스트는 결코 검증될 수 없습니다 — ISO 32000-2 §12.8.1. - B-T의 서명 타임스탬프는 문서 바이트가 아니라 서명 값에 대한 것입니다. B-LTA의 아카이브 타임스탬프는 별도의 문서 타임스탬프입니다. 이 둘은 서로 호환되지 않습니다 — ETSI PAdES §5.4.3 및 §6.2.2.
- ETSI EN 319 142-1(기준선 레벨 부분)은 이 프로젝트의 증거 코퍼스에 포함되어 있지 않습니다. 여기에서 레벨 구조에 대해 하는 주장은 ETSI EN 319 142-2,
pades프로파일 문서, ISO 32000-2 §12.8, 그리고 RFC 5652 / RFC 3161에 근거합니다. 레벨 이름과 누적 구조는 v3.x에서 구현된 대로 명시되어 있습니다. 적합성 테스트 결과나 제3자 증명은 주장되지 않습니다.
레벨 비용은 레벨이 높아질수록 증가합니다. B-B는 단일 서명 작업으로, 소프트웨어 키의 경우 한 자릿수 밀리초입니다. B-T는 타임스탬프 기관(Time-Stamping Authority)에 대한 네트워크 왕복 한 번을 추가합니다. B-LT는 체인에 있는 인증서마다 해지 정보 가져오기 한 번을 추가합니다. B-LTA는 추가 문서 타임스탬프를 더합니다. 1500ms 벽시계 예산은 웜 연결에서 원격 TSA를 사용한 단일 B-T 서명을 포괄합니다. 느린 해지 엔드포인트를 대상으로 한 B-LT 또는 B-LTA는 이 예산을 초과하며 요청 경로 외부에 속합니다. 재현성 프로파일은 structural이며, bitwise가 아닙니다. 타임스탬프에는 서명 시점이 포함됩니다. 따라서 두 번 실행하면 문서 구조는 동일하게 유지되지만 타임스탬프 바이트는 달라집니다.
보안 참고 사항
섹션 제목: “보안 참고 사항”서명이 주장하는 레벨과 서명이 검증되는 레벨은 서로 다른 사실입니다. 이 페이지는 생성기 표면만 설명합니다. 장기 검증은 서명 시점에 검증 데이터가 수집되는 것과 이후 검증자가 동일한 앵커를 신뢰하는 것에 달려 있습니다. 둘 다 생성기가 보장할 수 있는 것이 아닙니다. 타임스탬프 신뢰는 결국 타임스탬프 기관(Time-Stamping Authority)에 대한 신뢰로 귀결되며, 배포 환경은 주입 가능한 제공자를 통해 이를 고정합니다. 이 페이지는 암호화 서명 프로파일과 관련되므로 export_control_class: legal-review-required로 표시되어 있습니다. 모든 규범적 출처는 인용 위생 원칙에 따라 의역되었으며 어느 것도 그대로 복제되지 않았습니다.
적합성
섹션 제목: “적합성”| 주장 | 표준 | 조항 | 증거 |
|---|---|---|---|
서명 값은 서명 딕셔너리 Contents 항목에 CMS SignedData 또는 TimeStampToken으로 DER 인코딩되어 저장됩니다. | ISO 32000-2 | §12.8.1 | |
다이제스트는 ByteRange 범위에 대해 계산되며 서명 값을 제외합니다. | ISO 32000-2 | §12.8.1 | |
| 서명 타임스탬프 속성은 서명 값에 대해 계산됩니다(B-T). | ETSI PAdES (EN 319 142) | §5.4.3 | |
| 장기 검증 자료는 Document Security Store에 담깁니다(B-LT). | ETSI PAdES (EN 319 142) / ISO 32000-2 | §6.2.2 / §12.8.4.3 | , |
| 검증 데이터는 DSS 및 VRI 딕셔너리에 배치됩니다. | ETSI EN 319 142-2 | §6.3 | , |
| 아카이브 문서 타임스탬프는 장기간에 걸쳐 유효성을 유지합니다(B-LTA). | ETSI PAdES (EN 319 142) | §6.2.2 | |
| SignerInfo는 content-type 및 message-digest 서명된 속성을 담습니다. | RFC 5652 | §5.3 | |
| 메시지 다이제스트는 DER 인코딩된 서명된 속성에 대해 계산됩니다(§5.4 프로세스). | RFC 5652 | §5.4 | |
| 타임스탬프는 RFC 3161 TSA에 요청되며 TSTInfo 구조를 반환합니다. | RFC 3161 | §2.4.1 |
모든 조항은 의역되었습니다. NextPDF는 규범적 텍스트를 그대로 복제하지 않습니다. 권위 있는 문구는 발행된 표준을 참조하십시오. ETSI EN 319 142-1은 증거 코퍼스에 포함되어 있지 않습니다. 기준선 레벨에 대한 구조적 주장은 위의 출처에 근거하며 v3.x에서 구현된 대로 명시되어 있습니다.
상업적 맥락
섹션 제목: “상업적 맥락”Core는 B-B 및 B-T 서명 구조를 생성합니다. B-LT 및 B-LTA 생성기 경로, HSM 및 PKCS#11 키 보관, 그리고 FIPS 140-3 암호화 정책 프로파일은 Pro 및 Enterprise 에디션에 포함되어 제공됩니다. Core는 장기 검증 생성기를 런타임에 확인합니다. 따라서 오픈 소스 엔진은 상업적 의존성을 갖지 않으며, 업그레이드 시 SignerInterface API는 변경되지 않습니다.
함께 보기
섹션 제목: “함께 보기”- Security / Signing — CMS, 타임스탬프, LTV, 신뢰 체인 및 해지 구현 표면.
- Contracts / Signing —
SignerInterfaceSPI 및 안정성 등급. - Security — 암호화 및 서명 구현 표면.
- Conformance — 서명된 아카이브와 짝을 이루는 PDF/A 및 프로파일 시행.
- PAdES · PAdES B-T · DSS · CAdES — 용어집 항목.