【发布时间】:2015-04-09 02:10:48
【问题描述】:
我想手动验证签名 pdf 的完整性。我已经能够到达:-
- 从 pdf 中获取“/Content”节点的值(使用
PyPDF2)。这是der编码的 PKCS#7 证书。
现在根据pdf specifications,pdf 数据的消息摘要与证书一起存储在/Content 节点中。尝试了很多,但我无法获得最终将与散列 pdf 内容(由 /ByteRange 指定)进行比较的摘要值。
- PDF 规格快照:-
不明白write signature object data into the dictionary 的最后一部分。这个写入实际发生在哪里,我如何提取消息摘要?
【问题讨论】:
-
@BrunoLowagie...对不起。将编辑问题。这是 der 编码的 PKCS#7。
-
从 pdf 中获取 '/Content' 节点的值(使用 PyPDF2)。这是一个 der 编码的 PKCS#7 证书 - A 它应该是一个 PKCS#7 / CMS 签名容器(只要 SubFilter 是 ETSI.CAdES.detached、adbe.pkcs7.detached 或 adbe.pkcs7.sha1),可能包含 证书作为额外的有效负载;更重要的部分是 SignerInfo,不过... B 虽然根据规范,此签名对象应进行 DER 编码,但在野外有许多带有签名对象的 PDF,其外层仅经过 BER 编码.
-
@mkl 感谢您的意见。是的,这里的 /Subfilter 是
adbe.pkcs7.detached。现在我声明的原因是:- **A)**我得到了 '/Content' 节点的内容并将其写入文件--> 使用openssl pkcs7命令行实用程序将其转换为可读的 pem。我对使用加密和数字证书很陌生。您能帮我弄清楚如何从证书中提取此消息摘要并将其用于手动检查吗? **B)**外层->你的意思是容器吗? -
你能帮我弄清楚 - 不幸的是,我几乎没有使用过 openssl,而且我根本没有任何 python 经验。我所能做的就是解释低级对象。 如何从证书中提取此消息摘要并将其用于手动检查 - 但您不想从证书中提取消息摘要。您想从 签名容器 中提取它。 外层->你的意思是容器 - 是的。但很可能无论如何您都不会感知到不同的编码,大多数工具都可以处理。
-
@mkl 好的,谢谢。这就说得通了。事实上,我也在雕刻一些低级细节。你是对的,我需要从签名容器中提取摘要(实际上我在阅读 pdf 规范时感到困惑)。无论如何,你能帮我弄清楚这个签名容器在哪里以及如何解析它来获取消息摘要。到目前为止,我认为消息摘要嵌入在数字签名中的某处(正如我从 pdf 规范中理解的那样)。
标签: python pdf digital-signature digital-certificate pem