콘텐츠로 이동
getnextpdf.com

Pro 에디션

Security — 심층 참조

이것은 NextPDF Pro 보안 표면에 대한 심층 참조입니다. 생성 시점 마스킹, 텍스트 레이어 PII 탐지, 원격 및 클라우드 KMS 서명 세션, 다자간 순차 서명, CAdES 및 XAdES 수집 경로, PAdES B-B 기준 레벨, 그리고 PAdES B-T 서명 지원(B-B 서명에 더해 서명 값에 적용되는 RFC 3161 signature-time-stamp 하나)을 다룹니다. 공개 API 계약, 외부에서 관찰 가능한 동작, 그리고 Enterprise B-LT/B-LTA 경계를 명시합니다. 동작 수준이며, 내부 구현 경로를 인용하지 않습니다.

이 기능은 NextPDF Pro(nextpdf/pro)에 제공되며 Pro 계층 라이선스 봉투로 활성화됩니다. 해당 사용 권한이 없는 배포 환경은 이 기능의 클래스들을 로드하지 않습니다. 에디션을 비교하고 라이선스 받기.

Core는 소프트웨어 CMS 서명자, RFC 3161 타임스탬프 클라이언트, RFC 5280 경로 검증, OCSP 및 CRL 폐기 검사를 제공합니다. Pro는 여기에 설명된 마스킹, PII 탐지, 원격 및 클라우드 KMS 서명 표면, PAdES B-T 서명 지원(Core RFC 3161 스택을 구성하여 signature-time-stamp를 추가함)을 더합니다. 이 표면의 기능 플래그는 pro입니다. 활성 Pro 사용 권한이 없는 배포 환경은 이 클래스들을 로드하지 않으며, Core 서명 계약은 변경 없이 계속 작동하고, Core 계약에 의존하는 코드는 사용 권한이 없어도 깨지지 않습니다.

Terminal window
composer require nextpdf/pro:^3

마스킹 엔진은 페이지가 작성되기 전에 텍스트에 순서 있는 규칙 목록을 적용합니다. 규칙은 PCRE 패턴과 일치시키며 세 가지 모드 중 하나로 일치 항목을 치환합니다.

  • BlackBox — 일치한 텍스트를 콘텐츠 스트림에서 제거하고 채움 영역을 예약합니다. 이 모드는 테스트된 대로 기저 텍스트 객체를 제거합니다.
  • Asterisks — 일치한 각 문자를 별표로 치환하여 문자 수를 보존합니다.
  • FixedLabel — 일치 항목 전체를 구성 가능한 레이블로 치환하며, 기본값은 [REDACTED]입니다.

규칙은 MaskingRule::exactMatch를 통해 정확한 리터럴로부터(리터럴은 정규식 이스케이프됨) 또는 MaskingRule::regex를 통해 사용자 지정 PCRE 패턴으로부터 빌드됩니다. MaskingConfig는 순서 있는 규칙 목록, 기본 모드, 채움 색상을 담습니다. MaskingConfig::fromArray는 구성 맵을 파싱하며, 사용 가능한 문자열 패턴이 없는 규칙 항목은 전체 가져오기를 실패시키는 대신 조용히 드롭합니다.

PII 표면은 PDF 텍스트 레이어를 추출한 다음, 이메일 주소, 전화번호, 미국 사회보장번호, 신용카드 번호에 대한 내장 패턴을 적용합니다. 구조화된 결과를 반환합니다. 즉, 일치 항목 발견 여부를 나타내는 불리언, 일치 카운트, 마스킹된 텍스트 뷰, 스캔된 타입 목록입니다. 호출자는 스캔을 네 가지 타입의 부분집합으로 제한할 수 있습니다. 이 표면은 렌더링된 페이지 글리프를 덮어쓰지 않습니다. 텍스트 레이어가 없는 스캔된 페이지는 일치 항목을 산출하지 않습니다. 결과는 구성된 타입에 대한 텍스트 레이어 패턴 탐지로 취급하십시오. 완전한 개인 데이터 제거가 아니며 규제 준수 진술도 아닙니다.

서명 세션은 2단계입니다. RemoteSigningSession::create는 세션을 엽니다. prepare는 두 ByteRange 영역에 대해 문서 다이제스트를 계산한 다음 CMS 서명된 속성을 빌드합니다. complete는 전략을 호출하고 결과를 임베드합니다. suspend는 세션을 직렬화하여 워커가 나중에 resumecompleteWithRawSignature로 재개할 수 있게 합니다. 세션은 CMS SignedData를 조립하고 이를 DER로 인코딩하여 서명 딕셔너리 Contents 항목에 저장합니다 — ISO 32000-2 §12.8.1. 파싱 가능한 X.509 인증서가 제공되면, 세션은 전체 PAdES B-B 필수 서명된 속성 세트를 방출합니다. 즉, content-type, message-digest, signing-time, signing-certificate-v2, 그리고 알고리즘 보호 속성입니다 — RFC 5652 §5.3 및 RFC 5652 §5. 검증자는 콘텐츠 다이제스트를 다시 계산하여 message-digest 속성과 비교합니다. 서명이 유효하려면 이 비교가 일치해야 합니다 — RFC 5652 §5.4.

구성된 PAdES 레벨이 B-T(RemoteSigningConfig::default->withLevel(SignatureLevel::PAdES_B_T), 또는 SequentialSigner::withTimestamping 경유)이고 타임스탬프 제공자가 연결되면, 세션은 추가로 정확히 하나의 RFC 3161 signature-time-stamp를 첫 번째 SignerInfo에 CMS 서명되지 않은 속성으로 임베드합니다. signature-time-stamp는 서명자의 디지털 서명 값에 대해 계산된 타임스탬프 토큰 하나를 담는 서명되지 않은 속성입니다 — ETSI EN 319 122-1 §5.3. 그 MessageImprint는 ASN.1 태그와 길이를 제외한 SignerInfo 서명 필드 값의 해시입니다 — ETSI EN 319 122-1 §5.3 및 RFC 3161 Appendix A (OID id-aa-timeStampToken = 1.2.840.113549.1.9.16.2.14). 타임스탬프는 서명되지 않은 속성이므로, B-B 서명된 속성, message-digest, SignerInfo 서명 값, 그리고 PDF /ByteRange는 B-B 출력과 바이트 단위로 동일합니다. CMS만 서명되지 않은 속성만큼 커지며, B-T 예약 /Contents 공간은 이를 수용하도록 상향됩니다. 토큰은 구성된 타임스탬프 제공자(기본 Core RFC 3161 클라이언트, 또는 호출자가 제공한 제공자)로부터 요청됩니다. 기본 제공자 경로에서는 imprint 다이제스트가 SHA-256입니다. SHA-1에 결합된 레거시 ESSCertID v1 형식은 거부되고 ESSCertIDv2가 요구됩니다 — RFC 5816 §1. TSA 결함, 거부된 요청, 잘못된 nonce 또는 message-imprint 에코, 형식이 잘못되었거나 지원되지 않는 알고리즘 토큰, 또는 암호 검증에 실패하는 토큰은 원래의 Core 예외가 previous throwable로 보존된 채 타입이 지정된 PadesBt 예외로 표면화됩니다. NextPDF Pro는 ETSI EN 319 122-1 §5.3, RFC 3161, RFC 5652, RFC 5816에 따라 PAdES B-T 서명 지원을 구현하며, 픽스처 검증되었습니다. 독립적인 ETSI EN 319 142-1 인증을 주장하지 않으며 문서의 법적 유효성을 주장하지 않습니다.

SequentialSigner는 다자간 서명을 조율합니다. 각 서명자는 별도의 증분 업데이트(incremental-update) 리비전입니다. 첫 번째 서명자는 certifyFirst를 통해 설정된 DocMDP 제약이 있는 인증 서명일 수 있습니다. PadesWrapper는 기존 서명을 수집합니다. fromCades는 CMS 구조를 직접 임베드하고, fromXades는 XAdES 문서를 파싱하여 그 핵심 서명 자료를 재사용하며, detect는 형식에 따라 자동 선택합니다. XAdES 경로는 인증서, 체인, 서명 값, 알고리즘을 재사용합니다. XAdES 한정(qualifying) 속성은 이전하지 않습니다.

Terminal window
composer require nextpdf/pro:^3
타입종류역할안정성도입 버전
RemoteSigningSessionclass2단계 원격 또는 비동기 서명 세션stable1.9.0
RemoteSigningConfigclassPAdES 레벨 및 알고리즘을 포함한 불변 세션 구성stable1.9.0
SequentialSignerclassDocMDP 지원이 있는 다자간 순차 서명stable1.9.0
SequentialSigningResultclass순차 실행 결과: PDF 바이트, 체인, 카운트, 완전성stable1.9.0
SigningStrategyinterface세션이 호출하는 서명 메커니즘 계약stable1.9.0
PadesWrapperclassPAdES 임베딩을 위해 기존 CAdES 또는 XAdES 서명을 래핑stable1.9.0
KmsSignerInterfaceinterface (SPI)제3자 HSM 및 KMS 드라이버 계약; Core HSM 서명자 계약을 확장stable2.1.0
SignatureAlgorithmenumPro 서명 알고리즘 OID 및 다이제스트 이름stable2.1.0
GenerationTimeMaskerclass페이지가 작성되기 전에 적용되는 규칙 기반 마스킹stable1.9.0
MaskingConfigclass불변 마스킹 구성stable1.9.0
MaskingRuleclass단일 마스킹 규칙 (리터럴 또는 PCRE)stable1.9.0
MaskingModeenumBlackBox, Asterisks, FixedLabelstable1.9.0

전략은 DER로 인코딩된 서명된 속성에 대해 작동하며 원시 서명 바이트를 반환합니다. CMS SignedData를 조립하는 것은 전략이 아니라 세션입니다. 전략은 서명자 인증서 DER, leaf에서 root 순으로 정렬된 체인 DER, 서명 알고리즘 OID, 다이제스트 알고리즘 이름, 그리고 세션을 직렬화하고 재개할 수 있는 전략을 표시하는 isAsync 플래그를 노출합니다.

KmsSignerInterface는 Core HSM 서명자 계약을 확장합니다. 레지스트리 조회를 위한 안정적인 providerId, 호출별 명시적 키 버전 파라미터가 있는 signWithVersion 메서드, 그리고 호출자가 sign 호출 전에 알고리즘 호환성을 발견할 수 있도록 하는 supportsAlgorithmsupportedAlgorithms를 추가합니다. 예약된 내장 제공자 식별자는 aws-kms, azure-keyvault, gcp-kms, pkcs11, openssl-cli, openssl-engine입니다. 제3자 드라이버는 충돌을 피하기 위해 식별자를 네임스페이스화해야 합니다. 기본 키 버전 시맨틱은 제공자별로 다릅니다. 별칭을 해석하는 제공자는 버전이 null일 때 별칭에서 활성 키를 해석합니다. 최신 활성화 버전을 선택하는 제공자는 자체 전송을 통해 이를 수행합니다. 서버 측 활성 버전 개념이 없는 제공자는 구성에 고정된 버전을 사용해야 하며, 호출과 구성 어느 쪽도 버전을 고정하지 않으면 키 관리 오류를 발생시켜야 합니다. 비어 있지 않은 버전은 그 버전을 고정하며, 제공자는 버전이 알 수 없거나 비활성화되었거나 폐기되었을 때 키 관리 오류를 발생시켜야 합니다.

  • 생성된 서명은 검증된 서명이 아닙니다. 경로 검증은 해당 검증자의 신뢰 앵커 및 basic-constraint 검사와 함께 검증자에서 실행됩니다 — RFC 5280 §6.1. 생산자는 그 결과를 단언할 수 없습니다.
  • 세션에는 비 X.509 합성 인증서 바이트를 위한 레거시 3속성 폴백이 있습니다. 프로덕션 전략은 항상 실제 X.509 DER를 제공하므로, 전체 B-B 속성 세트가 프로덕션 경로입니다. 폴백은 과거의 DER 메커니즘 테스트 표면을 위해서만 존재합니다.
  • CMS 구조는 예약된 Contents 공간에 맞아야 합니다. 전체 인증서 체인이 있는 B-B SignedData는 크기를 가집니다. 조립된 CMS가 예약된 16진 공간을 초과하면 세션은 오버플로 오류를 발생시킵니다. 예약 공간을 그에 맞게 크기 조정하십시오. B-T의 경우 임베드된 RFC 3161 토큰(TSA 인증서 체인이 지배적임)이 CMS를 키웁니다. B-T 예약 공간은 자동으로 상향되며, 부족하게 구성된 공간은 잘라내는 대신 타입이 지정된 구성 오류와 함께 실패-차단됩니다.
  • MaskingConfig::fromArray는 사용 가능한 문자열 패턴이 없는 항목을 가져오기를 실패시키는 대신 드롭합니다. 조용한 드롭이 허용되지 않는다면 구성 출처를 검증하십시오.
  • 마스킹 블랙박스 모드는 일치한 런(run)에 대해 빈 치환을 방출하고 기저 텍스트를 제거합니다. 값과 일치하지 않는 규칙은 그 값을 마스킹하지 않습니다. 엔진은 모든 민감 콘텐츠가 발견된다고 단언하지 않습니다.
  • B-T에는 연결된 타임스탬프 제공자가 필요합니다. 기본 Core RFC 3161 제공자 경로에서는 imprint 다이제스트가 SHA-256입니다. 해당 경로에서 SHA-256이 아닌 imprint 다이제스트는 조용히 격하되는 대신 타입이 지정된 구성 오류로 거부되며, 호출자가 제공한 사용자 지정 제공자는 정당하게 다른 승인된 다이제스트를 사용할 수 있습니다. 타임스탬프 serialNumber는 주어진 타임스탬프 기관(Time-Stamping Authority)의 토큰마다 고유하며, genTime은 토큰이 생성된 UTC 시점입니다 — RFC 3161 §2.4.1, §2.4.2. B-LT/B-LTA 장기 검증 자료는 여전히 Enterprise 경계 사안입니다. Pro는 DSS, VRI, 문서 타임스탬프를 생성하지 않습니다.
  • OCSP unknowngood이 아니며, 상태 최신성은 thisUpdatenextUpdate로 한정됩니다 — RFC 6960 §2.2, §4.2.

Pro는 구성된 서명 알고리즘과 전략에서 알고리즘을 선택합니다. FIPS 검증된 KMS 또는 HSM에 대해 구성되면, 암호 연산은 해당 검증된 경계 내에서 실행되며, 알고리즘 세트는 그 경계가 허용하는 것이 됩니다. NextPDF Pro는 구조적 CMS 조립과 다이제스트 계산을 수행합니다. 그 자체는 FIPS 검증된 암호 모듈이 아니며 FIPS 인증 주장을 하지 않습니다. FIPS 태세가 필요한 배포 환경은 FIPS 검증된 KMS 또는 HSM을 구성해야 하며, FIPS 140-3 암호 정책 프로파일은 Enterprise 기능입니다.

이 모듈은 암호 기능과 관련됩니다. 자체 검토에서 보안 민감 사항으로 취급하십시오.

NextPDF Pro는 B-B 기준과 B-T 레벨을 생성합니다. B-B의 경우 세션은 B-B 서명된 속성 세트가 있는 CMS SignedData를 조립하며 타임스탬프를 적용하지 않습니다. B-T의 경우 서명자의 디지털 서명 값에 대해 계산된 정확히 하나의 RFC 3161 signature-time-stamp를 CMS 서명되지 않은 속성으로 추가합니다 — ETSI EN 319 122-1 §5.3. NextPDF Pro는 이를 ETSI EN 319 122-1 §5.3, RFC 3161, RFC 5652, RFC 5816에 따라 구현하며, 픽스처 검증되었습니다. 독립적인 ETSI EN 319 142-1 인증, 적합성, 준수를 주장하지 않으며 문서의 법적 유효성을 주장하지 않습니다.

B-LTB-LTA 레벨은 Enterprise 기능이며 Pro에서 생성되지 않습니다. B-LT 및 B-LTA는 장기 보관 검증을 위한 문서 보안 저장소(Document Security Store)와 문서 타임스탬프를 추가합니다 — ETSI EN 319 142-2 §5.5. 이 레벨을 생성하는 서명 핸들러는 DSS 항목과 문서 타임스탬프를 지원합니다 — ETSI EN 319 142-2 §6.3.3.3. Pro RemoteSigningConfig는 문서 보안 저장소를 요청하는 B-T 이상(B-LT 또는 B-LTA) 레벨을 담을 수 있지만, Pro는 그 생산자를 제공하지 않으며 그에 따라 동작하지 않습니다. 그러한 레벨은 전방 선언된(forward-declared) 값입니다. Core 서명 흐름은 Core 계약을 통해 런타임에 장기 생산자를 해석하며, 그 생산자는 nextpdf/enterprise 패키지에 제공됩니다. Pro 전용 배포에서 B-LT 또는 B-LTA 요청은 누락된 Enterprise 구성 요소를 명시하는 메시지와 함께 실패-차단됩니다. Pro는 DSS, VRI 딕셔너리, 문서 타임스탬프, 아카이브 루프를 생성하지 않으며 장기 검증(LTV) 주장을 하지 않습니다. PKCS#11을 통한 하드웨어 키 보관과 FIPS 140-3 암호 정책 프로파일도 Enterprise 기능입니다. 이 페이지는 Enterprise 장기 검증 구현을 문서화하지 않습니다. 경계와 공개 패키지 이름만 명시합니다.

PAdES 레벨추가 항목생산자 에디션
B-B서명된 속성이 있는 CMS 서명Core, Pro
B-T서명 값에 적용되는 RFC 3161 signature-time-stamp 서명되지 않은 속성 하나Core, Pro
B-LT검증 자료가 포함된 문서 보안 저장소Enterprise (nextpdf/enterprise)
B-LTA아카이브 유효성을 위한 문서 타임스탬프Enterprise (nextpdf/enterprise)

이 페이지는 외부에서 관찰 가능한 동작과 지원되는 공개 API 표면만 문서화합니다. 내부 네임스페이스 경로, 헬퍼 클래스, 메커니즘 테이블, 런북 파일명, 티켓 접두사는 범위를 벗어납니다.

Pro 사용 권한이 없는 배포 환경은 Core 서명 계약을 유지합니다. Core SignerInterface 계약에 의존하는 코드는 B-B 기준에서 소프트웨어 CMS 서명자로 계속 서명합니다. 마스킹, PII 탐지, 원격 및 클라우드 KMS 전략은 Pro 패키지 없이는 존재하지 않으며, 그 타입으로의 호출은 조용한 no-op가 아니라 하드 의존성 오류입니다.

마스킹 및 PII 표면은 인프로세스로 실행됩니다. 마스킹이나 PII 탐지를 위해 어떤 문서 콘텐츠도 호스트를 벗어나지 않습니다. 클라우드 KMS 전략은 서명 작업을 위해 문서가 아니라 서명된 속성 다이제스트를 제공자에게 전송합니다. PII 탐지는 구성된 타입에 대해 패턴 매칭되며, 블랙박스 모드의 경우 테스트된 대로 기저 텍스트 객체를 제거합니다. 완전한 개인 데이터 제거 보증이 아니며 규제 준수 진술도 아닙니다.

안전한 텔레메트리 및 로그 스크러빙

섹션 제목: “안전한 텔레메트리 및 로그 스크러빙”

라이브러리는 구조적 메시지가 있는 타입이 지정된 예외를 발생시킵니다. 예외 메시지나 로그에 문서 콘텐츠나 탐지된 PII 값을 기록하지 않습니다. 서명 경로 주변에서 로깅하는 배포 환경은 문서 바이트가 아니라 구조적 필드를 로깅해야 합니다.

주장표준조항
CMS 서명은 서명 딕셔너리 Contents 항목에 DER로 인코딩되어 저장됩니다.ISO 32000-2§12.8.1
메시지 다이제스트 계산 프로세스; 서명된 속성은 content-type과 message-digest를 담습니다.RFC 5652§5.4
검증자는 생산자가 계산한 다이제스트에 의존해서는 안 됩니다. 독립적으로 다시 계산하여 비교합니다(서명 검증 프로세스).RFC 5652§5.6
SignerInfo는 다이제스트 알고리즘 식별자와 서명된 속성 블록을 담습니다.RFC 5652§5
타임스탬프 요청은 TSTInfo 구조를 반환합니다.RFC 3161§2.4.1
타임스탬프 serialNumber는 주어진 TSA의 토큰마다 고유합니다.RFC 3161§2.4.2
타임스탬프 genTime은 토큰이 생성된 UTC 시점입니다.RFC 3161§2.4.2
PAdES B-T signature-time-stamp는 서명자의 디지털 서명 값에 대해 계산된 타임스탬프 토큰 하나를 담는 서명되지 않은 속성입니다(Pro는 B-T를 생성함).ETSI EN 319 122-1§5.3
signature-time-stamp imprint는 ASN.1 태그와 길이를 제외한 SignerInfo 서명 필드 값의 해시입니다.ETSI EN 319 122-1§5.3
signature-time-stamp 토큰은 id-aa-timeStampToken OID를 사용합니다. 그 MessageImprint는 SignerInfo 서명 필드 값의 해시입니다.RFC 3161Appendix A
검증 측면에서, NextPDF는 signature-time-stamp의 MessageImprint를 SignerInfo 서명 값에 결합하고, 불일치, 누락/중복된 토큰, 또는 SHA-1 imprint에서 실패-차단합니다(엄격한 검증이며, 인증이 아님).RFC 3161Appendix A
ESSCertIDv2는 SHA-1에 결합된 레거시 ESSCertID를 대체합니다. 엄격한 B-T 경로는 ESSCertIDv2를 요구합니다.RFC 5816§1
인증 경로 검증은 신뢰 앵커로의 basic constraints 및 경로 입력을 검사합니다.RFC 5280§6.1
OCSP는 certStatus를 good, revoked, 또는 unknown으로 보고합니다.RFC 6960§2.2
OCSP 상태 최신성은 thisUpdate와 nextUpdate로 한정됩니다.RFC 6960§4.2
B-LT 및 B-LTA는 장기 검증을 위한 문서 보안 저장소와 문서 타임스탬프를 추가합니다(Enterprise 경계).ETSI EN 319 142-2§5.5
장기 레벨을 생성하는 서명 핸들러는 DSS 항목과 문서 타임스탬프를 지원합니다(Enterprise 경계).ETSI EN 319 142-2§6.3.3.3

모든 조항은 의역되었습니다. NextPDF는 규범 텍스트를 재현하지 않습니다. 권위 있는 표현은 발행된 표준을 참조하십시오. NextPDF Pro는 ETSI EN 319 122-1 §5.3(signature-time-stamp), RFC 3161, RFC 5652, RFC 5816에 따라 PAdES B-T 서명 지원을 구현하며, 픽스처 검증되었습니다. ETSI EN 319 142-1(PAdES 기준 레벨 부분)은 인용된 근거 집합 밖에 있습니다. 따라서 NextPDF Pro는 독립적인 ETSI EN 319 142-1 인증, 적합성, 준수를 주장하지 않으며 문서의 법적 유효성을 주장하지 않습니다. 이 페이지는 인증된 적합성 레벨이 아니라 생성된 구조, B-T 지원이 구현하는 표준, 그리고 Enterprise B-LT/B-LTA 경계를 명시합니다.