FIPS 140-2/3 加密政策與自我測試
NextPDF Enterprise 會將簽署或加密作業可使用的加密選擇,限制在 Federal Information Processing Standards(FIPS)核准的集合內,並拒絕集合以外的任何選擇。執行時期防護機制會在作業執行前,斷言每一個雜湊、簽章演算法識別碼、加密演算法與金鑰強度。一套通電自我測試會在行程啟動時執行一次;若任何已知答案測試失敗,便會使模組進入錯誤狀態。本頁聚焦於行為層級:說明政策允許什麼、防護機制拒絕什麼、自我測試涵蓋什麼,以及明確的認證立場。
NextPDF Enterprise 是合規輔助工具,並非經認證的加密模組。明確的非認證立場請見 安全性與合規。
先決條件列於 front matter,並在 先決條件 中重述。
版本與授權
標題為「版本與授權」的區段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,至少 2048 位元的 RSA 金鑰與至少 224 位元階數的 ECDSA 都是簽章產生可接受的最低值;strict 預設組態的 2048/256 下限等於或高於這些最低值。未知的金鑰類型預設一律拒絕——政策不會默默接受無法辨識的類型。
執行時期防護機制封裝這項政策,並針對雜湊、簽章 OID、加密演算法與金鑰強度提供斷言(assert)方法。不被允許的選擇會引發一個具型別的違規(typed violation),指明政策與違規項目,並停止該作業。此路徑採故障關閉(fail-closed):政策絕不會自我放寬,也絕不會改用較弱的演算法。對於 RSASSA-PSS 簽章,產生端關卡會明確繫結訊息摘要:由於每一種 PSS 變體都共用同一個簽章 OID——雜湊位於 PSS 參數中,而非 OID——僅憑 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)。該錯誤狀態具有行程黏滯性(process-sticky):只要行程中的任一啟動防護機制偵測到錯誤,整個行程在其生命週期內都會維持故障關閉。建構全新的啟動防護機制或政策無法清除此狀態,且後續一次通過的自我測試重新執行並不會清除已鎖存的錯誤——依 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 驗證的 OpenSSL 提供者)或通過 FIPS 驗證的 HSM 時,它才會以 FIPS 相容模式運作。FIPS 模式政策有助於合規;它並非認證,也不是法律意見。關於你的法規義務,請諮詢你自己的合規與法律顧問。
失敗處理
標題為「失敗處理」的區段- 啟動時自我測試失敗。 啟動防護機制會引發模組錯誤狀態例外。停止該行程;不要以未經驗證的加密路徑繼續執行。
- 政策違規。 防護機制會引發一個具型別的違規,指明政策與違規項目。拒絕該作業;不要降級。
- 未知的金鑰類型。 政策預設一律拒絕。若該金鑰類型確實已獲核准,請明確建立對應。
- 自我測試重新執行。 管理端點或命令可視需要重新執行,以滿足定期隨需自我測試的義務。它並非復原機制:一次失敗的重新執行同樣會鎖存該行程,而一次通過的重新執行也不會解除既有的鎖存狀態。若要讓處於錯誤狀態的模組復原,必須重新啟動行程。
商業脈絡
標題為「商業脈絡」的區段NextPDF Core 提供軟體簽署者與加密功能,但不含 FIPS 模式設定檔。NextPDF Enterprise 加入 FIPS 模式加密政策設定檔、執行時期防護機制與通電自我測試防護機制,讓部署能將加密選擇限制在核准集合內,並在自我測試不相符時採故障關閉。將它與 HSM 簽署 搭配,以在通過 FIPS 驗證的裝置內執行密碼學原語。比較各版本。
另請參閱
標題為「另請參閱」的區段- 安全性 — NextPDF Enterprise — Enterprise 整合的安全性介面。
- HSM 簽署 — NextPDF Enterprise — PKCS#11 硬體金鑰保管。
- 簽章 — NextPDF Enterprise — PAdES B-LT 與 B-LTA 長期保存產生器。
- 安全性 — NextPDF Core — 核心的加密與簽章介面。
- FIPS 模式 · KAT · AEAD — 詞彙表術語。