iText分离签名意味着

时间:2014-10-20 14:39:29

标签: itext digital-signature

你能不能详细解释一下我最终给我一些例子(一个用于附加,一个用于分离)iText分离签名的确切含义?

我找到了这篇精彩的文档:iText digital signature pdf关于iText数字签名,但我仍然不确定我是否理解iText分离签名概念。

阅读文档(参见链接)我发现了这个定义:

  

在PDF中,我们有时会提到一个分离的签名。根据维基百科,分离签名是一种数字签名,与“签名数据”保持“分开”,而不是“捆绑在一起成为单个文件”。 此定义在PDF上下文中并不完全正确:签名包含在PDF文件中,但签名的属性是“签名的一部分”,而不是“存储在签名词典中”< /强>

哪里不清楚我是什么&#34;签名的属性&#34;是指(它引用的签名属性是什么?)

请注意,文章的作者(iText文档)正在处理已签名PDF文件的片段:

%PDF-1.4
%âãÏÓ
3 0 obj
<</F 132/Type/Annot/Subtype/Widget/Rect[0 0 0 0]/FT/Sig
/DR<<>>/T(signature)/V 1 0 R/P 4 0 R/AP<</N 2 0 R>>>>
endobj
1 0 obj
<</Contents <0481801e6d931d561563fb254e27c846e08325570847ed63d6f9e35 ... b2c8788a5>
/Type/Sig/SubFilter/adbe.pkcs7.detached/Location(Ghent)/M(D:20120928104114+02'00')
/ByteRange [0 160 16546 1745 ]/Filter/Adobe.PPKLite/Reason(Test)/ContactInfo()>>
endobj
...
9 0 obj
<</Length 63>>stream
q
BT
36 806 Td
0 -18 Td
/F1 12 Tf
(Hello World!)Tj
0 0 Td
ET
Q
endstream
endobj
...
11 0 obj
<</Type/Catalog/AcroForm<</Fields[3 0 R]/DR<</Font<</Helv 5 0 R
/ZaDb 6 0 R>>>>/DA(/Helv 0 Tf 0 g )/SigFlags 3>>/Pages 10 0 R>>
endobj
xref
0 12
0000000000 65535 f
...
0000017736 00000 n
trailer
<</Root 11 0 R/ID [<08ed1afb8ac41e841738c8b24d592465><bd91a30f9c94b8facf5673e7d7c998dc>]/Info 7 0 R/Size 12>>
startxref
17879
%%EOF

1 个答案:

答案 0 :(得分:4)

虽然您引用的Digital Signatures for PDF documents Bruno Lowagie引用的白皮书确实是尝试使用iText创建集成PDF签名的人必读的(即使您是一个很好的信息来源)不使用iText),我同意其中使用“#34; detached&#34;”这个词的解释。 in&#34;分离的PDF签名&#34;并没有真正回家:

  

注意:在PDF格式中,我们有时会引用分离的签名。根据维基百科,   分离签名是一种数字签名,与其签名数据“分开”,如   反对'捆绑在一起成为一个文件'。这个定义并不完全正确   PDF的上下文:签名包含在PDF文件中,但签名的属性   是“签名的一部分”,而不是“存储在签名词典中”。

首先,调用这些签名&#34;分离&#34;不是任何当前规范强制执行的术语。无论如何我们这样做的原因是这些签名的签名词典中使用的标识符 adbe.pkcs7.detached ETSI.CAdES.detached < / strong>)包含该单词。

因此,问题实际上应该是:为什么这些标识符包含单词&#34; detached&#34;?

要理解这一点需要知道最初有两种集成的PDF签名,它们将一个PKCS#7签名容器嵌入到PDF中,分别由 adbe.pkcs7.detached adbe.pkcs7.sha1

这两种签名之间的区别在于

  • for adbe.pkcs7.sha1 签名计算PDF的签名字节范围的SHA1摘要,嵌入签名容器的ContentInfo结构并且这个嵌入式数据包以PKCS#7方式签名;
  • 对于 adbe.pkcs7.detached 签名,另一方面,签名容器的ContentInfo结构为空,签名数据范围为外部文件以PKCS#7方式签署。

因此,在 adbe.pkcs7.sha1 签名的情况下,实际签名的数据会嵌入到容器中,而在 adbe.pkcs7.detached 签名的情况下实际签名数据不是。

  

因此,在PKCS#7签名容器的级别上,签名数据和签名在后一种情况下彼此分离

签署PKCS#7方式的事实可以 - 并且通常会 - 包括计算要签名的数据的哈希值,将此哈希值添加到以下数字中称为经过身份验证的属性,并最终签署这些特殊属性,不应分散我们的注意力。)

其他类型的分离的签名( ETSI.CAdES.detached )的构建方式与 adbe.pkcs7.detached 容器类似。它们之间的差异主要是对容器的其他属性进行概要分析。

白皮书关于属性作为签名容器一部分的论证实际上说明了之前提到的所有签名类型与 adbe.x509.rsa_sha1 签名之间的区别,这是第三个原始集成PDF签名类型。此类型不是基于签名容器,而是基于相当裸的签名;因此,在这种情况下,任何额外的信息都必须存储在PDF的各自结构中