跳到內容
getnextpdf.com

Enterprise 版本

FIPS 140-2/3 加密政策與自我測試

NextPDF Enterprise 會將簽署或加密作業可做出的加密選擇,限制在一組符合 Federal Information Processing Standards(FIPS)核准的集合內,並拒絕該集合以外的任何選擇。執行時期防護機制會在作業執行前,檢查每一個雜湊、簽章演算法識別碼、加密演算法與金鑰強度。一套通電自我測試會在行程啟動時執行一次;若任何已知答案測試失敗,模組便會進入錯誤狀態。本頁描述其行為:政策允許什麼、防護機制拒絕什麼、自我測試涵蓋什麼,以及明確的認證立場。

NextPDF Enterprise 有助於合規,但它並非經認證的加密模組。明確的非認證立場請見 安全性與合規

front matter 列出了先決條件,先決條件 一節也重述了這些內容。

此功能隨 NextPDF Enterprisenextpdf/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),指明政策與違規項目,然後停止該作業。此路徑採故障關閉:政策絕不會自我放寬,也絕不會改用較弱的演算法。對於 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)。

FIPS 驗證附著於特定的加密模組邊界,而非附著於呼叫該模組的應用程式。因此,NextPDF 會強制執行政策並執行自我測試,但會將每一項密碼學原語委派給你所設定、通過 FIPS 驗證的提供者——它斷言核准的選擇,而非聲稱自己就是那個經驗證的模組。錯誤狀態刻意設計為行程黏滯:自我測試不相符意味著該模組已不再可信,因此全新的防護機制或後續一次通過的重新執行都不得默默地清除它,唯有真正重新啟動行程才能清除。這讓失敗保持誠實且可稽核,而非可就地悄然復原。其成果是一個能輔助合規、卻絕不誇大 NextPDF 已獲何種認證的功能。

設計背景:可交給稽核員的合規

  1. 安裝 NextPDF Core 與 Enterprise 套件,並維持一份有效的 Enterprise 授權。
  2. 若要主張 FIPS 相容運作,請將 NextPDF 設定為搭配通過 FIPS 驗證的加密提供者(例如通過 FIPS 驗證的 OpenSSL 提供者)或通過 FIPS 驗證的硬體安全模組(HSM)。NextPDF Enterprise 負責結構組裝、摘要計算與政策強制;底層密碼學原語則在你所提供的已驗證邊界內執行。
  3. 選擇預設組態:需要與 FIPS 140-3 對齊的強制政策時採用 strict;需要 AES-128-CBC 互通性時採用 standard。
  • 預設組態——選擇 strict 或 standard。strict 僅允許 AES-256-CBC;standard 也允許 AES-128-CBC。
  • 防護機制——以所選政策建構防護機制。這個防護機制就是你斷言每一項加密選擇的邊界。
  • 自我測試接線——在應用程式啟動程序中串接啟動防護機制,讓每個工作行程都執行自己的自我測試週期。每個行程實例都會執行自己的通電自我測試。
  1. 在應用程式啟動程序中,透過啟動防護機制執行通電自我測試,並斷言模組可正常運作。若模組無法正常運作,就停止該行程。
  2. 以 strict 或 standard 政策建構防護機制。
  3. 在每一項加密作業之前,透過防護機制斷言雜湊、簽章 OID、加密演算法與金鑰強度。
  4. 捕捉該具型別的違規,記錄一則結構化訊息,並拒絕該作業。不要改用較弱的選擇。
examples/enterprise/fips-boot-and-guard.php
<?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());
}
examples/enterprise/fips-assert-choices.php
<?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;
}
}
}
  1. 執行通電自我測試,並確認其回報可正常運作。確認它演練了每一個核准的演算法類別——雜湊、訊息驗證、加密、已驗證加密、簽章與隨機位元。
  2. 斷言一項核准的選擇(例如 SHA-256、RSA 2048),並確認其通過。斷言一項不被允許的選擇(例如 SHA-1、RSA 1024),並確認其會引發一個具型別的違規。
  3. 在自我測試中注入刻意損壞的雜湊或隨機來源,並確認模組進入錯誤狀態並拒絕服務。
  4. 確認未知的金鑰類型預設一律遭拒絕,而非被接受。
  • 故障關閉。 當某項加密選擇不被允許時,防護機制會引發一個具型別的違規並停止該作業。政策絕不會自我放寬,也絕不會改用較弱的演算法。
  • 自我測試在不相符時拒絕。 已知答案測試失敗會使模組進入具有行程黏滯性的錯誤狀態。整個行程會維持故障關閉;全新的啟動防護機制或政策都無法復原它,且一次通過的重新執行也不會解除鎖存。唯有重新啟動行程才能清除它(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)。

本頁涉及加密政策。每一份規範性來源皆以改寫方式呈現;不重製任何規範性文字。 > NextPDF Enterprise 並非通過 FIPS 驗證的加密模組,且不作任何 FIPS 認證主張。 唯有在你設定為搭配通過 FIPS 驗證的加密提供者(例如通過 FIPS 驗證的 OpenSSL 提供者)或通過 FIPS 驗證的硬體安全模組(HSM)時,它才會以 FIPS 相容模式運作。FIPS 模式政策有助於合規;它並非認證,也不是法律意見。關於你的法規義務,請諮詢你自己的合規與法律顧問。

  • 啟動時自我測試失敗。 啟動防護機制會引發模組錯誤狀態例外。停止該行程;不要以未經驗證的加密路徑繼續執行。
  • 政策違規。 防護機制會引發一個具型別的違規,指明政策與違規項目。拒絕該作業;不要降級。
  • 未知的金鑰類型。 政策預設一律拒絕。唯有在該金鑰類型確實已獲核准時,才明確建立對應。
  • 自我測試重新執行。 管理端點或命令可視需要進行重新執行,以滿足定期隨需自我測試的義務。它並非復原機制:一次失敗的重新執行同樣會鎖存該行程,而一次通過的重新執行也不會解除既有的鎖存。若要讓處於錯誤狀態的模組復原,必須重新啟動行程。

本頁僅記載外部可觀察的行為與受支援的公開 API 介面。內部命名空間路徑、輔助類別、機制對照表、runbook 檔名與工單前綴皆不在範圍內。