iText分离签名手段

avi*_*ing 3 itext digital-signature

你能否详细解释一下我最终给我一些关于 iText 分离签名究竟意味着什么的例子(一个用于附加,一个用于分离)?

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

阅读文档(见链接)我找到了这个定义:

在 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
Run Code Online (Sandbox Code Playgroud)

mkl*_*mkl 6

虽然您引用的白皮书,Bruno Lowagie 的PDF 文档数字签名,对于尝试使用 iText 创建集成 PDF 签名的任何人来说确实是必读的(即使您不使用 iText,也是一个很好的信息来源),我同意其中在“分离的 PDF 签名”中使用“分离”一词的解释并没有真正切中要害:

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

首先,将这些签名称为“分离”并不是任何当前规范强制执行的术语。无论如何,我们这样做的原因是此类签名的签名字典中使用的标识符adbe.pkcs7.detachedETSI.CAdES.detached)包含该词。

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

要理解这一点,需要知道原来有两种集成的PDF签名,它们在PDF中嵌入了一个PKCS#7签名容器,分别标识为adbe.pkcs7.detachedadbe.pkcs7.sha1

这两种签名的区别在于

  • 对于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容器。它们之间的区别主要是对容器附加属性的分析。

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