FIPS 140-2/3 暗号ポリシーと自己テスト
NextPDF Enterprise は、署名操作または暗号化操作で選択できる暗号を Federal Information Processing Standards(FIPS)承認済みのセットに制限し、それ以外の選択を拒否します。ランタイムガードは、操作を実行する前に各ハッシュ、署名アルゴリズム識別子、暗号化アルゴリズム、鍵強度をアサートします。パワーオン自己テストバッテリはプロセス開始時に一度実行され、いずれかの既知応答テストが失敗した場合にモジュールをエラー状態へ遷移させます。このページでは、ポリシーが許可する内容、ガードが拒否する内容、自己テストがカバーする範囲、そして明示的な認証スタンスを動作面から説明します。
NextPDF Enterprise はコンプライアンス支援ツールであり、認証された暗号モジュールではありません。非認証であるという明示的なスタンスは セキュリティとコンプライアンス に記載されています。
前提条件はフロントマターに記載されており、前提条件 でも再掲しています。
エディションとライセンス
「エディションとライセンス」という見出しのセクションFIPS モードの暗号ポリシープロファイル、ランタイムガード、パワーオン自己テストガードは nextpdf/enterprise パッケージに含まれ、enterprise ライセンス機能フラグでゲートされます。NextPDF Core および NextPDF Pro は FIPS モードのプロファイルを提供しません。ガードと自己テストはプロセス内で実行されます。ポリシーチェックや自己テストを行うために、ドキュメントの内容がホストから出ることはありません。エディションを比較。
この機能の動作
「この機能の動作」という見出しのセクションこの機能は、暗号ポリシー、ランタイムガード、パワーオン自己テストという 3 つの部分で構成されます。
暗号ポリシーは、暗号の選択を承認済みのセットに制限します。プリセットは 2 つあります。
- 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 によれば、署名生成で許容される最小値は、2048 ビット以上の RSA 鍵と 224 ビット以上の ECDSA 位数です。strict プリセットの 2048/256 の下限は、これらの最小値以上に設定されています。不明な鍵タイプはデフォルトで拒否されます。ポリシーは、認識されないタイプを暗黙に受け入れることはありません。
ランタイムガードはポリシーをラップし、ハッシュ、署名 OID、暗号化アルゴリズム、鍵強度に対する assert 形式のメソッドを公開します。許可されない選択に対しては、ポリシーと違反項目を示す型付きの違反を発生させ、操作を停止します。この経路はフェイルクローズです。ポリシーが自ら緩和されることはなく、より弱いアルゴリズムへフォールバックすることもありません。RSASSA-PSS 署名の場合、生成ゲートはメッセージダイジェストを明示的に束縛します。すべての PSS バリアントは 1 つの署名 OID を共有し、ハッシュは OID ではなく PSS パラメータに存在するため、OID 許可リストだけでは実効ダイジェストを証明できません。そのためゲートは、そのダイジェストが FIPS 承認済み(SHA-256/384/512)であることをアサートし、ダイジェストが不明または非承認である PSS トークン(例: SHA-1 PSS)を、署名者へディスパッチする前にフェイルクローズで拒否します(FIPS 186-5 §5.4(b))。
パワーオン自己テストは、プロセス開始時に既知応答テスト(KAT)バッテリを一度実行し、承認済みのハッシュ、メッセージ認証、暗号化、認証付き暗号化、署名、乱数ビット関数をカバーします。ISO/IEC 19790:2025 §7.10.4.2 によれば、既知応答テストは、算出された出力が既知の応答と等しくない場合に失敗します。いずれかが失敗した場合、モジュールはエラー状態に入り、暗号サービスを拒否します(ISO/IEC 19790:2025 §7.2.4.3)。エラー状態はプロセス全体に固着します。プロセス内のいずれかのブートガードがエラーを観測すると、プロセス全体がそのライフタイムの間フェイルクローズのままになります。新しいブートガードやポリシーを構築してもこれを解除することはできず、その後に成功した自己テストの再実行でもラッチされたエラーをクリアすることはできません。クリアできるのはプロセスの再起動(真のパワーサイクル)のみです(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)をアサートして型付きの違反が発生することを確認します。
- 意図的に壊したハッシュまたは乱数ソースを自己テストに注入し、モジュールがエラー状態に入ってサービスを拒否することを確認します。
- 不明な鍵タイプが受け入れられず、デフォルトで拒否されることを確認します。
セキュリティとコンプライアンス
「セキュリティとコンプライアンス」という見出しのセクション- フェイルクローズ。 許可されない暗号の選択は、型付きの違反を発生させて操作を停止します。ポリシーが自ら緩和されることはなく、より弱いアルゴリズムへフォールバックすることもありません。
- 自己テストは不一致時に拒否します。 既知応答テストの失敗は、モジュールをプロセス全体に固着するエラー状態にします。プロセス全体がフェイルクローズのままになります。新しいブートガードやポリシーでは回復できず、成功した再実行でもラッチを解除できません。クリアできるのはプロセスの再起動のみです(ISO/IEC 19790:2025 §7.10.4.2、§7.10.2)。
- 鍵強度。 strict プリセットは RSA 2048 および楕円曲線 256 の最小値を適用し、NIST SP 800-131A Rev.2 §3 の許容下限以上となるように設定されています。
- IV の一意性。 認証付き暗号化の使用には、鍵ごとに一意の IV が必要です(NIST SP 800-38D §5.2.1)。
このページは暗号ポリシーに関わるため、export_control_class: legal-review-required とマークされています。すべての規範的なソースは言い換えられており、規範的なテキストはそのまま複製されていません。publish フラグを設定する前に、法務の承認が必要です。
NextPDF Enterprise は FIPS 検証済みの暗号モジュールではなく、いかなる FIPS 認証も主張しません。 FIPS 互換モードで動作するのは、FIPS 検証済みの暗号プロバイダー(例: FIPS 検証済みの OpenSSL プロバイダー)または FIPS 検証済みの HSM で構成された場合のみです。FIPS モードのポリシーはコンプライアンスを支援するものであり、認証でも法的意見でもありません。規制上の義務については、ご自身のコンプライアンス担当者および法務アドバイザーにご相談ください。
- ブート時の自己テスト失敗。 ブートガードはモジュールエラー状態の例外を発生させます。プロセスを停止してください。検証されていない暗号経路で続行してはいけません。
- ポリシー違反。 ガードは、ポリシーと違反項目を示す型付きの違反を発生させます。操作を拒否してください。ダウングレードしてはいけません。
- 不明な鍵タイプ。 ポリシーはデフォルトでこれを拒否します。その鍵タイプが本当に承認済みである場合は、明示的にマッピングしてください。
- 自己テストの再実行。 管理エンドポイントやコマンド用にオンデマンドの再実行が利用でき、定期的なオンデマンド自己テスト義務を満たします。これは回復メカニズムではありません。失敗した再実行もプロセスをラッチし、成功した再実行は既存のラッチを解除しません。エラー状態のモジュールを回復するには、プロセスの再起動が必要です。
商用コンテキスト
「商用コンテキスト」という見出しのセクションNextPDF Core は、ソフトウェア署名者と暗号化を FIPS モードのプロファイルなしで提供します。NextPDF Enterprise は FIPS モードの暗号ポリシープロファイル、ランタイムガード、パワーオン自己テストガードを追加します。これにより、デプロイメントは暗号の選択を承認済みのセットに制限し、自己テストの不一致時にフェイルクローズできます。プリミティブを FIPS 検証済みのデバイス内で実行するには、これを HSM 署名 と組み合わせてください。エディションを比較。
- セキュリティ — NextPDF Enterprise — 統合された Enterprise セキュリティサーフェス。
- HSM 署名 — NextPDF Enterprise — PKCS#11 ハードウェア鍵カストディ。
- 署名 — NextPDF Enterprise — PAdES B-LT および B-LTA の長期プロデューサー。
- セキュリティ — NextPDF Core — コアの暗号化と署名のサーフェス。
- FIPS モード · KAT · AEAD — 用語集の項目。