我在看官方的PDF规范。我在这里遇到了一个数字签名的PDF。当我分析它的目录字典时,我看到了这样的:
我对此有一些疑问:
>
根据规范的第736页,fieldMDP
没有属于docMDP
的p
参数(第733页)。当然,PDF可能已经被某个第三方修改了,他们在字典中添加了一个无关的键。但我只想确认,如果在feldMDP
中发现p
键,是要忽略它,还是它有某种意义?
我明白PDF中的数字签名是通过签名字段进行的。数字签名是否可能不是签名字段,即字段
数组项中没有关联的rect
项?
筛选器
键的具体作用是什么?我可以看到subfilter
键决定在解密内容时使用哪种方案,filter
键表示什么?规范说它是一个签名处理程序。那到底是什么?另外,子过滤器
值没有说明什么?
##你的问题
###1。FieldMDP变换字典中的P值
根据规范的第736页,FieldMDP没有属于DocMDP的P参数(第733页)。当然,PDF可能已经被某个第三方修改了,他们在字典中添加了一个无关的键。但我只想确认一下,如果在FeldMDP中发现了一个P键,是要忽略它,还是它有某种意义?
现在,ISO32000的Adobe补充,扩展级别3,在表8.82中的锁字典条目中添加了一个新条目,P条目!在填写有问题的签名字段时,该条目可用于降低以前的DocMDP签名的原始P级别。
通过上面提到的将锁字典的副本用作FieldMDP转换参数字典的机制,P值现在发现自己在FieldMDP转换参数中。
不幸的是,在补编中忘记了更新转换参数规范...
...
FieldMDP字典中DigestLocation和DigestValue键值对的用途是什么?在V字典的Contents键中已经提供了摘要值,对吗?另外,它存在于数组(引用)中,这里只有一个条目,如果有多个条目怎么办?
首先看一下PDF参考资料第六版1.7版的勘误表:
###3。签名内容和子过滤器
如果我理解正确的话,Contents密钥的值是内容的html" target="_blank">加密摘要,不包括内容价值流(本身)。所以我首先要解密它。然后,我必须计算不包括内容流的实际内容的摘要,并比较这两个摘要,看看它们是否匹配。对吗?如果是,我该怎么做?我怀疑筛选器和子筛选器键表示方法,但我无法确切地理解如何表示方法。
为此,您应该阅读PDF参考中的第8.7.2节“签名互操作性”。但是请注意,子过滤器值adbe.x509.rsa_sha1和adbe.pkcs7.sha1(以及相关机制)在PDF 2.0中已经被废弃,而ETSI.cades.detached和ETSI.rfc3161已经被添加,其规范也可以在ETSI EN 319 142-1 v1.1.1中找到。
显然,密码哈希函数永远不能保证不发生冲突。然而,要被认为是好的,他们必须能够声称这样的碰撞是非常不可能的,并且构造碰撞是困难的。
对于16或20字节的MD5和SHA-1算法来说,随机冲突是非常不可能的。这不是问题所在。
问题是,它们同时被认为是不安全的,因为难以构造碰撞。
特别是,根据后一个句子,甚至尝试实现对象摘要计算都是没有意义的。
###6。隐形签名
我明白PDF中的数字签名是通过签名字段进行的。数字签名是否可能不是签名字段,即字段数组项中没有关联的Rect项?
###7。过滤器键
过滤器键的作用到底是什么?我可以看到子过滤器密钥决定在解密内容时使用哪种方案,过滤器密钥表示什么?规范说它是一个签名处理程序。那到底是什么?它还说了什么子过滤器值没有?
实际上,如今过滤器条目在可互操作的PDF签名处理中已经变得毫无意义。
在你问的评论中
如何处理上述PDF中的MDP信息?我有ByteRange对象,从中我可以计算PDF的总字节内容,不包括Contents键。我通过MD5计算它的哈希值,然后用子过滤器信息解密内容值。然后我比较。我到底在哪里需要MDP信息?其次,引用字典是可选的,如果它是可选的,我怎么知道我需要应用MD5来计算PDF内容的哈希?
你要做的...
您必须在这里使用哪些标准,可能取决于生成签名的技术和法律上下文。例如。在现代环境中,ESS属性必须存在匹配。
如果它们不是,则PKCS#7容器在签名后已被操纵。
对于PKI政策和法律框架,这一点更为具体。例如。合适的验证时间是当前时间还是确定为签名时间的最佳时间?签名的签名时间属性/PDF签名字典M值是否可信,或者必须有存在的证明?证书链应使用哪种验证模型?你接受的信任锚是什么?撤销信息呢...
你是如何得出这里的散列算法是SHA1的结论的?参考字典没有提到MD5吗?子过滤器是adbe.pkcs7。分离的,你怎么知道哈希algo不是,例如SHA256?如果是adbe.pkcs7.sha1,我会理解的。
是的,参考字典提到MD5,但这与字节范围签名无关。它指的是不推荐使用的对象摘要(见上文2.和4.的答案),对其计算的唯一描述无论如何都包含重大错误(见上文5.的答案)。
正如上面在验证步骤2中提到的,您必须解析这个PKCS#7容器并确定哈希算法。在参考资料第738页的底部,您将看到“PKCS#7对象必须符合Internet RFC2315中的PKCS#7规范。”您可以在这里找到这个RFC。较新的ISO规范参考了RFC3852或RFC5652中的加密消息语法(CMS),它们反映了PKCS#7容器的进一步发展阶段。
3867 6086: . . . . SEQUENCE {
3871 1: . . . . . INTEGER 1
3874 75: . . . . . SEQUENCE {
3876 69: . . . . . . SEQUENCE {
3878 11: . . . . . . . SET {
3880 9: . . . . . . . . SEQUENCE {
3882 3: . . . . . . . . . OBJECT IDENTIFIER countryName (2 5 4 6)
: . . . . . . . . . . (X.520 DN component)
3887 2: . . . . . . . . . PrintableString 'US'
: . . . . . . . . . }
: . . . . . . . . }
3891 22: . . . . . . . SET {
3893 20: . . . . . . . . SEQUENCE {
3895 3: . . . . . . . . . OBJECT IDENTIFIER organizationName (2 5 4 10)
: . . . . . . . . . . (X.520 DN component)
3900 13: . . . . . . . . . PrintableString 'GeoTrust Inc.'
: . . . . . . . . . }
: . . . . . . . . }
3915 30: . . . . . . . SET {
3917 28: . . . . . . . . SEQUENCE {
3919 3: . . . . . . . . . OBJECT IDENTIFIER commonName (2 5 4 3)
: . . . . . . . . . . (X.520 DN component)
3924 21: . . . . . . . . . PrintableString 'GeoTrust CA for Adobe'
: . . . . . . . . . }
: . . . . . . . . }
: . . . . . . . }
3947 2: . . . . . . INTEGER 514
: . . . . . . }
3951 9: . . . . . SEQUENCE {
3953 5: . . . . . . OBJECT IDENTIFIER sha1 (1 3 14 3 2 26)
: . . . . . . . (OIW)
3960 0: . . . . . . NULL
: . . . . . . }
3962 1733: . . . . . [0] {
3966 24: . . . . . . SEQUENCE {
3968 9: . . . . . . . OBJECT IDENTIFIER contentType (1 2 840 113549 1 9 3)
: . . . . . . . . (PKCS #9)
3979 11: . . . . . . . SET {
3981 9: . . . . . . . . OBJECT IDENTIFIER data (1 2 840 113549 1 7 1)
: . . . . . . . . . (PKCS #7)
: . . . . . . . . }
: . . . . . . . }
3992 35: . . . . . . SEQUENCE {
3994 9: . . . . . . . OBJECT IDENTIFIER messageDigest (1 2 840 113549 1 9 4)
: . . . . . . . . (PKCS #9)
4005 22: . . . . . . . SET {
4007 20: . . . . . . . . OCTET STRING
: . . . . . . . . . 3F 00 47 E6 CB 5B 9B B0 ?.G..[..
: . . . . . . . . . 89 25 4B 20 D1 74 44 5C .%K .tD\
: . . . . . . . . . 3B A4 F5 13 ;...
: . . . . . . . . }
: . . . . . . . }
此后,您将看到签名属性的开始,其中包括messageDigest3F 00 47 E6 CB 5B 9B B0 89 25 4B 20 D1 74 44 5C 3B A4 F5 13
。这是您在验证步骤4中比较的值。
因此,如果我们排除MDP检查,基本的签名验证将只检查与目录对应的字节范围条目,并将其与哈希值进行比较,对吗?
为了澄清:数学签名验证将包括计算字节范围的哈希值,并将其与存储在CMS容器中的哈希值进行比较(验证步骤2..4),以及验证CMS SignerInfo对象中的签名值是否正确地对其中的签名属性进行签名(这通常意味着计算签名属性的哈希值,确定签名者证书,并根据签名者证书中的哈希值和公钥检查签名值)(验证步骤5和6)。
如果我没有错的话,后续的更改将转到增量更新部分。如果强制执行严格的DocMDP,则任何增量更新都将使签名无效。准确吗?
DocMDP P值1
根本不允许增量更新。除非您的验证策略包括ETSI扩展或PDF 2.0:在这些情况下,允许只包括向文档添加文档安全存储区(DSS)和/或文档时间戳所需数据的增量更新。
##关于向后兼容性
我想实现PDF的“并行”签名过程,这样用户就可以对文档进行数字签名,而不是“一个一个”,而是同时进行。为了实现这一点,我决定为所有用户创建初始文档的单独副本,并在其上获得签名。最终,所有签名都应该连接到单个PDF中。 让我们假设,除了签名字段创建(所有的acroForms、signatureContainers、可视签名等都是在之前创建的,并且都是类似的),在签名过程中PDF没有改变。 在进一步的
据我所知有两种方法 添加DSS字典 在签名时在签名中嵌入CRL或OCSP响应 DSS方法似乎是可行的,Adobe将签名识别为启用了LTV。第二种方法更适合我们的应用程序,所以我仍在努力让它工作。我在向签名添加OCSP响应时遇到了问题,所以我只尝试添加证书和CRL。如果我错了,请纠正我,但据我所知,CRL或OCSP响应都应该添加到签名中。不需要两者兼而有之吗?我收集签名证书及其根证书,还有TSA证书
我想实现PDF的“并行”签名过程,这样用户就可以不是“一个接一个”地进行数字签名,而是同时进行数字签名。为了实现这一点,我决定为所有用户创建初始文档的单独副本,并在它们上获得签名。最终,所有签名都应该连接到单个PDF中。 让我们假设,PDF在签名过程中没有变化,除了签名字段创建(所有acroForms、signaturecontainer、可视签名等都是在之前创建的,并且对所有这些都是相似的)。
印度的《公司法》有一些变化。其中值得注意的是,有一项规定,如果公司进行了数字签名,则可以以电子形式维护其登记册。以下几点让我感到困惑: > 记录一旦以数字方式标注日期和签名,不得编辑或更改; 记录应能够根据法案的规定或根据法案制定的规则进行更新,更新日期应能够记录在每次更新中。 想象一下,我们正在对PDF中的表进行数字签名。如果表中最初有2行,并且用户对pdf进行数字签名。现在,我们在pdf中再添
我使用PdfWriter setEncryption对PDF文档进行了加密/解密。一切正常,解密也正常。 当我为数字签名的PDF文档做同样的事情时,我的数字信息与消息一起损坏(SigDict/Contents非法数据) 是否可以在不影响数字签名信息的情况下加密PDF?
我正在使用iText 5.5.9和数字签名白皮书示例中给出的示例为PDF生成数字签名。 我得到了普通的数字签名外观。我需要的是一个数字签名,它显示一个图标,指示它的验证状态,就像这个例子中的黄色问号: 这个黄色问号会根据签名是否被验证而变成红色十字或绿色刻度。 在过去的两天里,我一直在搜索这篇文章,我看到的唯一区别是,我使用的数字证书是自签名的,而参考PDF中使用的数字证书是由Adobe Appr