跳到內容

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 的牆鐘預算涵蓋一次使用遠端 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 在升級時不會變更。