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 版本一同提供。任何已產生的簽章能否在某個等級被接受為符合,取決於驗證端,以及該驗證端所設定的信任錨點。產生端無法代替驗證端宣告符合性。
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。
這四個等級是嚴格疊加的——每個較高等級都保留較低一級所攜帶的全部內容,並恰好新增一層新材料。圖中的轉換標示每一步驟由哪些產生端版本提供。
API 介面
標題為「API 介面」的區段等級選擇器是 SignatureLevel 列舉,其 case 為 PAdES_B_B、PAdES_B_T、PAdES_B_LT 與 PAdES_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/core) | Pro / 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/ 產物所驗證。這並不是聲明某個外部驗證器已在該等級認證輸出。請參閱符合性一節。
程式碼範例——快速上手
標題為「程式碼範例——快速上手」的區段<?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 簽章器都能符合此契約。版本變更時,呼叫端程式碼不需更動。
程式碼範例——正式環境
標題為「程式碼範例——正式環境」的區段<?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 的牆鐘預算涵蓋一次使用遠端 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 在升級時不會變更。