跳转到内容
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)。该错误状态对进程具有粘滞性:一旦进程中的任何启动防护机制检测到错误,整个进程在其生命周期内都会维持故障关闭。构造全新的启动防护机制或策略无法清除它。后续即使有一次通过的自检重新运行,也不会清除已锁存的错误——根据 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 接口。内部命名空间路径、辅助类、机制表、运行手册文件名与工单前缀不在范围内。