我正在尝试验证 PDF 数字签名。
我知道,当 PDF 被签名时,会定义一个字节范围,嵌入证书,并且根据我的阅读,签名的消息摘要和时间戳也存储在 PDF 中。
我已经可以提取证书并验证它们。
现在我正在尝试验证 pdf 的完整性,但我的问题是我不知道签名的消息摘要位于何处。
在此示例中,来自 Adobe 的签名 pdf (http://blogs.adobe.com/security/SampleSignedPDFDocument.pdf http://blogs.adobe.com/security/SampleSignedPDFDocument.pdf),我可以清楚地识别摘要,因为它位于嵌入证书的下方:/DigestMethod/MD5/DigestValue/(第 1520 行)。
但那个 PDF 样本似乎是 2009 年的,我怀疑消息摘要现在以不同的方式存储,因为我用 Adobe Reader 和 iText 签署了 PDF,但我找不到像以前那样的任何消息摘要字段一。
有人可以告诉我们摘要现在是否以不同的方式存储吗?他们位于哪里?
不管怎样,现在我正在使用 Adobe 的示例文档,并尝试验证其完整性。
我正在根据指定的字节范围对文档的字节进行签名,并使用 MD5 算法对它们进行摘要,但是我得到的摘要值与消息摘要字段中的摘要值不匹配...
难道我做错了什么?摘要是否也使用签名者的私钥进行签名?
我很感激任何帮助。
计算集成 PDF 签名的哈希值时需要注意许多细节,其中包括:
-
从 PDF 中提取正确的字节以进行哈希处理。这字节范围准确告诉您哪些字节范围是有符号的。为了在现代签名环境中被接受,范围必须覆盖整个 PDF 文件修订版,但值除外Contents.
当心,价值Contents includes前导“”括号。
-
不要使用常规文本编辑器或文本处理指令(例如readln
or writeln
) 来处理 PDF。 PDF 本质上是二进制的,即使它们肉眼看起来是文本的。使用此类文本相关操作复制 PDF 部分很可能会更改它们的细节,最终破坏签名哈希值。
如有疑问,请不要猜测,而应阅读规范。 Adobe 已提供 ISO 32000-1 的副本here http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/PDF32000_2008.pdf,以及您需要了解的有关 PDF 格式以开始处理它们的更多信息,可以在此处以及其中引用的其他公共标准中找到。关于集成 PDF 签名的非常简短的介绍可以在这个答案 https://security.stackexchange.com/questions/35121/a-standard-way-to-manually-add-a-digital-signature-to-a-pdf-file/35131#35131以及从那里引用的文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)