当前位置: 首页 > 知识库问答 >
问题:

PDF格式的“分离”数字签名

沈曜灿
2023-03-14

我想实现PDF的“并行”签名过程,这样用户就可以对文档进行数字签名,而不是“一个一个”,而是同时进行。为了实现这一点,我决定为所有用户创建初始文档的单独副本,并在其上获得签名。最终,所有签名都应该连接到单个PDF中。

让我们假设,除了签名字段创建(所有的acroForms、signatureContainers、可视签名等都是在之前创建的,并且都是类似的),在签名过程中PDF没有改变。

在进一步的研究过程中,我阅读了这篇文章,并了解到每个先前的数字签名(即使是分离的)都包含在下一个签名的签名内容中。所以没有办法把数字签名与内容完全分离。这导致一个问题,下一个签名,不能计算,在前一个完成之前。

附注。我正在使用Apache PDFBox来处理PDF。

共有1个答案

蒋鸿文
2023-03-14

请告诉我有没有办法绕过这件事?

如果您希望您的签名是可互操作的,那是没有办法的。

我阅读了这篇文章,并了解到每个先前的数字签名(即使是分离的)都包含在下一个签名的SignedContent中

这个答案仍然代表了目前的情况。如果有的话,它已经被更新的规范所证实,例如,在该答案中引用的PAdES规范仅仅是“技术规范”(ETSI TS 102 778)并且现在有实际的规范(ETSI EN 319 142)也要求pdf签名在其修订版中签署除其自己的签名容器之外的所有内容。另外,ISO 32000-2已经发布,仍然对其互操作签名有此要求,并且还包括PAdES规范的一个简短副本。

你在这里强调“甚至超然”。手边上下文中的“分离”仅指嵌入PDF中的CMS容器的结构;它特别没有提到签名与PDF或类似的东西更多地分离。

但是,如果您不需要互操作,也有一些选择,这里的两个选择仍然非常接近于互操作签名:

>

  • 您可以忽略以下要求:pdf签名必须对其修订中的所有内容进行签名,但它自己的签名容器除外。

    例如,您可以在文档的一个新修订版中准备多个签名字段和字典,并设置每个签名的签名字节范围,以排除所有这些签名的占位符。

    您可以忽略CMS签名容器中只有单个SignerInfo的要求,将来自不同签名方的SignerInfo放到单个签名字段中的单个签名容器中。

    常见的PDF签名验证器,

    >

  • 如果是按照前一个选项中所述创建的签名,则不积极验证(至少是大多数签名),

    >

  • 可能是因为它们的代码只针对两个带符号字节范围(即单个间隙)编程,因此只使用前两个范围,导致错误的文档哈希;

    或者因为它们明确要求签名覆盖其整个修订版,减去正在验证的签名字段的签名容器的单个占位符;自波鸿鲁尔大学的Karsten Meyer zu Selhausen的硕士论文“PDF签名的安全性”发表以来,这类验证器的数量无疑有所增加。

    如果是按照后一个选项中的描述创建的签名,则至少要肯定地验证其中的许多签名,直到您详细查看验证结果并意识到它们只验证了其中一个SignerInfo而忽略了其他签名。

    例如,在有两个SignerInfo的情况下,Adobe Reader验证第二个SignerInfo(我假设它总是验证最后一个),eSig DSS验证第一个SignerInfo,而这两个SignerInfo当前都没有在验证结果中表示可能存在另一个SignerInfo。

    例如,瑞典一家大型安全公司在其软件中实现了第二种选择;在其家庭brew格式PDF/CAdES-A中,它插入CAdES-A容器作为PDF中的CMS容器,并允许在其中使用多个SignerInfo。因此,很明显,它自己的软件将识别和验证所有SignerInfo。然而,这是一个家庭酝酿的解决方案,不具有互操作性。

  •  类似资料:
    • 我想实现PDF的“并行”签名过程,这样用户就可以不是“一个接一个”地进行数字签名,而是同时进行数字签名。为了实现这一点,我决定为所有用户创建初始文档的单独副本,并在它们上获得签名。最终,所有签名都应该连接到单个PDF中。 让我们假设,PDF在签名过程中没有变化,除了签名字段创建(所有acroForms、signaturecontainer、可视签名等都是在之前创建的,并且对所有这些都是相似的)。

    • 我在看官方的PDF规范。我在这里遇到了一个数字签名的PDF。当我分析它的目录字典时,我看到了这样的: 我对此有一些疑问: > 根据规范的第736页,没有属于的参数(第733页)。当然,PDF可能已经被某个第三方修改了,他们在字典中添加了一个无关的键。但我只想确认,如果在中发现键,是要忽略它,还是它有某种意义? 我明白PDF中的数字签名是通过签名字段进行的。数字签名是否可能不是签名字段,即数组项中没

    • 据我所知有两种方法 添加DSS字典 在签名时在签名中嵌入CRL或OCSP响应 DSS方法似乎是可行的,Adobe将签名识别为启用了LTV。第二种方法更适合我们的应用程序,所以我仍在努力让它工作。我在向签名添加OCSP响应时遇到了问题,所以我只尝试添加证书和CRL。如果我错了,请纠正我,但据我所知,CRL或OCSP响应都应该添加到签名中。不需要两者兼而有之吗?我收集签名证书及其根证书,还有TSA证书

    • 我使用PdfWriter setEncryption对PDF文档进行了加密/解密。一切正常,解密也正常。 当我为数字签名的PDF文档做同样的事情时,我的数字信息与消息一起损坏(SigDict/Contents非法数据) 是否可以在不影响数字签名信息的情况下加密PDF?

    • 问题内容: 我想在我们的jsp页面中格式化一些数字。 首先,我定义了一些资源 ...... 问题1: 我想知道“#”和“ 0”的含义是什么? 0.00,#0.00,##。00,### 0.00 谁能告诉我它们之间的区别?谢谢! 问题2: 如果我在动作BigDecimal number1中定义了BigDecimal类型; 然后我的页面应该使用一种格式来显示此值, 请忽略number <0 问题3:

    • 使用itext v5对文档进行数字签名时。5.11 PDF/A-2b文档被破坏——这意味着它们不再作为PDF/A文档有效。违反以下规则:https://github.com/veraPDF/veraPDF-validation-profiles/wiki/PDFA-Parts-2-and-3-rules#rule-643-1 在上面的链接中,它指定摘要无效,因此我也给你一个代码段,在使用iText