2014-10-20 53 views
3

请您详细解释一下我最后给出的一些例子(一个用于附件,一个用于分离)iText分离签名究竟意味着什么?iText独立签名意味着

我发现这个奇妙的文档:iText digital signature pdf约iText的数字签名,但我仍然不知道我理解的iText的分离签名的概念。

Readig的documetation(见链接),我发现这样的定义:

在PDF中,我们有时指的是独立的签名。根据维基百科,分离签名是一种数字签名,与“签名数据分开”保持不变,而不是“捆绑成一个文件”。 该定义在PDF上下文中并不完全正确:签名包含在PDF文件中,但签名的属性是'签名的一部分',而不是'存储在签名字典'中。

哪里并不清楚我是什么“的签名属性”是指(什么签名属性它是指?)

请注意,文章(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 

回答

4

当你从,Digital Signatures for PDF documents引述Bruno Lowagie白皮书,确实是一个不可不看的人试图创建一个利用iText(和一个很好的信息源,即使你是集成PDF签名不使用iText)我同意,在其中使用这个词“分离”中的“超然PDF签名”的解释并没有真正击中了要害:

注:在PDF中,我们有时指分离签名。根据维基百科, 分离签名是一种数字签名,与其签名数据保持“分离”,因为 与“捆绑在一起成单个文件”相反。此定义在PDF的 上下文中并不完全正确:签名包含在PDF文件中,但签名 的属性是'签名的一部分',而不是'存储在签名字典'中。

首先,将这些签名称为“分离”不是任何当前规范强制执行的术语。我们之所以这样做的原因在于,用于这种签名的签名字典(adbe.pkcs7.detachedETSI.CAdES.detached)中使用的识别符包含该字。

因此,问题其实应该是:为什么这些标识符包含单词“分离”?

要理解这一点需要知道原来有2种其嵌入PKCS#7签名容器到PDF,分别由adbe.pkcs7.detachedadbe.pkcs7识别集成PDF签名。 sha1

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

  • adbe.pkcs7.sha1签名一个SHA1摘要的PDF的符号字节范围被计算和嵌入的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格式