我们收到经过进一步修改的已签名PDF文件

我们收到经过进一步修改的已签名PDF文件,pdf,digital-signature,Pdf,Digital Signature,也许这件更适合你的安全感?我不确定 事实如下: 我们有一个web应用程序,用户下载带有表单的PDF文档,他们填写此表单,用电子证书签名,然后将其上传回我们的环境 我们已经展示了上传的文档被签名的情况,但它显示了签名后被修改的一些字段。如果我们检查PDF签名的完整性,则表明签名后已经进行了数据更改,但签名是正确和有效的 如果我们右键单击签名并选择“查看签名版本”,我们将看到签名时加载的真实数据 现在,这违背了我对电子签名功能的一般看法。如果在我签名后对文档(或加载到文档中的数据)进行了任何更改

也许这件更适合你的安全感?我不确定

事实如下:

  • 我们有一个web应用程序,用户下载带有表单的PDF文档,他们填写此表单,用电子证书签名,然后将其上传回我们的环境

  • 我们已经展示了上传的文档被签名的情况,但它显示了签名后被修改的一些字段。如果我们检查PDF签名的完整性,则表明签名后已经进行了数据更改,但签名是正确和有效的

  • 如果我们右键单击签名并选择“查看签名版本”,我们将看到签名时加载的真实数据

现在,这违背了我对电子签名功能的一般看法。如果在我签名后对文档(或加载到文档中的数据)进行了任何更改,则此签名应无效,因为文档已被更改

PDF的行为似乎有所不同,因为不仅签名仍然有效,而且打开文档时看到的“默认版本”是最后一个,而不是签名版本

现在我想知道

  • 这是某种bug还是一种预期行为
  • 有什么地方可以找到关于这件事的信息?(谷歌一次又一次地将我重定向到“如何签署PDF”文章)
如果这是一种明确的行为,你如何处理

现在,这违背了我对电子签名功能的一般看法。如果在我签名后对文档(或加载到文档中的数据)进行了任何更改,则此签名应无效,因为文档已被更改

PDF的行为似乎有所不同,因为不仅签名仍然有效,而且打开文档时看到的“默认版本”是最后一个,而不是签名版本

这是某种bug还是一种预期行为

这是预期的行为。 您必须注意以下两个特殊因素:

  • PDF签名字段包含已签名字节范围的信息。显然,不能对整个文件进行签名,因为签名本身是嵌入的,不能是签名字节的一部分。因此,需要在某处记录签名字节范围。参见信息安全堆栈交换:

  • 可以通过附加到现有文档来添加PDF,这一过程称为增量更新。这些更新可以再次签名等,也请参见:

因此,通过增量更新对PDF进行更改时,文档中现有的集成签名仍然正确地对其各自的签名范围进行签名尽管增加了更改,它们在数学上仍然有效。

此外,PDF的当前内容特别是由最新的增量更新定义的,因此当您打开文档时,它会显示包含最近更改的内容,而不是已签名的内容。


现在,虽然这听起来像PDF签名没有任何意义,但事实并非如此。ISO 32000-1规范明确规定了文档的认证(=使用某些特殊标志签名)基础版本的增量更新中允许进行哪些更改,Adobe在其Acrobat和Reader软件中对已签名但未经认证的文档进行了限制,参见堆栈溢出

特别是,最多允许以下更改:

  • 添加签名字段
  • 添加或编辑批注
  • 提供表单字段值
  • 数字签名

如果这是一种明确的行为,你如何处理

由于文档源于您,您可以首先对文档应用证书签名,该签名只允许在您的用例中进行尽可能小的更改

然后,您可以为用户要签名的签名字段定义签名锁信息。在这些锁定信息中,您可以规定,在签署给定签名字段后,许多表单字段应为只读

最后,您只接受仍然包含您的认证签名且未添加不允许更改的返回PDF

实际上,有许多PDF经过认证,其中包含许多用于附加批准签名的字段,每个批准签名字段都与一些表单字段相耦合,这些表单字段在签名后将不再可编辑。所有签名字段签名后,所有字段都是只读的

有什么地方可以找到关于这件事的信息?(谷歌一次又一次地将我重定向到“如何签署PDF”文章)

您应该特别关注PDF规范ISO 32000-1和一些有关其软件行为的Adobe文档。您将在堆栈溢出文档页面的底部找到上述链接指向的链接

现在,这违背了我对电子签名功能的一般看法。如果在我签名后对文档(或加载到文档中的数据)进行了任何更改,则此签名应无效,因为文档已被更改

PDF的行为似乎有所不同,因为不仅签名仍然有效,而且打开文档时看到的“默认版本”是最后一个,而不是签名版本

这是某种bug还是一种预期行为

这是预期的行为。 您必须注意以下两个特殊因素:

  • PDF签名字段包含已签名字节范围的信息。显然,不能对整个文件进行签名,因为签名本身是嵌入的,不能是签名字节的一部分。因此,需要记录签名字节范围