콘텐츠로 이동

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 에디션에 포함되어 제공됩니다. 생성된 서명이 특정 레벨에 적합한 것으로 인정되는지는 검증자와 해당 검증자에 구성된 신뢰 앵커에 따라 달라집니다. 생성기는 검증자를 대신해 적합성을 단언할 수 없습니다.

Terminal window
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)에 표시되어 있습니다.

+ RFC 3161 sig time-stamp

(Core / Enterprise
+ Document Security Store

(Enterprise only)
+ archive doc time-stamp

(Enterprise only)

B-B

CMS signature + signed attributes

B-T

+ signature time-stamp (over the signature value)

B-LT

+ DSS validation material (cert, OCSP, CRL)

B-LTA

+ archive document time-stamp (over the DSS)

;

not

Pro)

Diagram

레벨 선택자는 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-LTDocument Security Store에 포함된 검증 데이터생성기가 Core에 포함되지 않습니다. Enterprise 패키지 없이 B-LT를 선택하면 안전하게 실패합니다생성기가 포함됩니다
B-LTA아카이브 문서 타임스탬프생성기가 Core에 포함되지 않습니다. 위와 같이 안전하게 실패합니다생성기가 포함됩니다

“부합하는 구조를 생성합니다”는 엔진이 인용된 조항을 따르는 구조의 서명을 출력한다는 의미입니다. 해당 구조는 프로젝트의 tests/Corpus/pades/tests/Golden/baselines/ 아티팩트로 검증됩니다. 이는 외부 검증자가 출력물을 해당 레벨로 인증한다는 의미가 아닙니다. 적합성 섹션을 참조하십시오.

examples/contracts/signing-quickstart.php
<?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 서명자 모두 이 계약을 충족합니다. 에디션이 변경되어도 호출자 코드는 변경되지 않습니다.

examples/contracts/signing-level.php
<?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는 변경되지 않습니다.