콘텐츠로 이동
getnextpdf.com

Pro 에디션

보안

NextPDF Pro는 NextPDF Core 위에 보안 표면을 더합니다. 생성 시점 콘텐츠 마스킹, 텍스트 레이어 PII 탐지, 원격 및 클라우드 KMS 서명 전략, 다자간 순차 서명입니다. NextPDF Core는 PAdES B-B 및 B-T 레벨을 생성합니다. Pro는 동일한 레벨을 생성하고 그 위에 이 서명 워크플로들을 더합니다(B-T의 경우 B-B 서명에 더해 서명 값에 적용되는 RFC 3161 signature-time-stamp 하나). 이 페이지는 동작 수준입니다. 각 부분이 무엇을 하는지, 무엇을 하지 않는지, 그리고 Enterprise 경계가 어디에서 시작되는지 명시합니다.

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

Core는 소프트웨어 CMS 서명자, RFC 3161 타임스탬프 클라이언트, RFC 5280 경로 검증, OCSP 및 CRL 폐기 검사를 제공합니다. Pro는 마스킹, PII 탐지, 원격/클라우드 KMS/순차 서명 워크플로를 더합니다. 이 워크플로들은 Core RFC 3161 스택을 통해 동일한 Core B-B 및 B-T 레벨을 생성합니다(B-T의 경우 서명 값에 적용되는 signature-time-stamp 하나). 활성 Pro 사용 권한이 없는 배포 환경은 이 클래스들을 로드하지 않습니다. Core 서명 계약은 변경 없이 계속 작동합니다.

Terminal window
composer require nextpdf/pro:^3

마스킹 엔진은 페이지가 작성되기 전에 텍스트에 순서 있는 규칙 목록을 적용합니다. 각 규칙은 정규 표현식과 일치시킵니다. 규칙은 세 가지 방식 중 하나로 일치 항목을 치환합니다. 콘텐츠 스트림에서 텍스트를 제거하는 블랙박스 채움, 동일한 문자 수의 별표 런(run), 또는 [REDACTED] 같은 고정 레이블입니다. 엔진은 블랙박스 모드의 경우 테스트된 대로 기저 텍스트 객체를 제거합니다. 모든 형태의 민감 콘텐츠가 발견된다고 단언하지 않습니다. 탐지는 구성하는 규칙에 따라 달라집니다.

PII 표면은 탐지 도구이며 redaction 보증이 아닙니다. 텍스트 레이어를 추출한 다음, 이메일 주소, 전화번호, 미국 사회보장번호, 신용카드 번호에 대한 내장 패턴을 적용합니다. 텍스트의 마스킹된 뷰와 일치 카운트를 반환합니다. 페이지 이미지에 렌더링된 글리프를 덮어쓰지 않습니다. 텍스트 레이어가 없는 스캔된 페이지는 일치 항목을 산출하지 않습니다. 결과는 구성된 타입에 대한 패턴 매칭 탐지로 취급하십시오. 완전한 개인 데이터 제거가 아닙니다.

서명 표면은 Core 서명자 위에 원격 및 비동기 워크플로를 더합니다. 세션은 문서 다이제스트를 계산하고, CMS 서명된 속성을 빌드하며, 서명된 속성 바이트를 서명 전략에 넘깁니다. 전략은 클라우드 KMS, 지연된 외부 서명자, 또는 기존 CAdES나 XAdES 서명을 래핑하는 수집 경로일 수 있습니다. 그런 다음 세션은 CMS SignedData를 조립하고 이를 DER로 인코딩하여 서명 딕셔너리 Contents 항목에 저장합니다 — ISO 32000-2 §12.8.1. SignerInfo는 content-type과 message-digest 서명된 속성을 담습니다. 메시지 다이제스트 계산 프로세스는 RFC 5652 §5.4입니다. 검증자는 생산자가 계산한 다이제스트에 의존해서는 안 됩니다. 콘텐츠 다이제스트를 독립적으로 다시 계산하여 message-digest 속성과 비교하며, 서명이 유효하려면 이 비교가 일치해야 합니다 — RFC 5652 §5.6 서명 검증 프로세스.

NextPDF Core는 PAdES B-B 및 B-T 레벨을 생성합니다. NextPDF Pro는 동일한 레벨을 생성하고 그 위에 자신의 서명 워크플로들을 더합니다. B-B의 경우 세션은 B-B 서명된 속성 세트가 있는 CMS SignedData를 조립하며 타임스탬프를 적용하지 않습니다. B-T의 경우 세션은 정확히 하나의 RFC 3161 signature-time-stamp를 서명 값에 CMS 서명되지 않은 속성으로 추가합니다. signature-time-stamp는 서명자의 디지털 서명 값에 대해 계산된 타임스탬프 토큰 하나를 담는 서명되지 않은 속성이며 — ETSI EN 319 122-1 §5.3 — 그 MessageImprintid-aa-timeStampToken OID로 식별되는 SignerInfo 서명 필드 값의 해시입니다 — RFC 3161 Appendix A. 타임스탬프 genTime은 토큰이 생성된 UTC 시점입니다 — RFC 3161 §2.4.2. 타임스탬프는 서명되지 않은 속성이므로, B-B 서명된 다이제스트, SignerInfo 서명 값, 그리고 PDF /ByteRange는 변경되지 않습니다. CMS만 커집니다. RFC 3161 토큰은 구성된 타임스탬프 제공자(기본 Core RFC 3161 클라이언트, 또는 호출자가 제공한 제공자)로부터 얻습니다. B-T는 기본 제공자 경로에서 SHA-256 message imprint를 사용합니다. NextPDF Pro는 ETSI EN 319 122-1 §5.3, RFC 3161, RFC 5652, RFC 5816에 따라 PAdES B-T 서명 지원을 구현합니다. 이는 픽스처 검증되었습니다. NextPDF Pro는 독립적인 ETSI EN 319 142-1 인증을 주장하지 않으며 문서의 법적 유효성을 주장하지 않습니다. B-LT 및 B-LTA는 장기 보관 검증을 위한 문서 보안 저장소(Document Security Store)와 문서 타임스탬프를 추가합니다 — ETSI EN 319 142-2 §5.5. 이 레벨들은 Enterprise 기능(nextpdf/enterprise)이며 Pro에서 생성되지 않습니다. 아래 Enterprise 경계를 참고하십시오.

서명 표면은 개인 키를 보유하는 대신 서명된 속성 바이트를 SigningStrategy에 넘깁니다. 그 하나의 결정이 핵심을 지탱합니다. 클라우드 KMS, 지연된 외부 서명자, 또는 CAdES/XAdES 수집 경로 모두 동일한 계약을 충족하므로, 호출 코드는 동일하게 유지되고 키 자료는 결코 NextPDF에 들어오지 않습니다. 세션을 RemoteSigningSession::prepare()RemoteSigningSession::complete()로 분리하면 서명이 비동기적으로 반환될 수 있습니다. 키에 도달하기 전에 다이제스트가 고정되기 때문입니다. 타임스탬프는 CMS 서명되지 않은 속성으로 첨부되므로 B-T는 가산적으로 유지됩니다. 즉, B-B 서명된 다이제스트, SignerInfo 서명 값, 그리고 /ByteRange는 손대지 않습니다. 모든 이음매는 실패-차단됩니다. 조용히 격하되는 서명 경로가 멈추는 경로보다 나쁘기 때문입니다. 설계 배경: 타협 없는 대규모 서명.

타입종류역할안정성도입 버전
RemoteSigningSessionclass2단계 원격 또는 비동기 서명 세션stable1.9.0
RemoteSigningConfigclassPAdES 레벨을 포함한 불변 세션 구성stable1.9.0
SequentialSignerclassDocMDP 지원이 있는 다자간 순차 서명stable1.9.0
SigningStrategyinterface세션이 호출하는 서명 메커니즘 계약stable1.9.0
PadesWrapperclassPAdES 임베딩을 위해 기존 CAdES 또는 XAdES 서명을 래핑stable1.9.0
KmsSignerInterfaceinterface (SPI)제3자 HSM 및 KMS 드라이버 계약stable2.1.0
GenerationTimeMaskerclass페이지가 작성되기 전에 적용되는 규칙 기반 마스킹stable1.9.0
MaskingConfig / MaskingRule / MaskingModetypes마스킹 구성, 규칙, 치환 모드stable1.9.0

RemoteSigningConfig는 enum이 Core SignatureLevel인 PAdES 레벨 필드를 담습니다. Pro 서명 경로는 B-B 기준과 B-T 레벨을 생성합니다. RemoteSigningConfig::default()->withLevel(SignatureLevel::PAdES_B_T)를 구성하고(또는 SequentialSigner::withTimestamping()을 사용하고) 타임스탬프 제공자를 제공하면, 세션은 RFC 3161 signature-time-stamp 서명되지 않은 속성을 추가합니다. B-T 예약 /Contents 공간은 토큰이 맞도록 자동으로 상향됩니다. 부족하게 구성된 공간은 잘라내는 대신 타입이 지정된 구성 오류와 함께 실패-차단됩니다. 구성에 담긴 B-T 이상의 레벨(B-LT 또는 B-LTA)은 Pro가 그에 따라 동작하지 않는 전방 선언된(forward-declared) 값입니다. 그 장기 생산자는 Core 계약을 통해 런타임에 해석되며 nextpdf/enterprise 패키지에 제공됩니다.

Sign with a cloud-KMS strategy
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Pro\Security\Signing\RemoteSigningSession;
use NextPDF\Pro\Security\Signing\SigningStrategy;
/**
* Produce a signed PDF using any signing strategy.
*
* @param string $pdfWithPlaceholder PDF bytes with a signature placeholder.
* @param SigningStrategy $strategy A cloud-KMS, deferred, or ingest strategy.
*
* @return string The signed PDF bytes.
*/
function signWithStrategy(string $pdfWithPlaceholder, SigningStrategy $strategy): string
{
$session = RemoteSigningSession::create($pdfWithPlaceholder);
$session->prepare(
certDer: $strategy->getCertificateDer(),
chainDer: $strategy->getCertificateChainDer(),
algorithmOid: $strategy->getSignatureAlgorithmOid(),
digestAlgorithm: $strategy->getDigestAlgorithm(),
contentsHexStart: 0,
contentsHexEnd: 0,
);
return $session->complete($strategy);
}

호출자는 SigningStrategy 계약에 의존합니다. 클라우드 KMS 전략과 CAdES 수집 전략 모두 이를 충족하므로, 이 코드는 전략 간에 변경되지 않습니다.

Multi-party sequential signing with audit logging
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Pro\Security\Signing\SequentialSigner;
use NextPDF\Pro\Security\Signing\SigningStrategy;
use Psr\Log\LoggerInterface;
final readonly class ApprovalWorkflow
{
public function __construct(private LoggerInterface $logger) {}
/**
* Sign a PDF with two parties in sequence.
*
* @param string $pdfData The PDF bytes to sign.
* @param SigningStrategy $approver The first-party strategy.
* @param SigningStrategy $reviewer The second-party strategy.
*
* @return string The signed PDF bytes.
*/
public function run(string $pdfData, SigningStrategy $approver, SigningStrategy $reviewer): string
{
try {
$result = SequentialSigner::create($pdfData)
->addSigner($approver, 'Approver', reason: 'Approved')
->addSigner($reviewer, 'Reviewer', reason: 'Reviewed')
->sign();
$this->logger->info('Sequential signing complete', [
'signatures' => $result->signatureCount,
]);
return $result->pdfData;
} catch (\Throwable $e) {
$this->logger->error('Sequential signing failed', ['error' => $e->getMessage()]);
throw $e;
}
}
}

각 서명자는 별도의 증분 리비전입니다. catch 블록은 로깅하고 다시 던집니다. 실패를 삼키지 않으므로 서명 경로가 실패-차단 상태로 유지됩니다.

  • 생성된 서명은 검증된 서명이 아닙니다. 경로 검증은 해당 검증자의 신뢰 앵커와 함께 검증자에서 실행됩니다 — RFC 5280 §6.1. 생산자는 그 결과를 단언할 수 없습니다.
  • 마스킹 탐지는 구성된 규칙에 따라 달라집니다. 값과 일치하지 않는 규칙 세트는 그 값을 마스킹하지 않습니다. 엔진은 모든 민감 콘텐츠가 발견된다고 단언하지 않습니다.
  • PII 탐지는 텍스트 레이어 전용입니다. 텍스트 레이어가 없는 스캔된 페이지는 일치 항목을 산출하지 않습니다. 이 도구는 렌더링된 페이지 글리프를 덮어쓰지 않습니다.
  • CMS 구조는 예약된 Contents 공간에 맞아야 합니다. 전체 인증서 체인이 있는 B-B SignedData는 크기를 가집니다. 예약 공간을 그에 맞게 크기 조정하십시오. 그렇지 않으면 세션이 오버플로 오류를 발생시킵니다.
  • 클라우드 KMS 전략은 네트워크 도달성과 제공자 가용성에 의존합니다. 네트워크 또는 제공자 오류는 타입이 지정된 예외를 발생시킵니다. 세션은 서명되지 않은 문서를 조용히 생성하지 않습니다.
  • OCSP unknowngood이 아닙니다. unknown은 판정 불가로 취급하십시오 — RFC 6960 §2.2.

소프트웨어 서명은 한 자릿수 밀리초입니다. 클라우드 KMS 서명은 제공자로의 네트워크 왕복 1회를 추가합니다. B-T 서명은 서명 작업에 더해 구성된 타임스탬프 제공자로의 왕복 1회를 추가합니다. 1500ms 경과 시간 예산은 따뜻한(warm) 연결에서 원격 제공자가 있는 단일 B-B 서명을 포괄합니다. 마스킹 비용은 규칙 수와 텍스트 길이에 따라 확장됩니다. 재현성 프로파일은 structural입니다. 즉, B-B 서명된 속성은 서명 시점을 임베드하고 B-T 서명은 추가로 타임스탬프 토큰을 임베드하므로, 두 실행은 서명 시점 및 타임스탬프 바이트에서 차이가 나지만 서명 구조는 동일합니다.

이는 암호 경계이므로 위협 모델이 명시적입니다. 바이트 범위는 엔진이 계산하며 호출자로부터 결코 받지 않습니다. 서명 경로는 실패-차단됩니다. 프리미티브 실패나 기능 격차는 타입이 지정된 예외를 발생시키며 더 약한 알고리즘으로 조용히 격하되지 않습니다. 클라우드 KMS 전략은 통합 지점이며 키 저장소가 아닙니다. 키 보호는 키 처리, 구성된 KMS, 배포 환경에 따라 달라집니다. NextPDF Pro는 KMS 전략의 개인 키를 보유하지 않습니다. Pro는 FIPS 검증된 KMS 또는 HSM에 대해 구성되면 FIPS 호환 모드로 작동합니다. NextPDF Pro 자체는 FIPS 검증된 암호 모듈이 아닙니다. 이 페이지는 암호 서명에 관한 내용이며, 모든 규범 출처는 의역되고 어느 것도 재현되지 않습니다.

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

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

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

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

Pro는 구성된 서명 알고리즘과 전략에서 알고리즘을 선택합니다. FIPS 검증된 KMS 또는 HSM에 대해 구성되면, 암호 연산은 해당 검증된 경계 내에서 실행됩니다. NextPDF Pro 자체는 구조적 조립과 다이제스트 계산을 수행합니다. FIPS 검증된 모듈이 아니며 FIPS 인증 주장을 하지 않습니다.

NextPDF Pro는 B-B 기준과 B-T 레벨을 생성합니다. 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에 따라 구현합니다. 픽스처 검증되었습니다. NextPDF Pro는 독립적인 ETSI EN 319 142-1 인증을 주장하지 않으며 문서의 법적 유효성을 주장하지 않습니다.

B-LTB-LTA 레벨은 Enterprise 기능이며 Pro에서 생성되지 않습니다. B-LT 및 B-LTA는 장기 보관 검증을 위한 문서 보안 저장소와 문서 타임스탬프를 추가합니다 — ETSI EN 319 142-2 §5.5. 문서 보안 저장소나 장기 아카이브 루프를 요청하는 구성은 그 생산자를 Core 계약을 통해 런타임에 해석합니다. 그 생산자는 nextpdf/enterprise 패키지에 제공됩니다. Pro 전용 배포에서 B-LT 또는 B-LTA 요청은 누락된 Enterprise 구성 요소를 명시하는 메시지와 함께 실패-차단됩니다. Pro는 문서 보안 저장소, VRI 딕셔너리, 문서 타임스탬프, 아카이브 루프를 생성하지 않으며 장기 검증(LTV) 주장을 하지 않습니다. PKCS#11을 통한 하드웨어 키 보관과 FIPS 140-3 암호 정책 프로파일도 Enterprise 기능입니다.

PAdES 레벨추가 항목생산자 에디션
B-B서명된 속성이 있는 CMS 서명Core, Pro, Enterprise
B-T서명 값에 적용되는 RFC 3161 signature-time-stamp 서명되지 않은 속성 하나Core, Pro, Enterprise
B-LT검증 자료가 포함된 문서 보안 저장소Enterprise (nextpdf/enterprise)
B-LTA아카이브 유효성을 위한 문서 타임스탬프Enterprise (nextpdf/enterprise)
  • 마스킹은 페이지가 작성되기 전에 구성된 규칙을 적용하며, 블랙박스 모드의 경우 테스트된 대로 기저 텍스트 객체를 제거합니다.
  • PII 탐지는 텍스트 레이어를 추출하고, 구성된 패턴을 적용하며, 마스킹된 뷰와 일치 카운트를 반환합니다. 렌더링된 글리프를 덮어쓰지 않습니다.
  • 원격 서명은 2단계입니다. prepare는 다이제스트를 계산하고 서명된 속성을 빌드합니다. complete는 CMS를 조립하고 임베드합니다.
  • Pro는 B-B 기준과 B-T 레벨을 생성합니다. B-T의 경우 세션은 하나의 RFC 3161 signature-time-stamp를 서명 값에 CMS 서명되지 않은 속성으로 추가합니다. B-B 서명된 다이제스트와 /ByteRange는 변경되지 않습니다. 타임스탬프 제공자가 없거나 Contents 공간이 부족하게 구성된 B-T 요청은 타입이 지정된 구성 오류와 함께 실패-차단됩니다. Enterprise 패키지 없는 B-LT 또는 B-LTA 요청은 명명된 오류와 함께 실패-차단됩니다.
  • 클라우드 KMS 전략은 문서가 아니라 서명된 속성 다이제스트를 받고 원시 서명 바이트를 반환합니다.
주장표준조항
CMS 서명은 서명 딕셔너리 Contents 항목에 DER로 인코딩되어 저장됩니다.ISO 32000-2§12.8.1
메시지 다이제스트 계산 프로세스; 서명된 속성은 content-type과 message-digest를 담습니다.RFC 5652§5.4
검증자는 생산자가 계산한 다이제스트에 의존해서는 안 됩니다. 독립적으로 다시 계산하여 비교합니다(서명 검증 프로세스).RFC 5652§5.6
PAdES B-T signature-time-stamp는 서명자의 디지털 서명 값에 대해 계산된 타임스탬프 토큰 하나를 담는 서명되지 않은 속성입니다(Pro는 B-T를 생성함).ETSI EN 319 122-1§5.3
signature-time-stamp id-aa-timeStampToken 토큰의 MessageImprint는 SignerInfo 서명 필드 값의 해시입니다.RFC 3161Appendix A
검증 측에서 NextPDF는 signature-time-stamp의 MessageImprint를 SignerInfo 서명 값에 바인딩하며, 불일치, 누락/중복 토큰, 또는 SHA-1 imprint 시 실패-차단됩니다(엄격한 검증이며 인증이 아님).RFC 3161Appendix A
B-T 타임스탬프 토큰은 토큰이 생성된 시점인 UTC genTime을 담습니다.RFC 3161§2.4.2
인증 경로 검증은 신뢰 앵커로의 basic constraints 및 경로 입력을 검사합니다.RFC 5280§6.1
OCSP는 certStatus를 good, revoked, 또는 unknown으로 보고합니다.RFC 6960§2.2
B-LT 및 B-LTA는 장기 검증을 위한 문서 보안 저장소와 문서 타임스탬프를 추가합니다(Enterprise 경계).ETSI EN 319 142-2§5.5

모든 조항은 의역되었습니다. 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 경계를 명시합니다.

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