2

我正在研究 PDF 签名者/验证器,但不知道应该如何处理具有多个签名和 dss 字典的 pdf 文件。

这是场景:一个pdf文件被签名两次,在第二次签名之后,添加了一个DSS字典,其中包含两个签名的CRL、CERT和OCSP:

[ Signature 1 ]
[ Signature 2 ]
DSS << 
    VRI << 
        /HashSignature1 10 0 R
        /HashSignature2 11 0 R
    >>
    ...
>>

到现在为止还挺好。这两个签名都包含在文档上唯一的 DSS 字典中。但是其他人决定签署同一份文件,并添加他的 CRL 和其他所有内容。然后,我必须创建一个新的 DSS 字典,我的问题是:已经包含在另一个 DSS 字典中的旧签名必须在这个字典中吗?我认为是这样,因为 DSS 位于更新的文档目录中(并且您删除了对上一本字典的引用),但公司内部几乎没有达成一致意见。

[ Signature 1 ]
[ Signature 2 ]
DSS << 
    VRI <<
        /HashSignature1 10 0 R
        /HashSignature2 11 0 R
    >>
    ...
>>
[ Signature 3 ]
DSS << 
    VRI <<
        /HashSignature1 10 0 R
        /HashSignature2 11 0 R
        /HashSignature3 16 0 R
    >>
    ...
>>

或者

[ Signature 1 ]
[ Signature 2 ]
DSS << 
    VRI <<
        /HashSignature1 10 0 R
        /HashSignature2 11 0 R
    >>
    ...
>>
[ Signature 3 ]
DSS << 
    VRI <<
        /HashSignature3 16 0 R
    >>
    ...
>>

两者都正确吗?只有其中之一?带一个?

4

2 回答 2

4

Adobe 的 Andrea Valle 通过电子邮件为我澄清了这一点:

这已经在 ESI 内部讨论了一段时间,最终团队决定在 EN 319 142-1 中对此进行澄清。

请参阅 1.1.0 版第 11 页的第 5.4.1 节:

通过添加进一步的 DSS 信息来验证先前的最后一个文档时间戳以及新的文档时间戳,可以进一步延长保护的生命周期超过应用的最后一个文档时间戳的生命周期。每次在增量更新期间更新 DSS 字典时,它都应包含上一个 DSS 字典中的值。

注意:一般来说,DSS 字典将包含来自先前版本的验证数据以及为当前版本添加的验证数据。如果在增量更新期间从 DSS 字典中删除条目,则验证数据集可能不完整以验证签名,但可能会执行验证数据的替换(例如更新证书状态信息)以进行优化原因。

所以实际上建议添加旧 DSS 字典中的所有条目,但不是强制性的。如果它们不破坏签名,您可以更新这些条目,但这是可选的。

在同一个文档上进一步阅读:

文档安全存储 (DSS) 应是一个字典,其值 DSS 作为文档目录字典中的键。该字典用于提供一个位置,其中应放置文档中某些或所有签名的所有验证相关信息。

DSS 旨在提供一个放置所有信息地方

因此,如果您没有将所有信息都放在那里,那么您并没有破坏任何东西,但是您没有按预期使用 DSS。

那么,答案是:pdf 签名者应该使用第一种方法,但应该为第二种方法准备 pdf 验证器。


编辑:

实际上,任何 PAdES 验证器都应该检查 DSS 条目是否更早存在。如果您只检查最新的一个,则可以重新验证无效的签名,如果用于签署 CRL 或 OCSP 的 CA 证书后来被泄露,并且此虚假信息已添加到最新的 DSS 中。

例子:

  1. Sig 1 是用撤销的证书制作的
  2. 所有DSS条目都添加了,签名肯定是无效的
  3. 添加了 DocumentTimeStamp 以保护此 DSS。

  4. Sig 1 CA 证书被盗用

  5. 使用有效证书制作 Sig 2

  6. 添加 Sig 2 DSS 条目,启用 LTV 签名
  7. Sig 1 CRL/OCSP 被一个假冒的 CA 证书所取代

在这种情况下,依赖于最新 DSS 的验证器将验证 Sig 1,而实际上它不应该。这就是您添加 DocumentTimeStamp 以保护有关该签名的信息的原因。


TL;博士:

两种选择都是正确的。DSS 应该有关于所有签名的信息,但这不是强制性的。验证者应该检查签名后立即生成的 DSS,而不仅仅是最新的 DSS。

于 2016-04-07T21:37:35.947 回答
0

由于目录字典中只有一个 DSS 条目,您需要更新现有的 DSS 字典(分别是 VRI 字典和其他值)。

于 2016-04-07T15:05:01.240 回答