跳到內容

簽章:PAdES B-LT / B-LTA、DSS、文件時間戳記

NextPDF Enterprise 在 Core CMS 簽章之上加入長期保存產生器:文件安全儲存區(DSS)、每個簽章的驗證相關資訊(VRI),以及文件時間戳記。這些結構會將 PAdES 基準簽章從 B-B 提升到 B-LT,再提升到 B-LTA。本頁從行為層級說明產生器會寫入什麼、不會決定什麼,以及 Pro 邊界從哪裡開始。

Terminal window
composer require nextpdf/enterprise

nextpdf/enterprise 依賴 nextpdf/corenextpdf/pro。請在 Private Packagist 上使用你的 NextPDF 授權憑證解析此套件。

PAdES 基準簽章有四個層級,每一層都在前一層的基礎上加入資料。B-B 是帶有已簽署屬性的 CMS 簽章。B-T 會在簽章值上加入受信任的 RFC 3161 時間戳記。B-LT 會加入 DSS,內含驗證器在簽署憑證過期後所需的憑證、OCSP 回應與 CRL。B-LTA 會在整個文件狀態(包含 DSS)之上加入文件時間戳記,讓驗證資料本身也維持時間錨定。

Core 會建立 CMS SignedData,並以 DER 編碼存放在簽章字典的 Contents 項目中——ISO 32000-2 §12.8.1。長期驗證由兩種字典型別完成:文件安全儲存區,以及文件時間戳記字典——ISO 32000-2 §12.8。Enterprise 產生器會寫入 DSS,其中存放憑證、OCSP 與 CRL 資料——ISO 32000-2 §12.8.4.3;對於 B-LTA,則會寫入文件時間戳記字典——ISO 32000-2 §12.8.5。ETSI EN 319 142-2 描述相同的長期保存形態:用於長期簽章的 DSS 項目加上文件時間戳記——§5.5——並由簽章處理器支援——§6.3.3.3。

產生器會為鏈中每個憑證收集撤銷資料。它會先查詢 OCSP 回應器;OCSP 回應會回報 goodrevokedunknown——RFC 6960 §2.2——而 thisUpdatenextUpdate 欄位會界定該狀態的新鮮度——RFC 6960 §4.2。若 OCSP 無法使用,則會回退到 CRL。產生器會依照路徑驗證輸入,從簽署者朝信任錨點走訪憑證鏈——RFC 5280 §6.1。

B-LTA 文件時間戳記是與時間戳記機關(Time-Stamping Authority)之間的一次 RFC 3161 交換。該交換會回傳 TSTInfo——RFC 3161 §2.4.1——其 genTime 即為符記建立時的 UTC 瞬時——RFC 3161 §2.4.2。該符記會嵌入 /DocTimeStamp 字典,並以 /SubFilter /ETSI.RFC3161 涵蓋整個檔案。

產生出的簽章是否能驗證通過,取決於驗證器,以及它所設定的信任錨點與撤銷政策。產生器只嵌入資料;不主張任何受信任的結果。下文所有重要位置都會再次重申這條邊界。

順序至關重要:DSS 必須在 B-LTA 文件時間戳記之前寫入,因為時間戳記必須涵蓋已包含驗證資料的文件狀態。產生器流程如下所示。

RFC 3161 TSAOCSP or CRL responderEnterprise LtvManagerCore CMS SignerRFC 3161 TSAOCSP or CRL responderEnterprise LtvManagerCore CMS SignerB-LT — embed validation materialalt[OCSP available][OCSP unavailable]B-LTA — anchor the DSS in timeCallersign byteRange1CMS SignedData — B-B or B-T2OCSP request per chain certificate3OCSP response — good, revoked or unknown4CRL fetch — fallback5CRL6Write DSS — certs + OCSP + CRL7TimeStampReq over file incl. DSS8TimeStampToken9Verify token, embed /DocTimeStamp10Long-term PDF — B-LT or B-LTA11Caller
Diagram

Enterprise 長期保存產生器透過 Core 合約使用。正式環境程式碼應依賴合約,而非具體的 Enterprise 實作型別。

型別種類角色穩定度
SignerInterfaceinterface(NextPDF\Contracts呼叫端所依賴的 Core 簽署合約stable1.0.0
SignatureLevelenum(NextPDF\Security\SignaturePAdES 層級選擇器:B-B、B-T、B-LT、B-LTAstable1.0.0
LtvManagerInterfaceinterface(NextPDF\Contracts在執行階段解析的長期驗證產生器合約stable1.0.0
TsaClientInterfaceinterface產生器為文件時間戳記所呼叫的 RFC 3161 TSA 用戶端stable1.0.0

SignatureLevel::requiresDss() 在 B-LT 與 B-LTA 會回傳 true;SignatureLevel::requiresDocumentTimestamp() 只有在 B-LTA 會回傳 true。當 Enterprise 長期保存產生器未安裝時,Core 的 SignatureLevel::isAvailableInEnvironment() 對 B-LT 與 B-LTA 會回傳 false;Core 協調器接著會 fail closed。具體的 Enterprise 產生器類別屬於內部實作,不是公開 API 的一部分;請依賴 LtvManagerInterface 與該 enum。

examples/contracts/pades-blt-quickstart.php
<?php
declare(strict_types=1);
require_once __DIR__ . '/../../vendor/autoload.php';
use NextPDF\Security\Signature\SignatureLevel;
/**
* Select the PAdES level for a long-term signature.
*
* B-LT embeds a DSS. B-LTA also adds a document timestamp.
* Both require the nextpdf/enterprise long-term producer at runtime.
*
* @return SignatureLevel The requested PAdES baseline level.
*/
function longTermLevel(): SignatureLevel
{
return SignatureLevel::PAdES_B_LTA;
}

層級承載在簽署設定中。Core 協調器會在執行階段透過 LtvManagerInterface 解析長期保存產生器,因此應用程式碼不會參照 Enterprise 型別。

examples/contracts/pades-blt-production.php
<?php
declare(strict_types=1);
require_once __DIR__ . '/../../vendor/autoload.php';
use NextPDF\Contracts\LtvManagerInterface;
use NextPDF\Contracts\SignerInterface;
use NextPDF\Exception\NextPdfException;
use Psr\Log\LoggerInterface;
final readonly class LongTermSigner
{
public function __construct(
private SignerInterface $signer,
private LtvManagerInterface $ltv,
private LoggerInterface $logger,
) {}
/**
* Sign, then embed the DSS and the B-LTA document timestamp.
*
* The order matters: the DSS is written first, then the document
* timestamp is taken over the document state that already includes it.
*
* @param string $byteRange The PDF byte range to sign.
*
* @throws NextPdfException When revocation material is missing under the
* fail-closed enforcement default, or when no TSA
* is configured for B-LTA.
*/
public function sign(string $byteRange): string
{
try {
$contents = $this->signer->sign($byteRange)->toHex();
// The orchestrator drives DSS collection and the document
// timestamp through the resolved LtvManagerInterface; revocation
// freshness and TSA reachability are operational inputs.
return $contents;
} catch (NextPdfException $e) {
$this->logger->error('long-term signing failed', ['reason' => $e->getMessage()]);
throw $e;
}
}
}

DSS 必須在文件時間戳記之前寫入。B-LTA 時間戳記會涵蓋整個檔案(包含 DSS),這正是讓驗證資料本身具備時間錨定的關鍵。

  • 缺少撤銷資料時,預設 fail closed。 當未設定任何強制模式時,產生器會將任一非根憑證缺少 OCSP 回應與缺少 CRL 的情況視為錯誤,而非警告。這可避免聲稱具有長期層級的文件,在 DSS 中沒有任何撤銷資料時仍被寫出。寬鬆(僅警告)工作流程必須明確選用。
  • B-LTA 需要一個 TSA。 文件時間戳記是一次 RFC 3161 來回交換。未設定 TSA 用戶端時,B-LTA 步驟會引發錯誤,不會默默產生 B-LT。
  • 順序至關重要。 只有在 DSS 寫入後才加入文件時間戳記。在 DSS 之前取得的時間戳記並不涵蓋驗證資料。
  • 氣隙(air-gapped)執行。 在嚴格離線網路政策下,不會進行任何 OCSP/CRL 擷取,也不會送出任何 TSA 請求;只會使用已嵌入 DSS 中的資料。B-LTA 需要新鮮的 TSA 符記,在嚴格離線下無法達成。
  • VRI 需明確選用。 預設不會寫入每個簽章的 VRI。某些驗證器在有 VRI 時,能更好地顯示長期狀態;只有在目標驗證器需要時才啟用它。

DSS 組裝成本會隨憑證鏈長度與擷取的撤銷回應數量增加。每次 OCSP 或 CRL 擷取都是一次網路來回;預先收集或快取資料可省去這些來回。一次 B-LTA 執行會因文件時間戳記額外增加一次 TSA 來回。1500 ms 的牆鐘預算涵蓋單一長期簽章,前提是 OCSP/CRL 與 TSA 連線皆已暖機;冷啟動或緩慢的回應器會主導牆鐘時間。可重現性設定檔為 structural:時間戳記會嵌入簽署與蓋章的瞬時,因此兩次執行在那些位元組上會不同,但文件結構相同。

  • 信任由驗證器決定。 產生器嵌入憑證、OCSP 與 CRL。簽章是否驗證通過,取決於驗證器、它的信任錨點,以及它的撤銷新鮮度政策。NextPDF 不隨附任何內建信任清單。
  • 撤銷新鮮度有時間界限。 OCSP thisUpdate/nextUpdate 與 CRL 的有效期窗,界定了嵌入資料能維持多久仍然有用。存檔迴圈會在時間戳記憑證過期前重新蓋章;依排程執行存檔迴圈是呼叫端的責任。
  • Fail-closed 預設。 嚴格撤銷強制預設的目的,是避免在沒有支撐資料時做出長期聲明。
  • 請參閱 Enterprise 威脅模型章節存檔:DSS、VRI、LTV 健康

OCSP 與 CRL 擷取會聯絡各憑證指定的回應器;這些端點與 TSA 會看到請求中繼資料。在受資料落地限制的部署中,請預先收集撤銷資料,並在嚴格離線政策下執行,讓簽署時不聯絡任何回應器或 TSA。憑證帶有主體身分。產生器只嵌入驗證所需的憑證,不會在憑證鏈之外另加身分;它不會從呼叫端提供的憑證中移除主體欄位。

產生器診斷會回報層級、鏈中位置,以及缺少資料的情況。它們不會記錄私鑰或完整憑證內容。接上 PSR-3 日誌器時,請將簽署流程的診斷日誌維持在非正式環境適用的詳細程度,並在回應器 URL 可能揭露內部基礎設施時加以清洗。請將任何嵌入的 OCSP/CRL 位元組視為文件內容,而非日誌內容。

FIPS 140-3 加密政策設定檔是隨安全模組一併記載的 Enterprise 功能。長期保存產生器除用於文件時間戳記的 SHA-256 摘要與 RFC 3161 交換之外,不會加入任何自有加密原語;簽署原語來自 Core 簽署器。當 FIPS 設定檔啟用時,會產生相同的 DSS 與文件時間戳記結構;該約束適用於底層簽署與摘要演算法,而不是 DSS 配置。

資產對手風險緩解措施
DSS 撤銷資料接受過時資料驗證器信任了過期的撤銷資料OCSP/CRL 新鮮度欄位界定有效性;存檔迴圈在過期前重新蓋章
B-LTA 文件時間戳記TSA 遭入侵或 TSA 無法連線沒有可信賴的時間錨點呼叫端選定的 TSA;B-LTA 在未設定 TSA 時 fail closed
長期聲明默默地缺少資料一份沒有撤銷資料的「長期」PDFFail-closed 強制預設引發錯誤而非警告
簽章驗證驗證器信任設定錯誤驗證器不應主張的表面有效性產生器聲明它只嵌入資料;信任決定由驗證器做出
聲明標準條款reference_id
簽章值(或時間戳記符記)會以 DER 編碼存放於 /Contents 中。ISO 32000-2§12.8.1
長期驗證使用一個 DSS 與一個文件時間戳記字典。ISO 32000-2§12.8
DSS 存放憑證、OCSP 回應與 CRL。ISO 32000-2§12.8.4.3
文件時間戳記使用一個文件時間戳記字典。ISO 32000-2§12.8.5
DSS 項目與文件時間戳記支援長期簽章。ETSI EN 319 142-2§5.5
簽章處理器支援 DSS 項目與文件時間戳記。ETSI EN 319 142-2§6.3.3.3
一個時間戳記符記帶有一個 UTC genTime,即為它被建立的瞬時。RFC 3161§2.4.2
OCSP 回報 good、revoked 或 unknown,並受 thisUpdate/nextUpdate 界定。RFC 6960§2.2、§4.2

所有條款皆為改寫。NextPDF 不重製規範性文字;請查閱已發布的標準以取得權威用語。**NextPDF 不做任何 PAdES 認證聲明。**此處所述的結構與 B-LT 及 B-LTA 層級對齊,這些層級定義於 ETSI EN 319 142;不主張任何一致性測試結果或第三方認證。ETSI EN 319 142-1 基準層級部分不在所引用的證據集合之內,因此本頁陳述的是所產生的結構與 Pro/Enterprise 邊界,而非經認證的一致性層級。所引用的 ETSI 證據是 EN 319 142-2;ISO 與 RFC 錨點承載長期與時間戳記聲明,與 Core 簽署參考所做的完全一致。

NextPDF Core 產生 B-BB-T PAdES 基準層級:Core 隨附軟體 CMS 簽署器與 RFC 3161 時間戳記路徑,因此 B-T(加時間戳記)簽章是 Core 能力,不需要 Enterprise。NextPDF Pro 也會產生 B-BB-T:Pro 組合 Core 的 RFC 3161 堆疊,在簽章值上加入 signature-time-stamp 未簽署屬性(PadesBtTimestamper,已通過 fixture 驗證)。B-LTB-LTA 層級——DSS、VRI 與文件時間戳記產生器——是 Enterprise 功能,由 Core 或 Pro 產生。這與 Pro 安全頁面 上已發布的層級表相符:B-B 與 B-T 由 Core 與 Pro 產生,而 B-LT 與 B-LTA 僅由 Enterprise 產生。B-T 產生器屬於結構性——它組合 RFC 3161 signature-time-stamp,依照所引用的 RFC 3161 / RFC 5652 / ETSI EN 319 122-1 證據;它不是經認證的 ETSI EN 319 142-1 一致性或 eIDAS 合格聲明。在僅有 Pro 的部署中,請求 B-LT 或 B-LTA 會 fail closed,並附上指名缺少之 Enterprise 元件的訊息,因為 Enterprise 長期保存產生器不存在時,SignatureLevel::isAvailableInEnvironment() 會回傳 false。

PAdES 層級加入產生器版本
B-B帶有已簽署屬性的 CMS 簽章Core、Pro、Enterprise
B-T簽章值上的 RFC 3161 signature-time-stamp(結構性;非 eIDAS 合格)Core、Pro、Enterprise
B-LT帶有驗證資料的文件安全儲存區僅 Enterprise(nextpdf/enterprise
B-LTA用於存檔有效性的文件時間戳記僅 Enterprise(nextpdf/enterprise

這是規範的「層級→級別」對照矩陣:B-B 是每個版本都會產生的基準;B-T(加時間戳記)也由 Core 與 Pro 產生(Pro 組合 Core 的 RFC 3161 堆疊);B-LT 與 B-LTA 僅限 Enterprise。B-T 產生器屬於結構性——它不是經認證的 ETSI EN 319 142-1 一致性或 eIDAS 合格聲明。

長期保存產生器是 Enterprise 版本的一部分(license_feature_flag: enterprise)。它在執行階段透過 Core 合約解析;從 Pro 升級到 Enterprise 時,公開 API 不會變更。

  • Core 與 Pro 都會產生 B-B 與 B-T(B-T 加入 RFC 3161 signature-time-stamp;Pro 組合 Core 的 RFC 3161 堆疊)。B-LT 與 B-LTA 是 Enterprise 邊界;在沒有 nextpdf/enterprise 時請求它們,會 fail closed 並附上具名錯誤。
  • 產生器寫入 DSS(B-LT),以及涵蓋 DSS 的文件時間戳記(B-LTA)。它嵌入驗證資料;不主張任何受信任的驗證結果。
  • Fail-closed 撤銷強制預設會在非根憑證缺少撤銷資料時引發錯誤,除非呼叫端明確選用寬鬆工作流程。
  • B-LTA 需要已設定的 TSA;沒有 TSA 時,B-LTA 步驟會引發錯誤,不會降級為 B-LT。

本公開頁面僅描述外部可觀察的產生器行為。它不包含任何內部命名空間路徑、任何內部類別或 trait 名稱、任何 runbook 檔名,以及任何內部工單前綴。具體的 Enterprise 長期保存產生器型別僅透過公開的 Core 合約(LtvManagerInterfaceSignatureLevel)參照。詳細的 DSS 組裝與存檔迴圈內部實作收錄在受 NDA 約束的閘控深入參考中。

在僅有 Core 的部署中,軟體簽署器會使用本機金鑰,或透過 Core 簽署策略合約提供的金鑰,產生 PAdES B-BB-T。Core 隨附 RFC 3161 時間戳記路徑,因此不需任何進階套件即可達成 B-T。Core 沒有 DSS、VRI 或文件時間戳記產生器;請求 B-LT 或 B-LTA 會 fail closed,並附上具名錯誤。請參閱 安全 / 簽署(Core)

在僅有 Pro 的部署中,受支援的簽署路徑包括 Pro 的 B-B 基準與 Pro 的 B-T 層級(Pro 組合 Core 的 RFC 3161 堆疊,以加入 signature-time-stamp 未簽署屬性),以及它的遠端與雲端 KMS 簽署策略。Pro 不產生任何 DSS、VRI 或文件時間戳記。在僅有 Pro 的部署中,請求 B-LT 或 B-LTA 的設定會 fail closed,並附上指名缺少之 Enterprise 元件的訊息。關於 Pro 簽署介面,請參閱 Pro 安全

DSS、VRI 與文件時間戳記產生器僅以行為層級描述。內部的 DSS 組裝排序邏輯、每個簽章的 VRI 鍵控內部實作,以及存檔迴圈排程內部實作,皆超出公開介面範圍,此處不予重現。

NextPDF Enterprise 會嵌入驗證資料;它整合呼叫端提供的 OCSP/CRL 回應器與 RFC 3161 TSA。它本身不會營運、託管或保證那些回應器或 TSA 的可用性。**長期有效性取決於那些回應器、TSA、存檔迴圈排程與操作者——而非單靠 NextPDF Enterprise。**操作者負責 TSA 的選擇與可連線性、撤銷回應器的存取或預先收集資料、網路政策,以及在每個時間戳記憑證過期前執行存檔迴圈。

本頁標記為 export_control_class: legal-review-required。它涉及加密簽署與長期驗證。在設定 publish 旗標之前,需取得法律核准。與 B-LT 及 B-LTA 結構對齊——這些結構定義於 ETSI EN 319 142——是結構性陳述,並非法律意見,也不是認證。**NextPDF 不做任何 PAdES 認證聲明。**關於你的法規義務,請諮詢你自己的合規與法律顧問。