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 剖面,供欧洲电子签名法规使用;它增加了长期验证属性,使签名多年后仍可验证。