跳转到内容

PAdES 基准等级映射

PAdES 是 PDF 高级电子签名的配置文件系列,由 ETSI EN 319 142 标准化。它定义了四个基准一致性等级:B-B、B-T、B-LT 与 B-LTA,每个较高等级都在下一级之上附加材料。本页将这些等级映射到 NextPDF 实际生成的内容,并区分 Core 接口与 Pro、Enterprise 版本。这份映射位于行为层面:它描述引擎输出什么,而不是内部类别。

简要结论如下。NextPDF Core 生成与 B-B 及 B-T 等级对齐的签名结构。B-LT 与 B-LTA 的生成路径随 Pro 与 Enterprise 版本一同提供。任何已生成的签名是否在某个等级被接受为符合,取决于验证方以及该验证方配置的信任锚点。生成方无法代替验证方宣告符合性。

Terminal window
composer require nextpdf/core:^3

PDF 数字签名是一个 CMS SignedData 结构,存储在签名字典的 Contents 项中。ByteRange 数组指出摘要所覆盖的字节区间——ISO 32000-2 §12.8.1。CMS SignerInfo 携带已签名属性,包括 content-type 与 message-digest 属性——RFC 5652 §5.3。覆盖这些属性的消息摘要由 §5.4 程序计算得出。PAdES 沿用 CAdES 的属性模型,并将其嵌入该 PDF 签名字典中。

四个基准等级是叠加式的:

  • B-B 携带基础签名及其必要的已签名属性。
  • B-T 添加一个针对签名值计算的签名时间戳属性。时间戳属性证明签名在被加盖时间戳的那一刻已经存在——ETSI PAdES §5.4.3。该令牌由 RFC 3161 时间戳服务机构(Time-Stamping Authority)生成——RFC 3161 §2.4.1。
  • B-LT 添加长期验证材料——证书、OCSP 与 CRL 数据——并将其放入文档安全存储区(Document Security Store)中——ETSI PAdES §6.2.2、ISO 32000-2 §12.8.4.3,以及 ETSI EN 319 142-2 §6.3 所描述的验证数据放置方式。
  • B-LTA 添加一个归档文档时间戳,使有效性可长期维持——ETSI PAdES §6.2.2。

这四个等级严格叠加——每个较高等级都会保留下一级携带的全部内容,并只新增一层材料。每一步可由哪个版本生成,已标在转换箭头上。

+ RFC 3161 sig time-stamp

(Core / Enterprise
+ Document Security Store

(Enterprise only)
+ archive doc time-stamp

(Enterprise only)

B-B

CMS signature + signed attributes

B-T

+ signature time-stamp (over the signature value)

B-LT

+ DSS validation material (cert, OCSP, CRL)

B-LTA

+ archive document time-stamp (over the DSS)

;

not

Pro)

Diagram

等级选择器是 SignatureLevel 枚举,其 case 为 PAdES_B_BPAdES_B_TPAdES_B_LTPAdES_B_LTA。它的 requiresTimestamp()requiresDss()requiresDocumentTimestamp()isAvailableInEnvironment() 方法会报告某个等级需要什么,以及当前运行时是否能满足这些要求。在 Core 发行版中,isAvailableInEnvironment() 对 B-B 与 B-T 返回 true,对 B-LT 与 B-LTA 返回 false。它对 B-LT 与 B-LTA 返回 false,是因为长期验证的生成端只在运行时通过 resolve(解析)取得,并不属于开源软件包。生产环境代码应使用 SignerInterface 契约,而不是这些内部类型。

等级它新增什么核心版 Core(nextpdf/corePro / Enterprise(专业版/企业版)
B-B带有必要已签名属性的基础签名生成对齐结构;以合成的黄金基准(golden baseline)进行测试接口相同
B-T针对签名值的签名时间戳提供 RFC 3161 时间戳服务时,生成对齐结构接口相同
B-LT文档安全存储区中的验证数据Core 不提供此生成端;未安装 Enterprise 软件包时选择 B-LT,会以失败关闭(fail closed)方式处理已提供生成端
B-LTA归档文档时间戳Core 不提供此生成端;如上所述以失败关闭方式处理已提供生成端

「生成对齐结构」是指引擎输出一份结构遵循所引条款的签名。该结构由项目的 tests/Corpus/pades/tests/Golden/baselines/ 产物验证。它并不表示某个外部验证器已按该等级认证输出。请参阅符合性一节。

examples/contracts/signing-quickstart.php
<?php
declare(strict_types=1);
require_once __DIR__ . '/../../vendor/autoload.php';
use NextPDF\Contracts\SignerInterface;
/**
* Sign a byte range with any SignerInterface implementation.
*
* @param SignerInterface $signer A Core or Premium signer.
* @param string $byteRange The PDF byte range to sign.
*
* @return string Hex-encoded CMS SignedData for the PDF /Contents field.
*/
function signByteRange(SignerInterface $signer, string $byteRange): string
{
return $signer->sign($byteRange)->toHex();
}

此函数依赖 SignerInterface 契约,而不是具体类。Core 软件签名器(B-B 或 B-T)和 Premium HSM 签名器都能满足它。版本变更时,调用方代码无需改动。

examples/contracts/signing-level.php
<?php
declare(strict_types=1);
require_once __DIR__ . '/../../vendor/autoload.php';
use NextPDF\Security\Signature\SignatureLevel;
/**
* Resolve the highest baseline level the current runtime can produce.
*
* B-B and B-T are produced by the Core distribution. B-LT and B-LTA
* require the Enterprise long-term-validation package; without it the
* level reports unavailable so callers fail closed rather than emit a
* structure that does not carry the validation material the level names.
*
* @return SignatureLevel The highest level available in this runtime.
*/
function highestAvailableLevel(): SignatureLevel
{
foreach ([
SignatureLevel::PAdES_B_LTA,
SignatureLevel::PAdES_B_LT,
SignatureLevel::PAdES_B_T,
SignatureLevel::PAdES_B_B,
] as $level) {
if ($level->isAvailableInEnvironment()) {
return $level;
}
}
return SignatureLevel::PAdES_B_B;
}

isAvailableInEnvironment() 对 B-B 与 B-T 返回 true,无需任何额外软件包。只有安装了 Enterprise 长期验证软件包时,它才会对 B-LT 与 B-LTA 返回 true。如果未主动选择降级却选取了不可用等级,会抛出一个带类型的不可达等级异常,异常消息会指出缺少的软件包名称。因此,配置错误的部署会以失败关闭方式处理,而不会静默输出比调用方要求更低的等级。

  • 结构上属于 B-T 的签名,与被验证为 B-T 的签名并不相同。验证由验证方执行,使用该验证方的信任锚点以及撤销信息的时效性。生成方无法代替验证方宣告结果。
  • PAdES B-LT 与 B-LTA 需要 NextPDF Enterprise 软件包(nextpdf/enterprise)。未安装时,签名器会以失败关闭方式处理,B-LT/B-LTA 将不可用。Core 接口通过公开的 NextPDF\Contracts\SignerInterface 提供 B-B/B-T,而长期验证则位于 LtvManagerInterface 之后。在 Core 发行版中选取不可用等级,默认会以失败关闭方式处理。带类型的异常会指出缺少的公开软件包,而不是内部类型。降级到较低等级必须主动选择,绝不是默认行为。
  • 字节范围摘要必须排除签名值。把 Contents 字节也纳入摘要时,验证永远无法通过——ISO 32000-2 §12.8.1。
  • B-T 中的签名时间戳针对签名值计算,而不是针对文件字节。B-LTA 中的归档时间戳是独立的文档时间戳。两者不可互换——ETSI PAdES §5.4.3 与 §6.2.2。
  • ETSI EN 319 142-1(基准等级的部分)不在本项目的证据语料库中。此处的等级结构主张以 ETSI EN 319 142-2、pades 配置文件、ISO 32000-2 §12.8,以及 RFC 5652 / RFC 3161 为依据。等级名称与叠加结构依据 v3.x 中的实现陈述。本文并不主张任何符合性测试结果或第三方背书。

等级成本会随等级提升而增加。B-B 是单次签名操作,对软件密钥而言通常只需个位数毫秒。B-T 会增加一次到时间戳服务机构的网络往返。B-LT 会针对链中每张证书增加一次撤销信息获取。B-LTA 会再增加一个文档时间戳。1500 ms 的 wall-clock 预算涵盖一次带有远程 TSA、且连接已预热的 B-T 签名。B-LT 或 B-LTA 面对缓慢的撤销端点时会超出此预算,应放在请求路径之外。可重现性配置文件为 structural,而不是 bitwise。时间戳会嵌入签名发生的时刻。因此,两次执行的时间戳字节会有所不同,而文件结构保持相同。

签名所声称的等级与它被验证为的等级,是两件不同的事实。本页仅描述生成方接口。长期验证取决于验证数据是否在签名时被收集,以及验证方日后是否仍信任相同的锚点。这两者都不是生成方能够保证的。对时间戳的信任最终取决于对时间戳服务机构的信任,部署方会通过可注入的提供者来固定它。本页标记为 export_control_class: legal-review-required,因为它涉及密码学签名配置文件。所有规范性来源均已改写,未逐字重现,符合引用卫生要求。

主张标准条款证据
签名值以 DER 编码,作为 CMS SignedData 或 TimeStampToken,存储在签名字典的 Contents 项中。ISO 32000-2§12.8.1
摘要按 ByteRange 区间计算,并排除签名值。ISO 32000-2§12.8.1
签名时间戳属性针对签名值计算(B-T)。ETSI PAdES(EN 319 142)§5.4.3
长期验证材料携带于文档安全存储区中(B-LT)。ETSI PAdES(EN 319 142)/ ISO 32000-2§6.2.2 / §12.8.4.3
验证数据放置于 DSS 与 VRI 字典中。ETSI EN 319 142-2§6.3
归档文档时间戳可长期维持有效性(B-LTA)。ETSI PAdES(EN 319 142)§6.2.2
SignerInfo 携带 content-type 与 message-digest 已签名属性。RFC 5652§5.3
消息摘要按 DER 编码的已签名属性计算(§5.4 程序)。RFC 5652§5.4
时间戳向 RFC 3161 TSA 发起请求,并返回一个 TSTInfo 结构。RFC 3161§2.4.1

所有条款均已改写。NextPDF 不重现规范性文字。权威表述请查阅已发布的标准。ETSI EN 319 142-1 不在证据语料库中。关于基准等级的结构性主张以上述来源为依据,并依据 v3.x 中的实现陈述。

Core 生成 B-B 与 B-T 签名结构。B-LT 与 B-LTA 的生成路径、HSM 与 PKCS#11 密钥保管,以及 FIPS 140-3 密码学原则配置文件,随 Pro 与 Enterprise 版本一同提供。Core 在运行时解析长期验证的生成端。因此,开源引擎不带任何商业依赖,且 SignerInterface API 在升级时不会变更。