コンテンツにスキップ
getnextpdf.com

Enterprise エディション

FIPS 140 — 詳細リファレンス

本ページは、NextPDF Enterprise FIPS 140 モジュールの詳細リファレンスです。このモジュールはポリシーおよびセルフテストの機能です。暗号方式の選択を FIPS 準拠の許可リストに制限し、電源投入時の既知応答テストバッテリーを実行し、バッテリーが失敗した場合には暗号出力を抑止します。**NextPDF は FIPS 140 検証済みの暗号モジュールではなく、認証を保有しておらず、いかなる認証も付与しません。**サポートは適合と同義ではなく、適合は認証と同義ではありません。FIPS 互換の運用構成には、加えて運用者が提供する FIPS 検証済みの暗号プロバイダーが必要です。

この機能は NextPDF Enterprisenextpdf/enterprise)に含まれ、Enterprise ティアのライセンスエンベロープで有効化されます。この権利を持たないデプロイでは、機能のクラスは読み込まれません。エディションを比較してライセンスを取得する

すべてのシンボルは NextPDF\Enterprise\Security\Fips に属します。ただし FipsBootstrapNextPDF\Enterprise\Bootstrap にあります。

シンボルパラメーター既定の動作戻り値スロー/失敗備考
FipsBootstrap::boot()?CryptoPolicyInterface $policy?FipsSelfTest $selfTest?LoggerInterface $auditLogger(いずれも既定 null起動時に電源投入バッテリーを一度実行。既定は strict ポリシーFipsModeGuard電源投入テストが失敗すると FipsModuleErrorStateExceptionコンポジションルート。$auditLoggernull のとき監査証跡は無効
FipsBootstrap::lazy()boot() と同じバッテリーを最初の境界アサーションまで遅延FipsModeGuard呼び出し時にはなし。最初のアサーションで FipsModuleErrorStateException を投げうる最初のアサーションまでモジュールは PRE_OPERATIONAL のまま
FipsBootstrap::signatureEnforcer()?CryptoPolicyInterface $policy = null?FipsSelfTest $selfTest = nullモジュールをブートし、署名チョークポイント向けにガードをラップFipsSignatureEnforcer電源投入テストが失敗すると FipsModuleErrorStateExceptionboot() へ委譲
FipsBootstrap::selfTestReport()?FipsSelfTest $selfTest = nullバッテリーをオンデマンドで実行し要約array{status: FipsSelfTestStatus, operational: bool, failed: list<string>}スローしない。失敗は failed に現れる管理ヘルスエンドポイントおよび CLI 用途
FipsCryptoPolicy::strict()?FipsSelfTest $selfTest = nullFIPS 140-3 プリセット:SHA-256/384/512、承認済み RSA・RSASSA-PSS・ECDSA OID、aes-256-cbcaes-256-gcm、RSA >= 2048、EC >= 256selfなしコンストラクターは private。プリセットが唯一の入口
FipsCryptoPolicy::standard()?FipsSelfTest $selfTest = nullFIPS 140-2 プリセット:strict セットに aes-128-cbc を追加selfなしレガシー相互運用専用
FipsCryptoPolicy::assertPreOperational()なし電源投入バッテリーを実行、またはラッチ済み結果を再生void電源投入テストが失敗すると FipsModuleErrorStateException最初の操作前に Core の適用シームが駆動
FipsCryptoPolicy クエリサーフェスstring / int 入力許可リストのメンバーシップ判定。未知の鍵タイプは拒否bool / stringなしisHashAlgorithmAllowedisSignatureAlgorithmAllowedisEncryptionAlgorithmAllowedisKeyStrengthAllowedgetPreferredHashAlgorithmgetName
FipsModeGuard::__construct()CryptoPolicyInterface $policy?FipsBootGuard $bootGuard = null?FipsAuditLogger $auditLogger = nullポリシーを assert 形式の境界でラップなし$bootGuard がなければセルフテストゲートはなし。本番コンポジションはこれを供給
FipsModeGuard::assertHashAllowed()string $algorithmまず拒否カタログ、次に許可リストvoidFipsViolationException。ブートガードが配線されている場合は FipsModuleErrorStateException監査記録はあらゆる FipsViolationException に先行
FipsModeGuard::assertSignatureAlgorithmAllowed()string $oidまず拒否カタログ、次に許可リストvoid上記と同じOID は完全一致で照合
FipsModeGuard::assertEncryptionAllowed()string $algorithmまず拒否カタログ、次に許可リストvoid上記と同じ名称は小文字で比較
FipsModeGuard::assertKeyStrengthAllowed()string $keyTypeint $bitLengthまず拒否カタログ、次にポリシー下限void上記と同じ未知の鍵タイプは拒否
FipsModeGuard::getPolicy()なしラップされたポリシーを返すCryptoPolicyInterfaceなし
FipsBootGuard::__construct()FipsSelfTest $selfTestバッテリーを保持。実行はしないなしインスタンスごとに 1 電源投入サイクル
FipsBootGuard::report()なしバッテリーを一度実行、レポートをキャッシュ、エラー時にラッチFipsSelfTestReportなし初回呼び出しでテストを実行
FipsBootGuard::rerun()なし新規実行を強制。エラー実行はプロセスをラッチFipsSelfTestReportなしオンデマンドのセルフテスト。エラー回復経路ではない
FipsBootGuard::assertOperational()なしモジュールが operational であることをアサート。プロセス全体で固着voidFipsModuleErrorStateExceptionプロセスがエラーをラッチしている場合、クリーンなインスタンスでもスロー
FipsBootGuard::status()なしキャッシュ済みステータスを報告FipsSelfTestStatusなしラッチ時は ERROR、未実行時は PRE_OPERATIONAL
FipsSelfTest::__construct()?callable $randomBytesProvider = null?callable $hashProvider = nullプラットフォームの hash()random_bytes() を使用なし決定論的な失敗テスト向けのオーバーライドあり
FipsSelfTest::run()なしフルバッテリーを実行。決してショートサーキットしないFipsSelfTestReportなし失敗はレポートに記録され、例外にはならない
FipsSelfTestReportFipsSelfTestStatus $statusarray $resultsarray $failedResults1 回の実行の不変集約エラー状態では assertOperational()FipsModuleErrorStateException をスローisOperational()isError() も提供
FipsSelfTestResultstring $algorithmstring $kindbool $passedstring $message = ''テストごとの不変な結果なしkindKATPWCTHEALTH のいずれか。isPassed()isFailed() も提供
FipsSelfTestStatus文字列バック列挙型なしケース PRE_OPERATIONALOPERATIONALERROR
FipsSignatureEnforcer::__construct()FipsModeGuard $guard署名チョークポイント向けにブートゲート済みガードをラップなし
FipsSignatureEnforcer::assertSignatureGenerationAllowed()string $algorithmstring $certificatePemOID と鍵強度を解決し、ガードへ委譲voidFipsViolationException(未知のアルゴリズム、非承認 PSS ダイジェスト、証明不能な鍵、またはポリシー拒否)。ガード経由で FipsModuleErrorStateException生成経路のみ。検証はここを経由しない
FipsAuditLogger::__construct()CryptoPolicyInterface $policyLoggerInterface $loggerPSR-3 ロガーと、ガードが適用するのと同じポリシーをラップなし記録された判定は適用された判定と乖離しえない
FipsAuditLogger::logHashOperation() / logSignatureOperation() / logEncryptionOperation() / logKeyStrengthCheck()判定ごとに string / int 入力ALLOW を INFO、DENY を WARNING で記録bool(許可時は true)なし構造化コンテキスト:ポリシー名、項目、判定
FipsTransitioningAlgorithmsstring / int 入力静的な SP 800-131A Rev.2 拒否カタログbool / list<string>なしisHashDisallowedisSignatureOidDisallowedisEncryptionDisallowedisKeyStrengthDisallowed、加えて disallowedHashesdisallowedSignatureOidsdisallowedEncryption
FipsViolationExceptionstring $policyNamestring $violatingItemstring $reasonpublic readonly フィールドを持つ型付きポリシー違反NextPDF\Exception\NextPdfException のサブタイプ
FipsModuleErrorStateExceptionarray $failedResults?string $message = null失敗したテスト結果を保持するエラー状態拒否NextPDF\Exception\NextPdfException のサブタイプ
public static function boot(?CryptoPolicyInterface $policy = null, ?FipsSelfTest $selfTest = null, ?LoggerInterface $auditLogger = null): FipsModeGuard
public static function lazy(?CryptoPolicyInterface $policy = null, ?FipsSelfTest $selfTest = null, ?LoggerInterface $auditLogger = null): FipsModeGuard
public static function signatureEnforcer(?CryptoPolicyInterface $policy = null, ?FipsSelfTest $selfTest = null): FipsSignatureEnforcer
public static function selfTestReport(?FipsSelfTest $selfTest = null): array
public static function strict(?FipsSelfTest $selfTest = null): self
public static function standard(?FipsSelfTest $selfTest = null): self
public function assertPreOperational(): void
public function isHashAlgorithmAllowed(string $algorithm): bool
public function isSignatureAlgorithmAllowed(string $oid): bool
public function isEncryptionAlgorithmAllowed(string $algorithm): bool
public function isKeyStrengthAllowed(string $keyType, int $bitLength): bool
public function getPreferredHashAlgorithm(): string
public function getName(): string
public function __construct(private CryptoPolicyInterface $policy, private ?FipsBootGuard $bootGuard = null, private ?FipsAuditLogger $auditLogger = null)
public function assertHashAllowed(string $algorithm): void
public function assertSignatureAlgorithmAllowed(string $oid): void
public function assertEncryptionAllowed(string $algorithm): void
public function assertKeyStrengthAllowed(string $keyType, int $bitLength): void
public function getPolicy(): CryptoPolicyInterface
public function __construct(private readonly FipsSelfTest $selfTest)
public function report(): FipsSelfTestReport
public function rerun(): FipsSelfTestReport
public function assertOperational(): void
public function status(): FipsSelfTestStatus
public function __construct(?callable $randomBytesProvider = null, ?callable $hashProvider = null)
public function run(): FipsSelfTestReport
public function __construct(private readonly FipsModeGuard $guard)
public function assertSignatureGenerationAllowed(string $algorithm, string $certificatePem): void
public function __construct(private CryptoPolicyInterface $policy, private LoggerInterface $logger)
public function logHashOperation(string $algorithm): bool
public function logSignatureOperation(string $oid): bool
public function logEncryptionOperation(string $algorithm): bool
public function logKeyStrengthCheck(string $keyType, int $bitLength): bool
public static function isHashDisallowed(string $algorithm): bool
public static function isSignatureOidDisallowed(string $oid): bool
public static function isEncryptionDisallowed(string $algorithm): bool
public static function isKeyStrengthDisallowed(string $keyType, int $bitLength): bool
public static function disallowedHashes(): array
public static function disallowedSignatureOids(): array
public static function disallowedEncryption(): array
public function __construct(public FipsSelfTestStatus $status, public array $results, public array $failedResults)
public function isOperational(): bool
public function isError(): bool
public function assertOperational(): void
// FipsSelfTestResult
public function __construct(public string $algorithm, public string $kind, public bool $passed, public string $message = '')
public function isPassed(): bool
public function isFailed(): bool
// FipsSelfTestStatus
enum FipsSelfTestStatus: string
{
case PRE_OPERATIONAL = 'pre_operational';
case OPERATIONAL = 'operational';
case ERROR = 'error';
}
  • ポリシーの許可リストが権威的な判定です。FipsTransitioningAlgorithms はその上に明示的な SP 800-131A Rev.2 の拒否レイヤーを追加し、監査上明確な拒否メッセージを提供します。この拒否レイヤーが許可リストを拡張したり上書きしたりすることはありません。
  • FipsCryptoPolicy::strict() は SHA-256、SHA-384、SHA-512、そしてそれらのハッシュに紐づく RSA PKCS#1 v1.5、RSASSA-PSS、ECDSA の署名 OID、aes-256-cbcaes-256-gcm、加えて RSA 2048、EC 256、Ed25519 256 の鍵下限を許可します。standard() はさらに aes-128-cbc を許可します。
  • 電源投入バッテリーは次を対象とします:SHA-256/384/512 ダイジェスト KAT、HMAC-SHA-256 KAT、AES-256-CBC の暗号化・復号 KAT、AES-256-GCM タグ KAT、ECDSA P-256 の対整合性テスト、そして DRBG ヘルスチェック。FipsSelfTest::run() は常にすべてのテストを実行し、決してショートサーキットしないため、監査証跡としてレポートは完全です。
  • DRBG の行は継続的ヘルステスト(抽出長と、連続する異なる抽出)であり、既知応答テストではありません。DRBG の既知応答義務は、運用者が提供する基盤の FIPS 検証済みプロバイダーへ委譲されます。
  • エラー状態はプロセス固着です。いずれかの FipsBootGuard が最初に観測した ERROR レポートがプロセス全体をラッチします。新しいガードやポリシーのインスタンスでもエラーを洗浄できず、後続の合格再実行でも解除されません。プロセス再起動(真の電源サイクル)だけが状態をリセットします。
  • FipsCryptoPolicyNextPDF\Contracts\CryptoPolicyInterfaceNextPDF\Contracts\PreOperationalSelfTestInterface を実装します。Core の暗号ポリシーとして構成されると、Core の適用シームが最初の署名または暗号文の生成前に assertPreOperational() を駆動します。
  • FipsSignatureEnforcer は生成経路のみをゲートします。既に生成された署名の検証は SP 800-131A Rev.2 の下ではレガシー用途であり、決してエンフォーサーを経由しません。
  • 監査ロガーが配線されている場合、あらゆる assert 境界は、ポリシー違反のスローに先立って ALLOW(INFO)または DENY(WARNING)のレコードを 1 件出力します。したがってあらゆる FipsViolationException の拒否は証跡に記録されます。ブートガードのゲートが最初に実行されるため、エラー状態拒否は監査記録より前に発生します。FipsAuditLogger はガードが適用するのと同じポリシーを参照するため、記録された判定が適用された判定と乖離することはありません。
  • 未知の鍵タイプは両レイヤーで拒否されます。ポリシーは false を返し、カタログはそれを不許可として扱います。
  • エンフォーサーが署名 OID へ対応付けられない署名アルゴリズム識別子は、FipsViolationException でフェイルクローズドに拒否されます。
  • あらゆる RSASSA-PSS バリアントは OID 1.2.840.113549.1.1.10 を共有するため、OID だけではダイジェストを証明できません。エンフォーサーは有効なダイジェストを明示的に束縛し、ダイジェストが SHA-256/384/512 でない PSS トークンを拒否します。
  • パースできない証明書、または公開鍵のビット長を取得できない証明書は、key:unprovable として拒否されます。
  • OpenSSL の非対称プリミティブを持たないランタイムでは、ECDSA 対整合性テストはスキップではなく失敗として記録され、モジュールは ERROR に入ります。
  • 連続する 2 つの同一 32 バイトのランダム抽出は DRBG ヘルスチェック(スタック出力検出)に失敗し、ERROR を強制します。
  • ブートガードなしで構築された FipsModeGuard はポリシーチェックのみを行い、セルフテストゲートを持ちません。本番コンポジションは常にゲートを配線する FipsBootstrap を経由します。
  • ハッシュ名と暗号方式名は小文字で比較され、署名 OID は正規化なしで完全一致します。
  • FipsBootstrap::lazy() の後、モジュールは最初の assert 境界がバッテリーを実行するまで PRE_OPERATIONAL のままです。アサーション時点で PRE_OPERATIONAL は非 operational として扱われます。

このモジュール自体が FIPS モードのサーフェスです。モジュールがエラー状態にある間、および事前運用セルフテストの実行中は、暗号出力が抑止されます。あらゆる assert 境界は、署名または暗号文が生成される前に FipsModuleErrorStateException をスローします(ISO/IEC 19790:2025 §7.3.3 b)、AS03.07)。FipsBootGuard::status()FipsBootstrap::selfTestReport() が状態を公開するため、運用者はモジュールがエラー状態に入ったことを判定できます(ISO/IEC 19790:2025 §7.10.3)。これらの動作は NextPDF コードに関する機能上の主張であって、検証の主張ではありません。FIPS 140 が検証するモジュール境界は、NextPDF ではなく運用者が提供する暗号プロバイダーです。

主張標準条項
FIPS 140-3 は ISO/IEC 19790 および ISO/IEC 24759 に基づくため、本ページは ISO/IEC 19790 の条項を引用。FIPS 140-3Introduction (fips_140_3#x26.x2)
エラー状態および事前運用セルフテスト中は出力が抑止される。ISO/IEC 19790:2025§7.3.3 b) [AS03.07]
既知応答テストは計算結果を既知の期待出力と比較する。バッテリーはこの形式を実装。ISO/IEC 19790:2025§7.10.4
運用者はステータス出力を通じてエラー状態を判定できる。ISO/IEC 19790:2025§7.10.3 [AS10.10]
運用者は定期テストのためセルフテストをオンデマンドで開始できる。rerun()selfTestReport() がこれを提供。ISO/IEC 19790:2025§7.10.5 [AS10.54]
SHA-1 は新規のデジタル署名生成には不許可。拒否カタログがこれを排除。NIST SP 800-131A Rev.2§9
112 ビット強度未満(RSA < 2048、ECDSA order < 224)の署名生成は不許可。鍵下限がこれを適用。NIST SP 800-131A Rev.2§3 Table 2
既に生成された SHA-1 署名の検証はレガシー用途であり、生成ゲートを経由しない。NIST SP 800-131A Rev.2Change summary (9.x4.p12)

すべての条項は言い換えであり、規範的な本文は再現していません。**NextPDF は FIPS 140 の認証を主張しません。**モジュールはコンプライアンス支援機能として、引用された条項に動作を整合させます。あるデプロイが FIPS 準拠であるかどうかは、運用者の検証済みプロバイダー、モジュール境界の定義、およびコンプライアンスプログラムに依存し、NextPDF 単独では決まりません。

  • 決定論的な失敗テストは、FipsSelfTest コンストラクター、または FipsCryptoPolicy::strict()standard()FipsBootstrap メソッドの $selfTest パラメーターを通じて、壊れたプロバイダーを注入します。
  • プロセス固着のエラーラッチには、内部のテスト専用リセットフックがあります。これはサポートされる API の一部ではなく、本番コードが呼び出してはなりません。
  • 各 PHP ワーカープロセスは自身の電源投入バッテリーを実行します。レポートはインスタンスごとにキャッシュされるため、ホットパスのアサーションは定数時間のステータスチェックです。
  • FipsModuleErrorStateException をキャッチして処理を続行してはなりません。この例外はモジュールが暗号サービスを拒否していることを意味します。正しい対応は、是正後に処理を停止しプロセスを再起動することです。
  • FipsBootstrap::selfTestReport() は、ヘルスエンドポイントなどオンデマンドおよび定期のセルフテストのニーズに対応します。合格したオンデマンド実行がラッチ済みのエラーを解除することはありません。

本ページは、外部から観測可能な動作とサポートされる公開 API サーフェスのみを記載します。内部の名前空間パス、ヘルパークラス、メカニズムテーブル、Runbook のファイル名、チケットの接頭辞は対象外です。