Enterprise 에디션
Security — 심층 참조 (HSM, PKCS#11, FIPS-mode)
한눈에 보기
섹션 제목: “한눈에 보기”이 페이지는 NextPDF Enterprise 보안 표면에 대한 결합된 심층 참조입니다. PKCS#11을 통한 하드웨어 토큰 서명, OpenSSL 명령줄 인터페이스(CLI)를 통한 하위 프로세스 서명, FIPS 암호화 정책 프리셋, 런타임 FIPS 가드, 그리고 전원 투입 자가 시험 가드를 다룹니다. 두 개의 집중된 동반 문서가 있습니다. 서명자 세부 사항은 HSM — 심층 참조, FIPS 모듈 세부 사항은 FIPS 140 — 심층 참조를 참조하십시오. 포스트퀀텀 서명 경로는 적합성 주장이 없는 미리보기(preview)입니다. NextPDF는 어떠한 인증도 보유하지 않으며 부여하지도 않습니다. 지원은 적합성과 같지 않고, 적합성은 인증과 같지 않습니다.
가용성 및 라이선스
섹션 제목: “가용성 및 라이선스”이 기능은 NextPDF Enterprise (nextpdf/enterprise)로 제공되며 Enterprise 등급 라이선스 엔벨로프로 활성화됩니다. 해당 사용 권한이 없는 배포는 이 기능의 클래스를 로드하지 않습니다. 에디션 비교 및 라이선스 받기.
공개 API 표면
섹션 제목: “공개 API 표면”composer require nextpdf/enterprise:^3서명 타입은 NextPDF\Enterprise\Security\Signature\Hsm에, FIPS 타입은 NextPDF\Enterprise\Security\Fips에, 컴포지션 루트는 NextPDF\Enterprise\Bootstrap에 있습니다. 두 서명자 모두 Core NextPDF\Contracts\HsmSignerInterface 계약을 구현합니다. 정책은 Core NextPDF\Contracts\CryptoPolicyInterface 및 NextPDF\Contracts\PreOperationalSelfTestInterface 계약을 구현합니다.
| 심볼 | 매개변수 | 기본 동작 | 반환 | 발생 예외 또는 실패 | 비고 |
|---|---|---|---|---|---|
Pkcs11Signer::__construct() | string $libraryPath, int $slotId, string $pin, string $certLabel, ?string $keyLabel = null, array $chainDer = [], bool $enablePostQuantum = false, ?FipsSignatureEnforcer $fipsEnforcer = null | 벤더 라이브러리를 열고, 슬롯에 로그인하며, 인증서와 키 알고리즘 메타데이터를 로드합니다 | — | ext-pkcs11이 없거나 토큰 접근이 실패하면 HsmOperationException | PIN과 라벨은 #[SensitiveParameter]입니다. 프로세스당 라이브러리 경로마다 하나의 모듈 핸들이 캐시됩니다 |
Pkcs11Signer::isAvailable() | 없음 | ext-pkcs11이 로드되었는지 보고합니다 | bool | 없음 | 정적(static); 생성 전에 확인하십시오 |
Pkcs11Signer::sign() | string $data, string $algorithm = 'sha256WithRSAEncryption' | 토큰에서 서명합니다. 원시(raw) ECDSA 출력은 DER ECDSA-Sig-Value로 변환됩니다 | string 원시 서명 바이트 | HsmOperationException(키를 찾을 수 없음, 토큰 실패); InvalidArgumentException(매핑되지 않은 알고리즘); 인포서가 연결된 경우 서명 전에 FipsViolationException / FipsModuleErrorStateException | 닫힌 알고리즘 집합; 동작 계약 참조 |
Pkcs11Signer::signPqs() | string $data, Pkcs11PqsAlgorithm $algorithm, string $context = '', bool $randomized = true | $enablePostQuantum이 설정되지 않으면 거부됩니다. 잠정적인 PKCS#11 포스트퀀텀 메커니즘을 디스패치합니다 | string 원시 서명 바이트 | HsmOperationException(비활성화됨, 토큰 실패, 서명 길이 불일치); InvalidArgumentException(255바이트 초과 컨텍스트) | 미리보기; 적합성 주장 없음 |
Pkcs11Signer accessor surface | 없음 | 읽기 전용 생성 결과 | bool / string / array<string> | 없음 | isPostQuantumEnabled, getCertificateDer, getCertificateChainDer, getPublicKeyAlgorithm |
OpenSslCliSigner::__construct() | string $keyUri, string $certPath, string $pin, array $extraCertPaths = [], OpenSslCliBackend $backend = OpenSslCliBackend::Auto, string $opensslBinary = 'openssl', int $timeoutSeconds = 30, ?string $modulePath = null, ?string $configPath = null, bool $legacyPinDelivery = false, ?FipsSignatureEnforcer $fipsEnforcer = null | proc_open을 확인하고, 바이너리를 탐지하며, 백엔드를 해석하고, 인증서를 로드합니다 | — | HsmOperationException(proc_open 비활성화, 모듈/구성/인증서 파일 누락, 백엔드 없음); InvalidArgumentException($keyUri 내 pin-value) | Auto는 OpenSSL 3.x provider를 먼저, 그다음 engine을 선호합니다 |
OpenSslCliSigner::sign() | string $data, string $algorithm = 'sha256WithRSAEncryption' | openssl 하위 프로세스에서 서명합니다. 기본적으로 PIN은 임시 0600 pin-source 파일을 통해 전달됩니다 | string 원시 서명 바이트 | HsmOperationException(타임아웃, PIN 거부, 키를 찾을 수 없음, 빈 출력); InvalidArgumentException(매핑되지 않은 알고리즘); 서명 전 FIPS 게이트 예외 | 하위 프로세스는 $timeoutSeconds 후 종료됩니다. stderr는 편집(redacted)됩니다 |
OpenSslCliSigner accessor surface | 없음 | 읽기 전용 생성 결과 | string / array<string> / OpenSslCliBackend | 없음 | getCertificateDer, getCertificateChainDer, getPublicKeyAlgorithm, getCertificatePem, getResolvedBackend, getOpensslVersion |
OpenSslCliBackend | — | 열거형(Enum): Provider, Engine, Auto | — | 없음 | CLI 서명자의 백엔드 선택 |
Pkcs11PqsAlgorithm | — | ML-DSA 및 SLH-DSA 매개변수 집합의 열거형 | — | 없음 | 헬퍼: isMlDsa, isSlhDsa, mechanismId, parameterSetId, signatureLength, nistCategory |
PqsCapabilityStatus::current() | 없음 | 프로세스에 대한 정직한 포스트퀀텀 태세를 구성합니다 | PqsCapabilityStatus | 없음 | 모든 적합성 주장 불리언은 false로 하드코딩되어 있습니다. 어떤 플래그도 이를 켤 수 없습니다 |
HsmSignerProviderAdapter | HsmSignerInterface $hsm, string $providerId, SignatureAlgorithm $algorithm = SignatureAlgorithm::Pkcs1v15 | HSM 구현체를 통합된 SignerProviderInterface로 노출합니다 | SPI에 따름 | KeyManagementException(null이 아닌 키 버전); SignatureFailedException(드라이버 실패, 빈 서명) | Provider id: pkcs11-{module-id}, openssl-cli |
HsmOperationException | — | 모든 HSM 서명 경로에 대한 타입이 지정된 실패 | — | — | Core NextPdfException를 확장합니다 |
FipsCryptoPolicy::strict() / ::standard() | ?FipsSelfTest $selfTest = null | 팩토리 프리셋; strict는 FIPS 140-3 프로파일이고, standard는 AES-128-CBC를 추가합니다 | FipsCryptoPolicy | 없음 | 불변 허용 목록; FIPS 모드 동작 참조 |
FipsCryptoPolicy predicate surface | string / int 입력 | 허용 목록 멤버십 검사 | bool / string | 없음 | isHashAlgorithmAllowed, isSignatureAlgorithmAllowed, isEncryptionAlgorithmAllowed, isKeyStrengthAllowed, getPreferredHashAlgorithm, getName |
FipsCryptoPolicy::assertPreOperational() | 없음 | 전원 투입 자가 시험을 실행(또는 재생)합니다 | void | FipsModuleErrorStateException | 첫 번째 암호화 작업에서 Core 강제(enforcement) 심(seam)에 의해 구동됩니다 |
FipsModeGuard::__construct() | CryptoPolicyInterface $policy, ?FipsBootGuard $bootGuard = null, ?FipsAuditLogger $auditLogger = null | 정책을 단언 스타일 경계로 감쌉니다 | — | 없음 | 부트 가드가 없으면 자가 시험 게이트가 없습니다(정책 전용) |
FipsModeGuard assert surface | string / int 입력 | 거부 카탈로그를 먼저, 그다음 허용 목록; 모든 예외 발생 전에 감사 기록 | void | FipsViolationException; FipsModuleErrorStateException(부트 가드 연결됨) | assertHashAllowed, assertSignatureAlgorithmAllowed, assertEncryptionAllowed, assertKeyStrengthAllowed, 그리고 getPolicy |
FipsBootGuard::report() / ::rerun() | 없음 | 자가 시험 배터리를 실행합니다(캐시됨 / 강제됨) | FipsSelfTestReport | 없음 | ERROR 보고서는 프로세스를 래치합니다. 통과하는 재실행은 결코 래치를 해제하지 않습니다 |
FipsBootGuard::assertOperational() | 없음 | 모듈이 OPERATIONAL임을 단언합니다 | void | FipsModuleErrorStateException | 고정적(sticky): 프로세스에 래치된 ERROR는 깨끗한 인스턴스조차 거부합니다 |
FipsBootGuard::status() | 없음 | 캐시된 상태를 보고합니다 | FipsSelfTestStatus | 없음 | PRE_OPERATIONAL, OPERATIONAL, 또는 ERROR |
FipsSelfTest::run() | 없음 | 전체 알려진 답 테스트 배터리를 실행합니다. 절대 단락(short-circuit)하지 않습니다 | FipsSelfTestReport | 없음 | 생성자는 결정론적 테스트를 위해 주입 가능한 해시 및 무작위 바이트 공급자를 받습니다 |
FipsSelfTestReport / FipsSelfTestResult / FipsSelfTestStatus | — | 보고서 값 객체와 상태 열거형 | — | FipsSelfTestReport::assertOperational()은 FipsModuleErrorStateException을 발생시킵니다 | results는 감사 증거를 위해 항상 모든 결과를 나열합니다 |
FipsSignatureEnforcer::assertSignatureGenerationAllowed() | string $algorithm, string $certificatePem | 서명 OID와 키 강도를 해석한 다음 가드에 위임합니다 | void | FipsViolationException(허용되지 않거나 분류 불가, 실패-차단) | FIPS 모드에서 두 서명자가 모두 sign() 시작 부분에서 호출하는 초크포인트(chokepoint) |
FipsAuditLogger | CryptoPolicyInterface $policy, LoggerInterface $logger | 결정마다 ALLOW(INFO) / DENY(WARNING) 기록을 방출합니다 | 로그 호출당 bool | 없음 | logHashOperation, logSignatureOperation, logEncryptionOperation, logKeyStrengthCheck |
FipsTransitioningAlgorithms | string / int 입력 | 정적 NIST SP 800-131A 거부 카탈로그 | bool / array | 없음 | 모든 가드 경계 아래의 명시적 거부 계층 |
FipsBootstrap::boot() / ::lazy() | ?CryptoPolicyInterface $policy = null, ?FipsSelfTest $selfTest = null, ?LoggerInterface $auditLogger = null | 부트 가드, 정책, 모드 가드를 구성합니다. boot()는 자가 시험을 즉시 실행하고, lazy()는 이를 첫 번째 경계로 지연시킵니다 | FipsModeGuard | boot(): 테스트 실패 시 FipsModuleErrorStateException | 기본값은 strict 정책입니다 |
FipsBootstrap::signatureEnforcer() | ?CryptoPolicyInterface $policy = null, ?FipsSelfTest $selfTest = null | 모듈을 부팅하고 서명자를 위한 생성 시점 게이트를 반환합니다 | FipsSignatureEnforcer | FipsModuleErrorStateException | 결과를 서명자의 $fipsEnforcer 매개변수에 전달하십시오 |
FipsBootstrap::selfTestReport() | ?FipsSelfTest $selfTest = null | 배터리를 온디맨드로 실행하고 요약합니다 | array{status, operational, failed} | 없음 | 상태 엔드포인트와 CLI 하위 명령을 위한 것입니다 |
FipsViolationException / FipsModuleErrorStateException | — | 타입이 지정된 FIPS 실패 | — | — | 각각 policyName / violatingItem / reason 및 failedResults를 노출합니다 |
public function __construct(private readonly string $libraryPath, private readonly int $slotId, #[SensitiveParameter] private readonly string $pin, #[SensitiveParameter] private readonly string $certLabel, #[SensitiveParameter] private readonly ?string $keyLabel = null, array $chainDer = [], private readonly bool $enablePostQuantum = false, ?FipsSignatureEnforcer $fipsEnforcer = null)public static function isAvailable(): boolpublic function sign(string $data, string $algorithm = 'sha256WithRSAEncryption'): stringpublic function signPqs(string $data, Pkcs11PqsAlgorithm $algorithm, string $context = '', bool $randomized = true): stringpublic function __construct(private string $keyUri, string $certPath, #[SensitiveParameter] private string $pin, array $extraCertPaths = [], private OpenSslCliBackend $backend = OpenSslCliBackend::Auto, private string $opensslBinary = 'openssl', private int $timeoutSeconds = 30, private ?string $modulePath = null, private ?string $configPath = null, private bool $legacyPinDelivery = false, private ?FipsSignatureEnforcer $fipsEnforcer = null)public function sign(string $data, string $algorithm = 'sha256WithRSAEncryption'): stringpublic static function strict(?FipsSelfTest $selfTest = null): selfpublic static function standard(?FipsSelfTest $selfTest = null): selfpublic function assertPreOperational(): voidpublic function __construct(private CryptoPolicyInterface $policy, private ?FipsBootGuard $bootGuard = null, private ?FipsAuditLogger $auditLogger = null)public function assertHashAllowed(string $algorithm): voidpublic function assertSignatureAlgorithmAllowed(string $oid): voidpublic function assertEncryptionAllowed(string $algorithm): voidpublic function assertKeyStrengthAllowed(string $keyType, int $bitLength): voidpublic function getPolicy(): CryptoPolicyInterfacepublic static function boot(?CryptoPolicyInterface $policy = null, ?FipsSelfTest $selfTest = null, ?LoggerInterface $auditLogger = null): FipsModeGuardpublic static function lazy(?CryptoPolicyInterface $policy = null, ?FipsSelfTest $selfTest = null, ?LoggerInterface $auditLogger = null): FipsModeGuardpublic static function signatureEnforcer(?CryptoPolicyInterface $policy = null, ?FipsSelfTest $selfTest = null): FipsSignatureEnforcerpublic static function selfTestReport(?FipsSelfTest $selfTest = null): array동작 계약
섹션 제목: “동작 계약”- 계약 해석. 두 서명자 모두 Core
HsmSignerInterface를 구현하고, 정책은 CoreCryptoPolicyInterface를 구현합니다. 호출 코드는 계약에 의존하므로, 에디션 업그레이드는 호출 지점이 아니라 컴포지션을 변경합니다. - 키 보관. 개인 키는 토큰 경계를 결코 벗어나지 않습니다.
Pkcs11Signer는 작업을 토큰에 위임하고,OpenSslCliSigner는 PKCS#11 URI 키 참조를 하위 프로세스에 전달합니다. NextPDF는 서명 키를 저장, 생성하거나 그 보안을 보장하지 않습니다. 키 보호는 운영자의 보관 책임입니다(NIST SP 800-57 Part 1 Rev.5 §5.5.2). - 세션 및 로그인. 토큰 서명 작업, 세션, 사용자 로그인은 PKCS#11 v3.1 §5를 따릅니다. 인증서 라벨과 개인 키 라벨은 다를 수 있습니다. 생성자는 그러한 토큰을 위해 별도의 키 라벨을 받습니다.
- 닫힌 알고리즘 집합. 서명자는 정확히 다음만 받습니다. SHA-256/384/512를 사용하는 RSA PKCS#1 v1.5, SHA-256/384/512를 사용하는 RSASSA-PSS, 그리고 SHA-256/384/512를 사용하는 ECDSA(
Pkcs11Signer는ecdsa-raw도 받습니다). 그 외 식별자는InvalidArgumentException을 발생시킵니다. 대체 알고리즘은 결코 서명되지 않습니다. - PSS 솔트 바인딩. 모든 PSS 변형에서 솔트 길이는 다이제스트 길이와 같으며 — 32, 48, 또는 64바이트 — 해시 및 마스크 생성 매개변수는 선택된 다이제스트와 일치합니다(PKCS#11 v3.1 §5).
- ECDSA 변환. 토큰 ECDSA 메커니즘은 원시 서명을 반환합니다.
sign()은 PDF 및 OpenSSL 상호 운용을 위해 이를 DER 인코딩된ECDSA-Sig-Value형태로 변환합니다. 서명 생성은 FIPS 186-5 §6.3.2를 따릅니다. - 프리셋 내용. strict 프리셋은 SHA-256/384/512; 해당 해시를 사용하는 RSA 및 ECDSA 서명 OID; RSASSA-PSS; AES-256-CBC 및 AES-256-GCM; 최소 RSA 2048 및 EC 256을 허용합니다. standard 프리셋은 레거시 상호 운용을 위해 AES-128-CBC를 추가로 허용합니다. 모든 AES-GCM 사용은 키마다 고유한 초기화 벡터를 요구합니다(NIST SP 800-38D §5).
- 2계층 강제. 모든 가드 경계는 먼저 명시적인 NIST SP 800-131A 거부 카탈로그를 참조한 다음, 정책 허용 목록을 참조합니다. 거부 계층은 감사에 명확한 “허용되지 않음(disallowed)” 신호를 생성합니다. 허용 목록은 여전히 권위를 갖습니다.
- 전원 투입 자가 시험. 배터리는 SHA-256/384/512, HMAC-SHA-256, AES-256-CBC, AES-256-GCM, ECDSA P-256 쌍 일관성 시험, 그리고 무작위 비트 상태 점검을 다룹니다. Core 경로에서 정책 하에 첫 번째 암호화 작업이 프로세스당 한 번, 실패-차단으로 이를 실행합니다. 실패는 모듈을 ERROR 상태로 만듭니다. 리셋될 때까지 암호화 서비스가 거부됩니다. 이는 ISO/IEC 19790:2025 §7.10, §7.10.2, §7.10.3, §7.10.3.p3을 따릅니다.
- 고정 ERROR 상태. 관찰된 ERROR는 전체 프로세스 동안 래치됩니다. 새 정책이나 부트 가드를 생성해도 이를 세탁할 수 없습니다. 통과하는 재실행도 이를 해제하지 않습니다. 오직 프로세스 재시작 — 진정한 전원 순환 — 만이 상태를 리셋합니다.
- 생성 게이트 전용.
FipsSignatureEnforcer는 새 서명 생성을 관장합니다. 기존 서명의 검증은 레거시 사용이며 결코 인포서를 거치지 않습니다. - 감사 추적. 가드가 감사 로거와 함께 구성되면, 모든 경계는 작업을 허용하거나 거부하기 전에 ALLOW 또는 DENY 기록을 방출합니다. 로거는 가드가 강제하는 것과 동일한 정책을 참조하므로, 기록된 결정은 벗어날 수 없습니다.
엣지 케이스 및 실패 모드
섹션 제목: “엣지 케이스 및 실패 모드”ext-pkcs11없이Pkcs11Signer를 생성하면 즉시HsmOperationException이 발생합니다. 이 확장은 표준 PHP 배포판에 번들로 제공되지 않습니다.- 어떤 토큰 객체와도 일치하지 않는 인증서 또는 개인 키 라벨은 누락된 객체 클래스를 명시하는
HsmOperationException을 발생시킵니다. OpenSslCliSigner는 생성 시pin-value를 포함하는$keyUri를 실패-차단으로 거부합니다. 대신 PIN은 안전한 pin-source 경로를 통해 전달됩니다.- FIPS 모드에서, 알려진 서명 OID로 매핑될 수 없는 알고리즘 식별자는 실패-차단으로 거부됩니다. 공개 키 강도를 판별할 수 없는 인증서도 마찬가지입니다.
- 알 수 없는 키 타입은 기본적으로 거부됩니다. 정책은 결코 더 약한 알고리즘으로 후퇴하지 않습니다.
- 실패한 알려진 답 테스트는 실패한 결과를 담은
FipsModuleErrorStateException을 발생시킵니다. 프로세스의 이후 모든 경계는 재시작할 때까지 실패를 반복합니다. - 부트 가드 없이 생성된 가드는 허용 목록을 강제하지만 자가 시험 게이트를 제공하지 않습니다. 프로덕션 FIPS 컴포지션은 부트스트랩을 통해 이를 공급합니다.
signPqs()는 생성자 옵트인이 설정되지 않으면 실행을 거부합니다. 255바이트를 초과하는 컨텍스트 문자열은InvalidArgumentException을 발생시킵니다(FIPS 204 §5.4). 선택된 매개변수 집합과 바이트 길이가 일치하지 않는 반환된 서명은 인코딩에 도달하기 전에 거부됩니다.
FIPS 모드 동작
섹션 제목: “FIPS 모드 동작”strict 모드에서 FIPS 허용: SHA-256/384/512; 해당 해시를 사용하는 RSA PKCS#1 v1.5 및 RSA-PSS; 해당 해시를 사용하는 ECDSA; AES-256-CBC 및 AES-256-GCM; RSA 최소 2048비트, EC 최소 256비트. strict 모드에서 FIPS 거부: 더 약하거나 레거시인 해시, 비승인 서명 OID, AES-128(standard 프리셋에서만 허용), 그리고 최소 강도 미만의 모든 키. 최소 RSA 키 길이와 전환 상태는 NIST SP 800-131A Rev.2 §3을 따릅니다. ECDSA 곡선과 해시 페어링은 FIPS 186-5 §6.1.1을 따릅니다. 이 경로는 실패-차단이며 결코 더 약한 알고리즘으로 대체하지 않습니다.
NextPDF Enterprise는 FIPS 검증 암호화 모듈이 아니며 FIPS 인증 주장을 하지 않습니다. NextPDF Enterprise는 FIPS 검증 암호화 공급자 — 예를 들어 FIPS 검증 OpenSSL provider — 또는 FIPS 검증 HSM으로 구성된 경우에만 FIPS 호환 모드로 작동합니다. FIPS 모드 정책은 규정 준수를 보조합니다. 인증이 아닙니다. 이 저장소에는 FIPS 인증 아티팩트가 존재하지 않습니다.
적합성
섹션 제목: “적합성”| 주장 | 표준 | 조항 |
|---|---|---|
| 토큰 서명 작업, 세션, 사용자 로그인 의미론 | PKCS#11 v3.1 | §5 (sign) |
| PSS 솔트 길이는 다이제스트 길이와 같음 | PKCS#11 v3.1 | §5 (PSS sLen) |
| ECDSA 서명 생성; 곡선과 해시 페어링 | FIPS 186-5 | §6.3.2; §6.1.1 |
| 최소 RSA 키 길이 및 서명 생성 전환 상태 | NIST SP 800-131A Rev.2 | §3 |
| 자가 시험 범주, 문서화, 조건부 트리거, 서로소 집합 | ISO/IEC 19790:2025 | §7.10, §7.10.2, §7.10.3, §7.10.3.p3 |
| AES-GCM 초기화 벡터 고유성 | NIST SP 800-38D | §5 |
| 키 보호 및 보관 책임 | NIST SP 800-57 Part 1 Rev.5 | §5.5.2 |
| 포스트퀀텀 서명 컨텍스트 문자열은 255바이트로 제한됨 | FIPS 204 | §5.4 |
모든 조항은 의역되었으며, 규범적 텍스트는 재현되지 않습니다. 이것들은 NextPDF 코드에 대한 기능 주장이며, 인증이 아닙니다. 생성된 서명이 검증되는지 여부는 검증자 자신의 신뢰 구성에 대한 검증자의 결정입니다. FIPS 모드 정책은 규정 준수 보조 기능이며, 법률 의견이 아닙니다. 자체 준수 및 법률 자문에게 문의하십시오. 이 모듈은 암호화 기능에 관한 것입니다. 자체 검토에서 이를 보안에 민감한 것으로 취급하십시오.
개발 참고 사항
섹션 제목: “개발 참고 사항”- 부트스트랩을 통해 FIPS 모드를 구성하십시오. 시작 게이트에는
boot(), 배터리를 첫 번째 경계로 지연시키려면lazy(), 서명자의$fipsEnforcer매개변수에는 인포서 팩토리를 사용합니다. 비-FIPS 배포는null을 전달하며 동작은 변경되지 않습니다. bin/nextpdf-enterprisefips:self-test하위 명령은 배터리를 온디맨드로 실행하고 ERROR 상태에서 0이 아닌 값으로 종료합니다. 이를 유지보수 작업이나 관리자 전용 상태 엔드포인트에 연결하십시오(ISO/IEC 19790:2025 온디맨드 자가 시험).FipsBootGuard::resetProcessErrorLatchForTesting()은@internal이며 테스트 전용입니다. 프로덕션 코드는 결코 이를 호출하지 않습니다. 이는 고정 ERROR 상태를 무력화하기 때문입니다.- 서명자를 한 번 생성하고 재사용하십시오. 생성은 로그인하고 인증서를 읽으며, 라이브러리별 모듈 캐시는 동일한 라이브러리에 대한 반복 생성을 안전하게 만듭니다.
- PIN은 시크릿 관리자에서 공급하십시오. 이는
#[SensitiveParameter]이며, 결코 로그되거나 직렬화되지 않습니다. 구성에 커밋하지 마십시오. - 운영자는 토큰 프로비저닝, PIN 처리, 슬롯 구성, 네트워크 연결 HSM의 네트워크 보호, 그리고 신뢰 구성을 소유합니다. 이 페이지는 토큰 PIN 정책 내부나 벤더 자격 증명 자료를 노출하지 않습니다.
- 프로덕션 AdES 서명에 포스트퀀텀 미리보기를 활성화하지 마십시오. AdES 암호 스위트 카탈로그는 아직 포스트퀀텀 스위트를 인정하지 않으며, 대부분의 PDF 뷰어가 그러한 서명을 거부하고, 하드웨어 왕복 검증이 완료되지 않았습니다. 내부 메커니즘 세부 사항은 소스 저장소의 내부 문서에 남아 있으며 이 매뉴얼의 범위 밖입니다.
공개 범위
섹션 제목: “공개 범위”이 페이지는 외부에서 관찰 가능한 동작과 지원되는 공개 API 표면만 문서화합니다. 내부 네임스페이스 경로, 헬퍼 클래스, 메커니즘 표, 런북 파일명, 티켓 접두사는 범위 밖입니다.
함께 보기
섹션 제목: “함께 보기”- Security — NextPDF Enterprise — 이 표면의 기능 페이지.
- 하드웨어 보안 모듈 서명 (PKCS#11) — 설정, 구성, 검증 단계.
- FIPS 140 암호화 정책 — FIPS 기능 페이지.
- HSM — 심층 참조 — 집중된 서명자 참조.
- FIPS 140 — 심층 참조 — 집중된 FIPS 모듈 참조.
- Security — NextPDF Pro — Pro 등급 보안 표면.
- Security — NextPDF Core — Core 보안 기준선.