问题描述
使用数字签名对 PDF 进行签名时,可以使用受信任的时间戳服务来添加由时间戳机构签名的时间戳令牌。当查看 PDF 的签名时,它会说它包含一个签名的时间戳,并且从那时起它没有被篡改(如果没有)。
从技术上讲,pdf 内容的散列被发送到 TSA (RCF3161),该散列与当前时间戳(由时间戳机构确定)以及一些元数据一起放入一个结构中,然后签名并寄回。然后,这提供了自该时间点以来 PDF 未更改的证据。
因此,从技术上讲,应该可以创建这样的时间戳证明,而无需使用附加签名对文档本身进行签名。 PDF 标准是否以某种方式支持(以及 Acrobat Reader 然后能够以某种方式显示此时间戳)?
当然,我可以手动完成,获取文件二进制表示的 SHA-256 哈希值,将其发送到 TSA 服务并将接收到的令牌存储在外部文件中,但我更喜欢嵌入 no - 防篡改 PDF,以便 Acrobat Reader 可以显示。
这可能吗?如果是这样,如何?
解决方法
您可以在 PDF 中嵌入纯 RFC 3161 时间戳。这种结构称为文档时间戳。
这种结构最初在 2009 年的 ETSI TS 102 778-4(附件 A.2)中指定,作为一种纯粹为先前签名的 PDF 加上时间戳的方法,并在签名后的修订中添加一些验证相关信息。随着 PAdES 的发展,该规范终于进入了 ETSI EN 319 142-1(第 5.4.3 节)。
虽然 ETSI 只能将结构指定为 ISO 32000-1 (PDF 1.7) 的扩展,但负责的 ISO 委员会于 2017 年将其添加到核心 ISO 32000-2 (PDF 2)。
关于您在评论中提出的问题:
这与 PDF/A 兼容吗?
我认为它们与 PDF/A-1、PDF/A-2 和 PDF/A-3 不兼容。不过,由于 PDF/A-4 基于 ISO 32000-2,我认为它是兼容的。 (我还没有看过 ISO 19005-4...)
有没有办法用 Acrobat Reader 创建那些?
使用某些 Adobe Acrobat 版本应该可以。基本的 Adobe Acrobat Reader 版本(目前)无法实现。不过,也许 Adobe Acrobat Reader 及其一些收费的内置工具可以创建它们。
最好我想要一个 cli 工具或者能够通过一些库来做到这一点
任何未过时的通用 PDF 签名库都应支持创建文档时间戳。
但首先我想测试它们稍后在 Acrobat Reader 中的显示方式
像这样:
第一个条目是带有嵌入签名时间戳的签名,第二个条目是文档时间戳。