콘텐츠로 이동

서명 및 암호화의 보안 모델

이 페이지는 코어 엔진이 제공하는 두 가지 암호화 표면, 즉 문서 암호화(AES-256)와 문서 서명(CMS/PAdES)에 대한 보안 모델입니다. 각 메커니즘이 무엇을 보호하고 무엇을 보호하지 않는지, 그리고 신뢰 경계가 어디에 있는지를 명시합니다.

경계. 어떤 암호화 메커니즘을 지원한다는 것이 사용자의 배포 환경에서 그 보안을 보장하지는 않습니다. 암호화된 문서의 강도는 사용자가 선택하는 암호와 키 보관 방식에 따라 달라집니다. 서명의 의미는 인증서, 신뢰 앵커, 타임스탬프 기관, 그리고 검증자 정책에 따라 달라집니다. 인증서, 신뢰 앵커, 타임스탬프 기관, 그리고 검증자 정책은 모두 이 라이브러리 외부에 있습니다. 이 페이지는 메커니즘을 설명할 뿐, 결과를 인증하지는 않습니다.

Terminal window
composer require nextpdf/core:^3

ext-openssl은 서명 및 CMS 경로에 필요합니다.

암호화는 코어 엔진에서 ISO 32000-2 §7.6 AES-256 보안 처리기(AESV3, Revision 6)에 해당합니다(iso32000_2_sec7#x1.x65.p29). 이는 기밀성을 제공합니다. 즉, 암호가 없는 당사자는 문자열과 스트림 내용을 읽을 수 없습니다. 무결성이나 진정성은 제공하지 않습니다. 암호문은 여전히 잘리거나 교체될 수 있습니다. 잘리거나 교체된 암호문을 탐지하는 것은 암호화 처리기가 아니라 서명 또는 문서 MAC의 역할입니다.

권한(인쇄, 복사, 수정)은 별개의 개념이며 흔히 신뢰 경계를 오해하기 쉬운 지점입니다. ISO 32000-2 권한 플래그는 리더 협력적입니다(iso32000_2_sec7#x1.x71.p27). 규격을 준수하는 리더는 이를 따르지만, 이는 권고용 메타데이터일 뿐 암호학적 접근 제어가 아닙니다. 협력하지 않는 도구는 이를 무시할 수 있습니다. 엔진은 이를 충실히 출력하지만, 강제할 수는 없습니다.

서명은 ISO 32000-2 §12.8 에 따라 임베드된 CMS SignedData 구조입니다. 서명된 바이트 범위는 직접 객체이며, 다이제스트는 서명 Contents 값을 의도적으로 제외합니다(iso32000_2_sec12#x1.x121.p45). 따라서 서명은 문서를 포괄하지만 자기 자신은 포괄하지 않습니다.

이 페이지는 서명 자체를 다시 설명하지 않습니다. 암호화 진입점과 서명 오케스트레이터는 /modules/core/security//modules/core/security/signing/에서 설명합니다. 여기에서 다루는 모델은 메서드 형태가 아니라 의미와 경계에 관한 것입니다.

암호화는 암호가 없는 당사자로부터 기밀성을 보호하며, 그 이상은 보호하지 않습니다.

<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
$doc = new Document();
// AES-256 (AESV3 R6). The owner/user passwords gate read access only.
// Permission flags below are advisory: a conforming reader honors them.
$doc->encrypt(
userPassword: 'open-secret',
ownerPassword: 'owner-secret',
);
$doc->save('confidential.pdf');

프로덕션 서명 흐름은 소프트웨어에 보관된 키로 CMS/PAdES 기준선 서명을 적용합니다. 코어 에디션은 PAdES B-B 레벨을 생성합니다. 타임스탬프 기관이 구성된 경우, 코어 에디션은 PAdES B-T를 생성하며, 이는 B-B에 단일 RFC 3161 signature-time-stamp 비서명 속성을 더한 것입니다.

<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
use NextPDF\Security\Signature\CertificateInfo;
use NextPDF\Security\Signature\SignatureLevel;
$cert = CertificateInfo::fromPkcs12('signer.p12', 'pin');
$doc = new Document();
// B-B is the default. B-T adds a trusted timestamp over the signature value.
$doc->setSignature($cert, SignatureLevel::PAdES_B_B);
$doc->save('signed.pdf');

PAdES B-T는 정확히 B-B에 하나의 RFC 3161 signature-time-stamp 비서명 속성을 더한 것이며, 이 속성은 CMS SignerInfo에 담깁니다(rfc5652#p603). 타임스탬프는 서명 값을 타임스탬프 기관에서 얻은 신뢰할 수 있는 시각에 바인딩합니다(rfc3161#p208). 이는 검증 데이터 딕셔너리, 폐기 정보 구조, 또는 아카이브 타임스탬프 루프를 추가하지 않습니다. 이들은 별도로 범위가 정의된 장기 레벨이며 B-B/B-T 표면의 일부가 아니고, 이 페이지의 범위를 벗어납니다.

U-1. NextPDF는 ETSI EN 319 142-1 PAdES B-T에 대한 어떠한 독립적인 인증도 주장하지 않습니다. EN 319 142-1은 여기에서 사용되는 검증 코퍼스에 포함되어 있지 않습니다. B-T signature-time-stamp 요구 사항은 ETSI EN 319 122-1 §5.3에 대해 검증됩니다 — 이는 CAdES 기반이며, EN 319 142 PAdES 제품군이 참조로 가져옵니다(etsi_en_319_122_1#6.x40.p96) — RFC 3161, RFC 5652 및 ISO 32000-2 §12.8과 함께 검증됩니다. B-T 프로파일을 지원한다는 것이 적합성 또는 법적 유효성 인증을 의미하지는 않습니다. 그러한 판단은 독립적인 검증자가 내립니다.

  • 암호화 ≠ 무결성. 문서를 열 수 있는 리더도 변조된 사본을 받을 수 있습니다. 이를 탐지하는 것은 서명(또는 문서 MAC)뿐입니다. “변조 방지”는 암호화 처리기가 제공하는 속성이 아니며, 이 용어는 제품 주장으로 사용되지 않습니다.
  • 서명의 존재가 그 유효성을 의미하지는 않습니다. 문서가 서명 딕셔너리를 포함한다는 사실만으로는 인증서가 신뢰되는지, 만료되지 않았는지, 폐기되지 않았는지에 대해 아무것도 말해 주지 않습니다. 유효성을 확립하는 것은 서명자가 아니라 신뢰 당사자의 정책에 좌우되는 검증자 측 작업입니다.
  • 타임스탬프 신뢰는 외부에 있습니다. B-T 타임스탬프는 검증자가 이를 발급한 타임스탬프 기관에 부여하는 신뢰만큼만 의미가 있습니다. 라이브러리는 토큰을 획득하여 임베드합니다. 라이브러리는 TSA를 보증하지 않습니다.
  • FIPS 태세는 환경에 따라 결정됩니다. FIPS 검증을 받은 암호화 모듈에서 실행하는 것은 운영 환경과 모듈의 속성이며(fips_140_3#x12), PHP 라이브러리가 호출자를 대신해 주장할 수 있는 것이 아닙니다.

서명 경로는 하나의 바이트 범위 다이제스트와 하나의 CMS 구조를 계산합니다. B-T 확장은 타임스탬프 기관과의 동기식 왕복 한 번을 추가합니다. 암호화는 per-string/per-stream 대칭 연산입니다. 어느 쪽도 일반적인 렌더링 비용을 지배하지 않습니다. B-T를 위한 네트워크 왕복이 가변 비용이며, 이는 호출자의 TSA 선택에 달려 있습니다.

검토자가 적용할 수 있는 규칙 형태로 경계 진술을 다시 정리한 것입니다.

  1. 기밀성만 제공. AES-256 암호화는 암호가 없는 당사자로부터 내용을 보호합니다. 이는 무결성도, 진정성도, 접근 제어도 아닙니다(iso32000_2_sec7#x1.x65.p29).
  2. 권한은 권고용입니다. 권한 플래그는 리더 협력적이며 암호학적으로 강제되지 않습니다(iso32000_2_sec7#x1.x71.p27). 어떠한 제품 문구도 이 플래그가 동작을 방지한다고 주장하지 않습니다.
  3. 이 페이지에서는 B-B 와 B-T 만 다룹니다. 여기에 문서화된 코어/Pro 서명 표면은 B-B 와 그 B-T 타임스탬프 확장을 다루며, B-T를 언급할 때마다 위의 U-1 주의 사항을 함께 둡니다. 장기 아카이브 레벨은 별개의 유료 에디션 표면이며 여기에서는 의도적으로 설명하지 않습니다. 이 페이지에서는 검증 데이터, 폐기 정보, 또는 아카이브 타임스탬프 기능을 주장하지 않습니다.
  4. 법적 유효성 주장 없음. 생성된 서명은 암호학적 산출물입니다. 그것이 법적으로 유효한지는 이 라이브러리가 아니라 관할권, 인증서 정책, 그리고 신뢰 당사자에 따라 달라집니다.

지원은 적합성이 아닙니다. 엔진은 인용된 ISO 32000-2, RFC 3161, RFC 5652 및 ETSI EN 319 122-1 구성을 사용하는 출력을 생성합니다. 엔진은 PAdES, CAdES, 또는 eIDAS 적합성을 주장하지 않습니다. FIPS 140-3 검증은 module/environment 속성이며(fips_140_3#x12), 라이브러리의 주장이 아닙니다. 적합성 또는 법적 유효성에 대한 판단은 독립적인 검증자 또는 평가자가 내립니다.