gpt4 book ai didi

pdf - PDF签名摘要

转载 作者:行者123 更新时间:2023-12-02 01:42:44 25 4
gpt4 key购买 nike

我有一个关于计算要用于数字签名的PDF文档摘要的快速问题(与我之前的问题之一有关,我试图弄清楚为什么您需要知道客户的证书才能创建正确的摘要) )。
在Adobe有关PDF格式的文档中,指定了以下内容:

A byte range digest shall be computed over a range of bytes in the file, that shall be indicated by the ByteRange entry in the signature dictionary. This range should be the entire file, including the signature dictionary but excluding the signature value itself (the Contents entry).



因此,在这一点上,事情似乎相当简单,只需消化/Sig词典中/Contents条目以外的所有内容。/Contents条目中的实际数据指定如下:

For public-key signatures, Contents should be either a DER-encoded PKCS#1 binary data object or a DER-encoded PKCS#7 binary data object.



因此,仍然没有问题,我可以(可能)生成摘要,为/Contents条目保留空间,并在以后附加此PKCS#7对象。当我阅读以下内容时,困惑就开始了:

Revocation information is a signed attribute, which means that the signing software must capture the revocation information before signing. A similar requirement applies to the chain of certificates. The signing software must capture and validate the certificate's chain before signing.



所以我不太了解:显然/Contents条目(包含证书和已签名的摘要)没有被摘要,但是证书链是一个已签名的属性(因此需要被摘要吗?)。

如果有人可以进一步明确说明要消化的内容,并且也许可以更好地向我解释签名的属性,我将不胜感激。我要回答的主要问题是:是否可以在不事先知道某人的证书的情况下创建一个可签名的摘要? (我正在使用pkcs7分离签名)

最佳答案

简而言之:

Can I actually create a signable digest without knowing someone's certificate beforehand?


如果使用SubFilter ETSI.CAdES.detached adbe.pkcs7.detached ,则可以在不事先知道某人证书的情况下创建 文档摘要
但是,通常,在开始生成要嵌入到PDF中的CMS签名容器之前,您通常必须知道签署者证书。
详细:
(请注意,以下内容有所简化。)

I can (probably) generate the digest, reserve space for the /Contents entry and attach this PKCS#7 object later on.


如果您先保留空间然后生成摘要,则确实是这样。

The confusion starts when I read the following:

Revocation information is a signed attribute, which means that the signing software must capture the revocation information before signing. A similar requirement applies to the chain of certificates. The signing software must capture and validate the certificate's chain before signing.


所以我不太了解:显然/Contents条目(包含证书和已签名的摘要)没有被摘要,但是证书链是一个已签名的属性(因此需要被摘要吗?)。
如果有人可以进一步明确说明要消化的内容,并且也许可以更好地向我解释签名的属性,我将不胜感激。

必须意识到的主要事实是,对于PKCS#7/CMS签名容器, 签名通常不仅包括一个哈希计算,而且至少包括两个哈希计算!
第一个哈希值,即文档哈希值,实际上是针对整个文件计算的,包括签名字典,但不包括签名值本身( 目录条目)(您可能需要阅读 this answer以获得更多详细信息)。

但这是 而不是,即应用签名算法时立即使用的哈希。
在生成PKCS#7/CMS签名容器的过程中(除非以其最原始的形式),您将创建一个称为“签名属性”的结构。
您在此结构中填充了多个属性(名称-值对),其中包括已经计算出的文档哈希值,还有其他属性,例如您了解的Adobe样式的吊销信息。
完成创建该结构后,您可以对该结构进行哈希处理并为其生成签名。
然后,您可以使用这些签名属性,签名以及此签名未签名的更多信息,将PKCS#7/CMS签名容器放在一起。证书,签名时间戳,...
有关签名容器的更多详细信息,请阅读 this answer
最后,您将此签名容器嵌入到PDF的保留空间中。

The main question that I want to answer is: Can I actually create a signable digest without knowing someone's certificate beforehand? (I'm working with a pkcs7 detached signature)


如果使用SubFilter ETSI.CAdES.detached adbe.pkcs7.detached ,则可以在不事先知道某人证书的情况下创建 文档摘要
但是,根据CMS签名配置文件的不同,通常必须在开始生成签名容器之前先了解签名者证书,因为许多配置文件都需要存在引用签名者证书的签名属性。
说明:
OP在评论中提出了一些后续问题:

1.: One of the signed attributes is the document hash(without the /contents), so if I understand correctly this is the unsigned hash?


由于最终会对“已签名的属性”进行哈希处理和签名,因此其中的文档哈希不是立即 ,直接是签名的 ,而,是间接签名的,作为此属性结构的一部分。所以我不会称它为未签名...
  1. In the end when the user really generates a signature, he signs the hash of the PKCS#7 object?

不,“签名属性”结构的哈希值仅是PKCS#7对象的一部分,而不是全部。 PKCS#7/CMS对象有多个未签名的部分。
  1. Does the /Contents entry still have a PKCS#7 object that's actually readable for us? (To extract certificates etc for verification)

内容条目确实包含完整的PKCS#7/CMS签名容器对象,为二进制字符串。因此,是的,您可以读取它(通过读取该二进制字符串的值),并且(如果您有知道如何解析这种签名容器的代码)可以从中提取信息。
不过请注意,签名容器可能不会包含验证所需的所有数据:例如,如果您使用链(不是 shell )验证模型进行验证,则可能必须从相应的PDF签名字典条目中提取签名时间。
  1. When verifying a signature, do we simply extract the embedded PKCS#7 object, recalculate the digest, recalculate the digest of the PKCS#7 object and verify this against the signature using the certificate we get from the PKCS#7 object?

显然,您还必须计算已签名的PDF字节范围的摘要,并将该值与包含原始文档摘要的已签名的属性进行比较(您可能意味着要重新计算摘要)。
如对3的回答中所述,您可能必须从PDF检索其他信息以用于PKCS#7验证。
此外,您还说我们从PKCS#7对象获得的证书-请注意,PKCS#7/CMS签名容器可能包含多个证书。您必须找到正确的一个。为此,应使用CMS SignerInfo SignerIdentifier和ESS签名属性。
此外,您还必须验证签署者证书的有效性和信任性。
  1. Is there any good documentation on what authenticated attributes there are?

您可以开始阅读

RFC 3852RFC 5652
  • 第11节“有用的属性”:基本CMS
  • ISO 32000-1
  • 第12.8节:基本PDF
  • RFC 5126的全部:CAdES
  • ETSI TS 102778,尤其是part 2part 3part 4:PAdES
  • 关于pdf - PDF签名摘要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29251895/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com