FIPS 140-2/3 암호화 정책 및 자체 테스트
한눈에 보기
섹션 제목: “한눈에 보기”NextPDF Enterprise는 서명 또는 암호화 작업에서 사용할 수 있는 암호화 선택을 Federal Information Processing Standards(FIPS) 승인 집합으로 제한하며, 그 집합을 벗어난 선택은 모두 거부합니다. 런타임 가드는 작업 실행 전에 각 해시, 서명 알고리즘 식별자, 암호화 알고리즘, 키 강도를 단언합니다. 전원 인가 자체 테스트 모음은 프로세스 시작 시 한 번 실행되며, known-answer 테스트가 하나라도 실패하면 모듈을 오류 상태로 전환합니다. 이 페이지는 동작 수준의 설명입니다. 정책이 무엇을 허용하는지, 가드가 무엇을 거부하는지, 자체 테스트가 무엇을 다루는지, 그리고 인증에 대한 명시적 입장을 설명합니다.
NextPDF Enterprise는 컴플라이언스 지원 도구이며, 인증된 암호화 모듈이 아닙니다. 인증을 받지 않았다는 명시적 입장은 보안 및 컴플라이언스에 나와 있습니다.
사전 요구 사항은 프런트매터에 기술되어 있으며 사전 요구 사항에서 다시 확인할 수 있습니다.
에디션 및 라이선스
섹션 제목: “에디션 및 라이선스”FIPS 모드 암호화 정책 프로파일, 런타임 가드, 전원 인가 자체 테스트 가드는 nextpdf/enterprise 패키지에 포함되어 제공되며 enterprise 라이선스 기능 플래그로 게이팅됩니다. NextPDF Core와 NextPDF Pro는 FIPS 모드 프로파일을 제공하지 않습니다. 가드와 자체 테스트는 프로세스 내에서 실행됩니다. 정책 검사나 자체 테스트 때문에 문서 콘텐츠가 호스트 밖으로 나가지 않습니다. 에디션 비교.
이 기능이 하는 일
섹션 제목: “이 기능이 하는 일”이 기능은 암호화 정책, 런타임 가드, 전원 인가 자체 테스트라는 세 부분으로 구성됩니다.
암호화 정책은 암호화 선택을 승인 집합으로 제한하며, 두 가지 프리셋을 제공합니다.
- Strict (FIPS 140-3 세대에 맞춘 설정) — SHA-256, SHA-384, SHA-512 해시, 해당 해시를 사용하는 RSA 및 ECDSA 서명 객체 식별자(OID), AES-256-CBC 암호화, 그리고 RSA 2048 및 타원곡선 256의 최소 키 크기를 허용합니다.
- Standard (FIPS 140-2 세대에 맞춘 설정) — strict와 동일하되, 이전 호환성을 위해 AES-128-CBC도 허용합니다.
NIST SP 800-131A Rev.2 §3에 따라 서명 생성에 허용되는 최소값은 RSA 키 2048 비트 이상과 ECDSA 차수 224 비트 이상입니다. strict 프리셋의 2048/256 하한은 그 최소값과 같거나 그 이상입니다. 알 수 없는 키 유형은 기본적으로 거부됩니다 — 정책은 인식되지 않는 유형을 조용히 받아들이지 않습니다.
런타임 가드는 정책을 감싸고, 해시, 서명 OID, 암호화 알고리즘, 키 강도에 대한 assert 방식 메서드를 노출합니다. 허용되지 않는 선택은 정책과 위반 항목의 이름을 담은 타입화된 위반을 발생시키고 작업을 중단합니다. 이 경로는 fail-closed입니다. 정책은 스스로 완화되지 않으며, 더 약한 알고리즘으로 대체하지도 않습니다. RSASSA-PSS 서명의 경우 생성 게이트는 메시지 다이제스트를 명시적으로 바인딩합니다. 모든 PSS 변형이 하나의 서명 OID를 공유하기 때문에 — 해시는 OID가 아니라 PSS 매개변수에 있으므로 — OID 허용 목록만으로는 실제 적용되는 다이제스트를 증명할 수 없습니다. 따라서 게이트는 다이제스트가 FIPS 승인(SHA-256/384/512)임을 단언하고, SHA-1 PSS와 같이 다이제스트를 알 수 없거나 승인되지 않은 PSS 토큰은 어떤 서명자 디스패치보다 먼저 fail-closed로 거부합니다 (FIPS 186-5 §5.4(b)).
전원 인가 자체 테스트는 프로세스 시작 시 known-answer-test(KAT) 모음을 한 번 실행하여, 승인된 해시, 메시지 인증, 암호화, 인증 암호화, 서명, 무작위 비트 함수를 다룹니다. ISO/IEC 19790:2025 §7.10.4.2에 따라, known-answer 테스트는 계산된 출력이 알려진 정답과 일치하지 않을 때 실패합니다. 실패가 발생하면 모듈은 오류 상태로 진입하고 암호화 서비스를 거부합니다 (ISO/IEC 19790:2025 §7.2.4.3). 오류 상태는 프로세스에 고착됩니다. 프로세스 내의 부트 가드 중 하나라도 오류를 관찰하면, 프로세스 전체가 그 수명 동안 fail-closed 상태로 유지됩니다. 새 부트 가드나 정책을 생성해도 이를 해소할 수 없으며, 이후 통과하는 자체 테스트 재실행도 래치된 오류를 해제하지 않습니다 — ISO/IEC 19790:2025 §7.10.2에 따라 오직 프로세스 재시작(진정한 전원 재인가)만이 이를 해제합니다. 결과는 프로세스 수명 동안 캐시됩니다. 관리자 엔드포인트나 명령을 위한 온디맨드 재실행을 사용할 수 있지만, 이는 주기적 자체 테스트 의무를 충족하기 위한 것이며 오류 복구를 위한 것이 아닙니다.
NIST SP 800-38D §5.2.1에 따라, 정책 하에서 인증 암호화를 사용하려면 키마다 고유한 초기화 벡터(IV)가 필요합니다.
사전 요구 사항
섹션 제목: “사전 요구 사항”- NextPDF Core와 Enterprise 패키지를 설치하고, 활성 Enterprise 라이선스를 보유하십시오.
- FIPS 호환 작동을 주장하려면, NextPDF를 FIPS 검증된 암호화 제공자 — 예를 들어 FIPS 검증된 OpenSSL 제공자 — 또는 FIPS 검증된 HSM에 대해 구성하십시오. NextPDF Enterprise는 구조적 조립, 다이제스트 계산, 정책 집행을 수행합니다. 기반이 되는 프리미티브는 사용자가 제공하는 검증된 경계 내에서 실행됩니다.
- 프리셋을 결정하십시오. FIPS 140-3에 맞춘 집행에는 strict를, AES-128-CBC 호환성이 필요한 경우에는 standard를 선택합니다.
- 프리셋 — strict 또는 standard를 선택합니다. strict는 AES-256-CBC만 허용하고, standard는 AES-128-CBC도 허용합니다.
- 가드 — 선택한 정책으로 가드를 생성합니다. 가드는 각 암호화 선택을 단언하는 경계입니다.
- 자체 테스트 연결 — 각 워커 프로세스가 자신의 자체 테스트 주기를 실행하도록 애플리케이션 부트스트랩에서 부트 가드를 연결합니다. 여러 프로세스 인스턴스는 각각 자체 전원 인가 자체 테스트를 실행합니다.
단계별 안내
섹션 제목: “단계별 안내”- 애플리케이션 부트스트랩에서 부트 가드를 통해 전원 인가 자체 테스트를 실행하고 모듈이 작동 가능한 상태인지 단언합니다. 작동 가능하지 않으면 프로세스를 중단하십시오.
- strict 또는 standard 정책으로 가드를 생성합니다.
- 각 암호화 작업 전에 가드를 통해 해시, 서명 OID, 암호화 알고리즘, 키 강도를 단언합니다.
- 타입화된 위반을 포착하고, 구조화된 메시지를 로깅한 뒤, 작업을 거부하십시오 — 더 약한 선택으로 폴백하지 마십시오.
<?php
declare(strict_types=1);
require_once __DIR__ . '/../../vendor/autoload.php';
use NextPDF\Enterprise\Security\Fips\FipsBootGuard;use NextPDF\Enterprise\Security\Fips\FipsCryptoPolicy;use NextPDF\Enterprise\Security\Fips\FipsModeGuard;use NextPDF\Enterprise\Security\Fips\FipsSelfTest;use NextPDF\Enterprise\Security\Fips\FipsModuleErrorStateException;use Psr\Log\LoggerInterface;
/** * Run the power-on self-test, then build a guard on the strict policy. * * The self-test runs once per process. A known-answer failure raises a * module-error-state exception; the caller must stop rather than proceed * with an unverified crypto path. * * @param LoggerInterface $logger Structural diagnostics only — never secrets. * * @throws FipsModuleErrorStateException When a power-on known-answer test fails. * * @return FipsModeGuard A guard ready to assert each cryptographic choice. */function bootFipsGuard(LoggerInterface $logger): FipsModeGuard{ $bootGuard = new FipsBootGuard(new FipsSelfTest());
try { $bootGuard->assertOperational(); } catch (FipsModuleErrorStateException $e) { $logger->critical('FIPS power-on self-test failed; refusing crypto services.', [ 'reason' => $e->getMessage(), ]);
throw $e; }
return new FipsModeGuard(FipsCryptoPolicy::strict());}<?php
declare(strict_types=1);
require_once __DIR__ . '/../../vendor/autoload.php';
use NextPDF\Enterprise\Security\Fips\FipsModeGuard;use NextPDF\Enterprise\Security\Fips\FipsViolationException;use Psr\Log\LoggerInterface;
final readonly class FipsCheckedSigning{ public function __construct( private FipsModeGuard $guard, private LoggerInterface $logger, ) {}
/** * Assert the signing choices against the active policy before signing. * * A disallowed hash, signature OID, or key strength raises a typed * violation; the operation is refused rather than downgraded. * * @param string $hash The hash algorithm name (e.g. 'sha256'). * @param string $signatureOid The signature algorithm OID. * @param string $keyType The key type (e.g. 'rsa', 'ec'). * @param positive-int $keyBits The key length in bits. * * @throws FipsViolationException When any choice is not approved. */ public function assertApproved( string $hash, string $signatureOid, string $keyType, int $keyBits, ): void { try { $this->guard->assertHashAllowed($hash); $this->guard->assertSignatureAlgorithmAllowed($signatureOid); $this->guard->assertKeyStrengthAllowed($keyType, $keyBits); } catch (FipsViolationException $e) { $this->logger->error('FIPS policy violation', ['reason' => $e->getMessage()]);
throw $e; } }}- 전원 인가 자체 테스트를 실행하고 작동 가능 상태로 보고되는지 확인합니다. 승인된 모든 알고리즘 클래스(해시, 메시지 인증, 암호화, 인증 암호화, 서명, 무작위 비트)가 실행되는지 확인합니다.
- 승인된 선택(예를 들어 SHA-256, RSA 2048)을 단언했을 때 통과하는지 확인합니다. 허용되지 않는 선택(예를 들어 SHA-1, RSA 1024)을 단언했을 때 타입화된 위반이 발생하는지 확인합니다.
- 의도적으로 손상된 해시 또는 무작위 소스를 자체 테스트에 주입하고, 모듈이 오류 상태로 진입하여 서비스를 거부하는지 확인합니다.
- 알 수 없는 키 유형이 받아들여지지 않고 기본적으로 거부되는지 확인합니다.
보안 및 컴플라이언스
섹션 제목: “보안 및 컴플라이언스”- Fail-closed. 허용되지 않는 암호화 선택은 타입화된 위반을 발생시키고 작업을 중단합니다. 정책은 스스로 완화되지 않으며, 더 약한 알고리즘으로 대체하지도 않습니다.
- 불일치 시 자체 테스트가 거부합니다. known-answer-test 실패는 모듈을 프로세스에 고착된 오류 상태로 전환합니다. 프로세스 전체가 fail-closed 상태로 유지됩니다. 새 부트 가드나 정책으로는 복구할 수 없으며, 통과하는 재실행도 래치를 해제하지 않습니다 — 오직 프로세스 재시작만이 이를 해제합니다 (ISO/IEC 19790:2025 §7.10.4.2; §7.10.2).
- 키 강도. strict 프리셋은 NIST SP 800-131A Rev.2 §3의 허용 하한과 같거나 그 이상인 RSA 2048 및 타원곡선 256 최소값을 집행합니다.
- IV 고유성. 인증 암호화를 사용하려면 키마다 고유한 IV가 필요합니다 (NIST SP 800-38D §5.2.1).
이 페이지는 암호화 정책을 다루므로 export_control_class: legal-review-required로 표시됩니다. 모든 규범 출처는 의역되었으며, 규범 텍스트는 그대로 재현되지 않았습니다. publish 플래그를 설정하기 전에 법무 승인이 필요합니다.
NextPDF Enterprise는 FIPS 검증된 암호화 모듈이 아니며 FIPS 인증을 주장하지 않습니다. FIPS 검증된 암호화 제공자 — 예를 들어 FIPS 검증된 OpenSSL 제공자 — 또는 FIPS 검증된 HSM으로 구성되었을 때에만 FIPS 호환 모드로 작동합니다. FIPS 모드 정책은 컴플라이언스를 지원합니다. 이는 인증도 아니고 법률 의견도 아닙니다. 규제 의무에 대해서는 자체 컴플라이언스 및 법률 자문가에게 문의하십시오.
실패 처리
섹션 제목: “실패 처리”- 부트 시 자체 테스트 실패. 부트 가드는 모듈 오류 상태 예외를 발생시킵니다. 프로세스를 중단하십시오. 검증되지 않은 암호화 경로로 진행하지 마십시오.
- 정책 위반. 가드는 정책과 위반 항목의 이름을 담은 타입화된 위반을 발생시킵니다. 작업을 거부하십시오. 다운그레이드하지 마십시오.
- 알 수 없는 키 유형. 정책은 기본적으로 이를 거부합니다. 실제로 승인된 경우 키 유형을 명시적으로 매핑하십시오.
- 자체 테스트 재실행. 관리자 엔드포인트나 명령을 위한 온디맨드 재실행을 사용할 수 있으며, 이는 주기적 온디맨드 자체 테스트 의무를 충족합니다. 이는 복구 메커니즘이 아닙니다. 실패하는 재실행도 프로세스를 래치 상태로 만들며, 통과하는 재실행은 기존 래치를 해제하지 않습니다. 오류 상태에 있는 모듈을 복구하려면 프로세스 재시작이 필요합니다.
상업적 맥락
섹션 제목: “상업적 맥락”NextPDF Core는 소프트웨어 서명자와 암호화를 FIPS 모드 프로파일 없이 제공합니다. NextPDF Enterprise는 FIPS 모드 암호화 정책 프로파일, 런타임 가드, 전원 인가 자체 테스트 가드를 추가하므로, 배포 환경이 암호화 선택을 승인 집합으로 제한하고 자체 테스트 불일치 시 fail-closed로 동작할 수 있습니다. 프리미티브를 FIPS 검증된 장치 내에서 실행하려면 이를 HSM 서명과 함께 사용하십시오. 에디션 비교.
참고 자료
섹션 제목: “참고 자료”- 보안 — NextPDF Enterprise — Enterprise 보안 표면 전반.
- HSM 서명 — NextPDF Enterprise — PKCS#11 하드웨어 키 보관.
- 서명 — NextPDF Enterprise — PAdES B-LT 및 B-LTA 장기 생산자.
- 보안 — NextPDF Core — Core 암호화 및 서명 표면.
- FIPS 모드 · KAT · AEAD — 용어집 항목.