PDF 簽名檢查器

檢查 PDF 的簽名欄位、統計簽名標記,並分析 ByteRange 完整性視窗。

檢查 PDF 的簽名欄位、統計簽名標記,並分析 ByteRange 完整性視窗。 檢查 PDF 的簽名欄位、統計簽名標記,並分析 ByteRange 完整性視窗。

背景知識

PDF 簽名如何工作

PDF 上的數字簽名不是畫在頁面上的圖章(儘管也可能存在視覺簽名外觀)。它是 一個密碼學物件:簽名字典的 /Contents 值儲存著 DER 編碼的 PKCS#7 SignedData 結構。該結構包含簽名者的證書、摘要演算法,以及對 PDF 位元組精確切片計算出的 簽名。/ByteRange 陣列精確描述簽名覆蓋了檔案的哪些位元組範圍:通常為 [0, a, b, c],意為"位元組 0..a-1 和 b..b+c-1"。這些範圍內的所有內容都被簽名; 範圍之外——包括簽名值本身——則沒有。這種設計讓 PDF 無需預先知道最終長度 就能簽名。

為什麼 ByteRange 對防篡改很重要

要驗證簽名,檢查器對簽名範圍內的位元組計算雜湊,並與 PKCS#7 結構中內嵌的 摘要比對。如果簽名後有人編輯 PDF,覆蓋的位元組會改變,重算的雜湊就會偏離, 驗證失敗——這就是篡改訊號。因此 /ByteRange 定義了完整性視窗:簽名只能保護 它覆蓋的位元組。範圍未覆蓋整個文件的簽名會留下其餘檔案可被無痕修改的漏洞。 本檢查器會報告範圍是否存在,以及它是否從位元組 0 開始並覆蓋頭部加尾部—— 這是所有簽名工具都會產生的形狀。

這個工具檢查什麼

它用內建的 pdf-lib 庫(Apache-2.0)解析 PDF,並報告:頁數;AcroForm 中 找到的簽名欄位數;原始位元組流中 /FT /Sig 標記的數量;/ByteRange 陣列是否 存在;以及該範圍是否具有規範 [0, head, tailStart, tailLen] 形狀。零標記的 PDF 完全沒有簽名。有標記但無法解析範圍的 PDF 不常見,值得仔細檢查。完整的 密碼學驗證——重算雜湊並驗證證書鏈——需要簽名者的完整鏈和信任庫;本頁面 聚焦於揭示簽名是否存在、完整性視窗是否完好的結構性分析。

解讀結果

多個簽名標記通常意味著多重簽名,或增量更新後文檔被重新簽名。加密 PDF 可能 對解析器隱藏簽名字典;本工具使用 ignoreEncryption 模式,仍會報告結構。 記住:本工具檢查結構,不檢查身份。它無法告訴你簽名者是否確如其聲稱——那 需要對照可信根驗證證書。把它用作收到文件的初步分流,重要內容再用你平臺的 完整簽名驗證跟進。分析完全在瀏覽器中完成,你的 PDF 永遠不會被上傳。

使用 Apache-2.0 協議的 pdf-lib 庫(已內置於 public/assets)。分析在本地完成,PDF 永不上傳。

常見問題

這個工具會做密碼學驗證嗎?
它進行結構性分析:檢測簽名欄位、統計 /FT /Sig 標記、檢查 ByteRange 完整性視窗形狀。完整的雜湊重算和證書鏈驗證需要簽名者的證書鏈和信任庫,瀏覽器頁面無法離線提供。
空的 ByteRange 報告意味著什麼?
如果找不到 /ByteRange 陣列但存在簽名標記,PDF 可能使用了不尋常的簽名佈局或已損壞。既無標記也無 ByteRange 的 PDF 就是沒有簽名。
什麼是增量更新,為什麼重要?
許多 PDF 工具在檔案末尾追加更改而不是重寫整個檔案。每次追加都可能新增或替換物件,重新簽名會表現為新標記。這就是為什麼簽名 PDF 可能顯示多個簽名標記。
加密的 PDF 還能檢查嗎?
可以,但有侷限。檢查器以 ignoreEncryption 模式載入,因此簽名字典仍然可見。對 /FT /Sig 的原始位元組掃描不受加密影響,因為它搜尋的是明文流。
我的 PDF 會被上傳嗎?
不會。PDF 用 FileReader 讀取,並在瀏覽器內完全使用內建的 pdf-lib 庫解析。示例 PDF 也在本地生成。任何內容都不會離開你的裝置。
什麼是 PKCS#7 / CAdES / PAdES?
PKCS#7 是承載簽名資料的容器格式(現標準化為 CMS)。PAdES 是該格式的 PDF 剖面,供歐洲電子簽名法規使用;它增加了長期驗證屬性,使簽名多年後仍可驗證。