Enterprise 에디션안정성: 실험적
포스트 양자 서명 프리뷰 — 심층 참조
한눈에 보기
섹션 제목: “한눈에 보기”이 페이지는 NextPDF Enterprise의 포스트 양자 서명(PQS) 프리뷰 표면에 대한 계약 수준 레퍼런스입니다. 세 가지 공개 심볼을 다룹니다: Pkcs11PqsAlgorithm 파라미터 집합 열거형, PqsPreviewFeature 프로세스 게이트, 그리고 PqsCapabilityStatus 디스크립터입니다. 또한 NEXTPDF_FEATURE_PREVIEW_PQS_HSM 환경 게이트도 문서화합니다.
이 표면은 **실험적(experimental)**이며 기본적으로 꺼져 있습니다. ML-DSA(FIPS 204)와 SLH-DSA(FIPS 205)의 알고리즘 식별자, 파라미터 집합, 서명 길이를 인식합니다. 인식은 검증 판정이 아닙니다. 포스트 양자 검증 경로는 존재하지 않습니다. AdES, FIPS 검증, 적합성에 대한 어떠한 주장도 하지 않으며, 프리뷰 플래그가 그러한 주장을 만들어낼 수도 없습니다. 이를 소비하는 서명 진입점인 Pkcs11Signer::signPqs()는 역량 페이지에 설명되어 있습니다.
제공 및 라이선스
섹션 제목: “제공 및 라이선스”이 역량은 NextPDF Enterprise(nextpdf/enterprise)에 포함되어 제공되며 Enterprise 등급 라이선스 봉투로 활성화됩니다. 해당 권한이 없는 배포는 이 역량의 클래스를 로드하지 않습니다. 에디션을 비교하고 라이선스를 받으세요.
라이선스는 Enterprise PKCS#11 표면 전체를 활성화합니다. 그 안의 포스트 양자 경로는 라이선스 등급과 무관하게 프리뷰로 남아 있습니다. 두 개의 독립적인 옵트인이 여전히 필요합니다: 여기에 문서화된 프로세스 게이트와 Pkcs11Signer의 서명자별 생성자 플래그입니다.
공개 API 표면
섹션 제목: “공개 API 표면”| 심볼 | 파라미터 | 기본 동작 | 반환값 | 던지거나 실패하는 조건 | 비고 |
|---|---|---|---|---|---|
Pkcs11PqsAlgorithm | 문자열 기반 열거형, 15개 케이스 | 케이스마다 하나의 FIPS 204 / FIPS 205 파라미터 집합을 명명 | 열거형 케이스 | 케이스 접근 시 아무것도 없음 | 케이스 값은 파라미터 집합 이름, 예: ML-DSA-65. |
Pkcs11PqsAlgorithm::isMlDsa() | 없음 | 계열 테스트 | bool | 던지지 않음 | MlDsa44, MlDsa65, MlDsa87에 대해 true. |
Pkcs11PqsAlgorithm::isSlhDsa() | 없음 | isMlDsa()의 부정 | bool | 던지지 않음 | 열두 개의 SLH-DSA 케이스에 대해 true. |
Pkcs11PqsAlgorithm::mechanismId() | 없음 | 계열을 후보 PKCS#11 v3.1 PQ 메커니즘 id로 매핑 | int | 런타임에 임시 Pkcs11 PQ 상수가 없으면 PHP Error | CKM_ML_DSA 또는 CKM_SLH_DSA; 두 id 모두 임시. |
Pkcs11PqsAlgorithm::parameterSetId() | 없음 | 케이스를 OASIS 파라미터 집합 판별자로 매핑 | int | 런타임에 임시 Pkcs11 PQ 상수가 없으면 PHP Error | CKP_* 값; 임시. |
Pkcs11PqsAlgorithm::signatureLength() | 없음 | 케이스에 대한 FIPS 규정 서명 바이트 길이 | int (양수) | 던지지 않음 | 서명 경로가 예상치 못한 길이의 반환 서명을 거부하는 데 사용. |
Pkcs11PqsAlgorithm::nistCategory() | 없음 | 주장된 NIST 보안 강도 범주 | int | 던지지 않음 | 1, 2, 3, 또는 5를 반환. |
PqsPreviewFeature | 문자열 기반 열거형, 1개 케이스 | 단일 케이스 PREVIEW_PQS_HSM; 상수 ENV_PREVIEW_PQS_HSM | 열거형 케이스 | 케이스 접근 시 아무것도 없음 | 프로세스 수준 프리뷰 게이트. |
PqsPreviewFeature::isEnabled() | 없음 | getenv()를 실시간으로 읽음; 문자열 1과 엄격 비교 | bool | 던지지 않음 | 변수가 없거나 0, true, yes를 포함한 그 밖의 어떤 값이든 꺼짐. |
PqsCapabilityStatus::__construct() | 명명된 readonly 필드 9개 | 임의의 디스크립터 인스턴스를 생성 | PqsCapabilityStatus | 던지지 않음 | current()가 정규 생성자. |
PqsCapabilityStatus::current() | 없음 | 둘러싼 프로세스에 대한 디스크립터를 생성 | PqsCapabilityStatus | 던지지 않음 | 모든 주장 불리언은 고정; hsmRoundtripPreviewEnabled만 게이트에 따라 달라짐. |
PqsCapabilityStatus::summary() | 없음 | 한 줄 상태 텍스트 | string | 던지지 않음 | 문구는 어떠한 제공, 보관, 검증 주장도 담지 않음. |
enum Pkcs11PqsAlgorithm: string
case MlDsa44 = 'ML-DSA-44';case MlDsa65 = 'ML-DSA-65';case MlDsa87 = 'ML-DSA-87';
case SlhDsaSha2_128s = 'SLH-DSA-SHA2-128s';case SlhDsaShake_128s = 'SLH-DSA-SHAKE-128s';case SlhDsaSha2_128f = 'SLH-DSA-SHA2-128f';case SlhDsaShake_128f = 'SLH-DSA-SHAKE-128f';
case SlhDsaSha2_192s = 'SLH-DSA-SHA2-192s';case SlhDsaShake_192s = 'SLH-DSA-SHAKE-192s';case SlhDsaSha2_192f = 'SLH-DSA-SHA2-192f';case SlhDsaShake_192f = 'SLH-DSA-SHAKE-192f';
case SlhDsaSha2_256s = 'SLH-DSA-SHA2-256s';case SlhDsaShake_256s = 'SLH-DSA-SHAKE-256s';case SlhDsaSha2_256f = 'SLH-DSA-SHA2-256f';case SlhDsaShake_256f = 'SLH-DSA-SHAKE-256f';
public function isMlDsa(): boolpublic function isSlhDsa(): boolpublic function mechanismId(): intpublic function parameterSetId(): intpublic function signatureLength(): intpublic function nistCategory(): intenum PqsPreviewFeature: string
case PREVIEW_PQS_HSM = 'preview_pqs_hsm';
public const string ENV_PREVIEW_PQS_HSM = 'NEXTPDF_FEATURE_PREVIEW_PQS_HSM';
public function isEnabled(): boolfinal readonly class PqsCapabilityStatus
public const string MATURITY_PREVIEW_EXPERIMENTAL = 'preview-experimental';public const string MECHANISM_STATUS_PROVISIONAL = 'provisional';
public function __construct( public bool $hsmRoundtripPreviewEnabled, public bool $generallyAvailable, public bool $adesCompliant, public bool $verificationAvailable, public bool $conformanceClaimed, public bool $recognitionOnly, public string $maturity, public string $mechanismIdStatus, public string $envGate,)
public static function current(): selfpublic function summary(): string동작 계약
섹션 제목: “동작 계약”- 파라미터 집합 카탈로그.
NextPDF\Enterprise\Security\Signature\Hsm\Pkcs11PqsAlgorithm은 세 개의 ML-DSA 집합(FIPS 204)과 열두 개의 SLH-DSA 집합(FIPS 205 §11.p12, Table 2)을 열거합니다. 각 케이스는 임시 메커니즘 id, 파라미터 집합 판별자, FIPS 규정 서명 바이트 길이, 그리고 주장된 NIST 범주로 매핑됩니다. - 서명 길이.
signatureLength()는 FIPS 204 §4.p15 (Table 2)에 따라MlDsa44,MlDsa65,MlDsa87에 대해 각각 2420, 3309, 4627 바이트를 반환합니다. SLH-DSA 케이스는 FIPS 205 §11 (Table 2)에 따라 수준과 변형별로 7856, 17088, 16224, 35664, 29792, 49856 바이트를 반환합니다. 이를 소비하는 서명자는 반환된 서명이 다른 길이를 가질 때HsmOperationException을 던지며, 이는 FIPS 204 §x34의 길이 거부 규율을 반영합니다. - 범주.
nistCategory()는 FIPS 204 §4.p9에 따라 ML-DSA 케이스에 대해 2, 3, 5를 반환합니다. SLH-DSA 케이스는 보안 파라미터 수준별로 1, 3, 5를 반환합니다. - 프로세스 게이트.
PqsPreviewFeature::PREVIEW_PQS_HSM은 기본적으로 꺼져 있습니다.isEnabled()는 환경 변수NEXTPDF_FEATURE_PREVIEW_PQS_HSM이 정확히 문자열1과 같을 때만true를 반환합니다. 읽기는 매 호출마다 실시간으로 이루어지며, 아무것도 메모이제이션되지 않습니다. - 보완적 게이팅. 프로세스 게이트는
Pkcs11Signer의 서명자별$enablePostQuantum생성자 옵트인과 별개입니다. 서명자별 옵트인이 없으면 서명 호출은 닫힌 상태로 실패합니다. 프로세스 게이트는 향후의 라운드트립 또는 보관 동작을 위한 단일 감사 가능 경계로 존재합니다. - 정직성 불변식.
NextPDF\Enterprise\Security\Signature\Hsm\PqsCapabilityStatus::current()는generallyAvailable,adesCompliant,verificationAvailable,conformanceClaimed를false로,recognitionOnly를true로 하드코딩합니다. 어떠한 구성, 생성자 옵션, 환경 플래그도 주장을 켜지 못합니다.hsmRoundtripPreviewEnabled만 게이트를 반영합니다. - 검증 경로 없음. NextPDF에는 포스트 양자 검증 경로가 없습니다. 인식된 알고리즘 식별자나 잘 형성된 서명 길이는 결코 수락 판정이 아닙니다.
엣지 케이스 및 실패 모드
섹션 제목: “엣지 케이스 및 실패 모드”- 게이트 변수를
0,true,yes,on, 또는 빈 문자열로 설정하면 게이트는 꺼진 상태로 남습니다. 정확한 문자열1만이 이를 활성화합니다. putenv()변경은 읽기가 실시간이므로 다음isEnabled()호출에서 적용됩니다. 프로세스 중간에 토글된 게이트는 즉시 관찰됩니다.mechanismId()와parameterSetId()는Pkcs11확장 네임스페이스에서 상수를 해석합니다. 임시 포스트 양자 확장 상수가 없는 런타임은 호출 시점에 PHPError(정의되지 않은 상수)로 실패합니다.- 메커니즘 및 파라미터 집합 id는 임시입니다. OASIS는 PKCS#11 v3.1 포스트 양자 레지스트리를 확정하지 않았습니다. 펌웨어가 다른 id를 할당하는 토큰은 PKCS#11 계층에서 실패하며, 운영자는 프리뷰를 활성화하기 전에 펌웨어 id를 확인해야 합니다.
- 소비하는 서명자가 수락하는 서명 컨텍스트는 255바이트로 제한되며, 이는 FIPS 204 서명 입력 계약(§x43.p2)과 일치합니다. 더 긴 컨텍스트는 어떤 토큰 호출 이전에
InvalidArgumentException을 던집니다. PqsCapabilityStatus::__construct()는 public이므로 손으로 만든 인스턴스는 임의의 불리언을 담을 수 있습니다. 그러한 인스턴스는 단지 값 객체일 뿐입니다. 어떤 서명 동작도 변경하지 않습니다.current()가 정규의, 하드코딩된 생성자입니다.- 소비하는 서명자의 무작위화 대 결정론 선택은 FIPS 205 §x65.p7 의미론을 따릅니다: 헤지드 서명이 기본값입니다. 이 플래그는 항상 자체 논스로 무작위화하는 ML-DSA에서는 무시됩니다.
FIPS 모드 동작
섹션 제목: “FIPS 모드 동작”ML-DSA와 SLH-DSA는 FIPS 204 및 FIPS 205 알고리즘이지만, 이 프리뷰는 어떠한 FIPS 140-3 검증 주장도 담지 않습니다. 이 경로에 대해 FIPS 검증된 포스트 양자 HSM 라운드트립은 확립된 바 없습니다. 보안 심화 레퍼런스에 문서화된 Enterprise FIPS 모드 암호 정책 프로필은 고전적 서명 알고리즘을 게이팅하지만, PQS 표면을 검증된 집합에 편입하지는 않습니다. FIPS 모드를 활성화해도 포스트 양자 서명이 FIPS 검증되지는 않습니다. FIPS 검증된 서명이 요구되는 곳에는 이 프리뷰를 배포하지 마십시오.
적합성
섹션 제목: “적합성”| 주장 | 표준 | 절 |
|---|---|---|
| ML-DSA-44/65/87은 주장된 NIST 범주 2, 3, 5를 가진다. | FIPS 204 | §4.p9 |
| ML-DSA 서명 크기는 2420, 3309, 4627 바이트이다. | FIPS 204 | §4.p15 (Table 2) |
| 서명 컨텍스트 바이트 문자열은 255바이트로 제한된다. | FIPS 204 | §x43.p2 |
| 잘못된 길이의 서명이나 키는 거부되어야 한다. | FIPS 204 | §x34 |
| 열두 개의 SLH-DSA 파라미터 집합이 승인된다. | FIPS 205 | §11.p12 (Table 2) |
| SLH-DSA 서명 크기는 Table 2를 따른다 (128s에 대해 7856 바이트). | FIPS 205 | §11.p6 |
| 헤지드 서명이 기본값이며, 결정론적 변형이 존재한다. | FIPS 205 | §x65.p7 |
| CAdES/PAdES 스위트 카탈로그는 RSA와 EC-DSA만 프로파일링한다. | ETSI TS 119 312 V1.5.1 | §7.x7.p10 (Table A.1) |
| PKCS#11 PQ 메커니즘 id는 임시이다. | OASIS PKCS#11 v3.1 | 제품 소스 기반 |
모든 절은 의역된 것입니다. NextPDF는 규범 텍스트를 재현하지 않습니다. NextPDF는 어떠한 인증도 보유하지 않으며 어떠한 인증도 부여하지 않습니다. 위의 진술은 식별자, 길이, 경계에 대한 구조적 정합성 진술입니다. 이는 적합성 테스트 결과가 아니며, 제3자 증명이 아니며, FIPS, OASIS, 또는 ETSI 적합성 주장이 아닙니다. PqsCapabilityStatus는 이 자세를 코드로 부호화합니다: 모든 구성에서 conformanceClaimed는 false, adesCompliant는 false, verificationAvailable는 false입니다. 이 프리뷰가 생성한 서명은 장기 보관을 위한 AdES 규격에 부합하지 않으며, 대부분의 PDF 뷰어는 검증 시점에 이를 거부합니다.
개발 노트
섹션 제목: “개발 노트”-
OASIS PKCS#11 포스트 양자 메커니즘 레지스트리는 확정되지 않았습니다; 여기서 사용된
CKM_ML_DSA/CKM_SLH_DSAid와 파라미터 집합 상수는 임시이며, 스펙 인용이 아니라 제품 소스에서 기반한 것입니다. -
현재 마일스톤은 모의 테스트된 준비 상태입니다. 실제 포스트 양자 펌웨어 HSM 라운드트립은 아직 검증되지 않았습니다.
-
프로덕션에서는 두 게이트를 모두 꺼진 상태로 유지하십시오. 이 프리뷰는 고전적 RSA/ECDSA PKCS#11 경로에 없는 어떠한 프로덕션 역량도 추가하지 않습니다.
-
실제 하드웨어로 평가하기 전에, 토큰 펌웨어의 메커니즘 및 파라미터 집합 id를 임시 값과 대조하여 확인하십시오. 불일치는 NextPDF 내부가 아니라 PKCS#11 계층에서 실패합니다.
-
도구나 UI에서 PQS 상태를 노출할 때는
PqsCapabilityStatus::current()를 단일 진실 공급원으로 취급하십시오. 그 불리언을 손으로 다시 기술하지 마십시오. -
summary()출력은 로그와 상태 엔드포인트에 안전합니다; 어떠한 제공이나 검증 주장도 담지 않도록 문구가 작성되었습니다.
함께 보기
섹션 제목: “함께 보기”- 포스트 양자 HSM 서명(PQS) 프리뷰 — 역량 페이지
- 보안 — 심화 레퍼런스 (HSM, PKCS#11, FIPS 모드)
- 서명 — 심화 레퍼런스
- HSM 서명 설정
- 보안 / 서명 (Core)
발행 경계
섹션 제목: “발행 경계”이 페이지는 외부에서 관찰 가능한 동작과 지원되는 공개 API 표면만 문서화합니다. 내부 네임스페이스 경로, 헬퍼 클래스, 메커니즘 테이블, 런북 파일명, 티켓 접두사는 범위를 벗어납니다.