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 — 词汇表术语。