Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PDF签名摘要_Pdf_Digital Signature_Digest_Pkcs#7 - Fatal编程技术网

PDF签名摘要

PDF签名摘要,pdf,digital-signature,digest,pkcs#7,Pdf,Digital Signature,Digest,Pkcs#7,我有一个关于计算用于数字签名的PDF文档摘要的快速问题(与我前面的一个问题有点相关,我试图找出为什么需要知道客户的证书才能创建正确的摘要)。 在Adobe关于PDF格式的文档中,指定了以下内容: 应在文件中的字节范围内计算字节范围摘要,该范围由 签名字典中的ByteRange条目。此范围应为整个文件,包括签名 字典,但不包括签名值本身(内容条目) 因此,在这一点上,事情似乎相当简单,只需消化除/Sig字典中的/Contents条目之外的所有内容。/Contents条目中的实际数据指定如下: 对于

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

应在文件中的字节范围内计算字节范围摘要,该范围由 签名字典中的ByteRange条目。此范围应为整个文件,包括签名 字典,但不包括签名值本身(内容条目)

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

对于公钥签名,内容应为DER编码 PKCS#1二进制数据对象或DER编码的PKCS#7二进制数据 反对

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

吊销信息是一个签名属性,这意味着 签名软件必须在签名之前捕获吊销信息。类似的要求也适用于 证书链。签名软件必须在签名之前捕获并验证证书链

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

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

简而言之: 我是否可以在事先不知道某人的证书的情况下创建可签名摘要

如果使用SubFilterETSI.CAdES.detachedadbe.pkcs7.detached您可以创建文档摘要,而无需事先知道某人的证书

但是,在开始生成CMS签名容器以嵌入到PDF中之前,通常必须知道签名者证书

详细内容: (注意,以下内容有些简化。)

我可以(可能)生成摘要,为/Contents条目保留空间,然后附加这个PKCS#7对象

如果您首先保留空间,然后生成摘要,那么事情就是这样做的

当我读到以下内容时,我开始感到困惑:

吊销信息是已签名的属性,这意味着签名软件必须在签名之前捕获吊销信息。类似的要求也适用于证书链。签名软件必须在签名之前捕获并验证证书链

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

如果有人能进一步详细说明消化的内容,也许能更好地向我解释签名属性,我将不胜感激

必须注意的主要事实是,对于PKCS#7/CMS签名容器,签名通常不仅包括一个哈希计算,而且至少包括两个

第一个散列,文档散列,实际上是为整个文件计算的,包括签名字典,但不包括签名值本身(内容项)(您可能需要阅读更多详细信息)

但这不是应用签名算法时立即使用的哈希值

在生成PKCS#7/CMS签名容器的过程中(除非以最原始的形式),您将创建一个名为“签名属性”的结构

您可以使用多个属性(名称-值对)填充此结构,其中包括已计算的文档哈希,还有其他属性,例如您阅读的Adobe样式撤销信息

创建完该结构后,对该结构进行散列并为其生成签名

然后,您可以使用这些已签名的属性、签名以及其他一些未由该签名签名签名的信息(例如证书、签名时间戳等),将PKCS#7/CMS签名容器组合在一起

有关签名容器的更多详细信息,请阅读

最后,将此签名容器嵌入PDF中的保留空间

我想回答的主要问题是:我是否可以在事先不知道某人的证书的情况下创建一个可签名摘要?(我正在使用pkcs7分离签名)

如果使用SubFilterETSI.CAdES.detachedadbe.pkcs7.detached您可以创建文档摘要,而无需事先知道某人的证书

但是,根据CMS签名配置文件的不同,您通常必须在开始生成签名容器之前了解签名者证书,因为许多配置文件要求存在引用签名者证书的已签名属性

澄清: OP在评论中提出了一些后续问题:

1.:其中一个签名属性是文档散列(没有/contents),因此如果我理解正确,这就是未签名散列

由于“签名属性”最终被散列和签名,因此其中的文档散列不是立即、直接地、而是间接地作为属性结构的一部分进行签名