PDF格式分析(五十三)Digital Signatures 数字签名-补充

撤销信息

adbe撤销信息属性:adbe-revocationInfoArchival OBJECT IDENTIFIER ::={ adbe(1.2.840.113583) acrobat(1) security(1) 8 }

revocation信息属性的值可以包括以下几种数据类型:

  1. 证书撤销列表(CRL),CRL通常很大,因此不建议嵌入PKCS#7对象中。
  2. 在线证书状态协议(OCSP)响应,这些通常很小并且大小不变,应该是包含在 PKCS#7对象。
  3. 自定义吊销信息:除了将其编码为OCTET STRING之外,本规范未规定格式。

adbe的撤销信息属性值,具有ASN.1类型RevocationInfoArchival:

RevocationInfoArchival ::= SEQUENCE {
crl [0] EXPLICIT SEQUENCE of CRLs, OPTIONAL
ocsp [1] EXPLICIT SEQUENCE of OCSP Responses, OPTIONAL
otherRevInfo [2] EXPLICIT SEQUENCE of OtherRevInfo, OPTIONAL
}
OtherRevInfo ::= SEQUENCE {
Type OBJECT IDENTIFIER
Value OCTET STRING
}

对于字节范围签名,Contents应为带有“<”和“>”分隔符的十六进制字符串。 它应精确地匹配ByteRange指定的范围之间的空间。 由于PKCS#7对象的长度不完全可预测,因此在将PKCS#7写入文件中的已分配空间之前,内容的值应在字符串末尾(在“>”分隔符之前)用零填充。

编码签名值的格式应为adbe.pkcs7.detached。 此编码允许在算法使用方面的大多数选项。 下表显示了各种SubFilter值支持的算法:

表1

PDF格式分析(五十三)Digital Signatures 数字签名-补充_第1张图片

Permissions(权限)

文档目录中的Perms条目指定了权限字典(PDF 1.5)。此字典中的每个条目指定权限处理程序的名称。这些权限与加密对象的权限类似,但不要求对文档进行加密。 对于实际授予文档的权限,权限字典中的每个权限处理程序以及安全性处理程序都应允许该权限。例如:填写表单域的能力。

表2 权限字典中的条目

key type value
DocMDP dictionary (可选)对签名字典的间接引用。该字典应包含一个Reference条目,该条目应是具有DocMDP转换方法和相应转换参数的签名引用字典。如果此条目存在,则消费者应用程序应强制执行DocMDP转换参数字典中P属性指定的权限,并且还应根据是否违反了任何这些权限来验证相应的签名。
UR3 dictionary (可选)一种签名字典,用于指定和验证为此文档授予的其他功能(使用权); 也就是说,启用符合本标准的阅读器的交互功能,默认情况下不可用。例如,符合本标准的阅读器默认情况下不允许保存文档,但代理可以授予允许保存特定文档的权限。 签名应用于验证签名的代理是否已授予权限。签名字典应包含一个Reference条目,该条目应是具有UR变换方法的签名引用字典。 此方法的转换参数字典指示应为文档授予哪些附加权限。 如果签名有效,则除了应用程序的默认权限外,符合本标准的读者还应允许文档的指定权限。

法律内容证明

PDF语言提供了许多功能,可以使PDF文档的呈现外观产生变化。 这些功能构建好一个文档,有意或无意地误导文档的接收者。 在考虑签署的PDF文档的法律含义时,这些情况是相关的。

因此,应提供一种机制,文档接收者可以通过该机制确定文档是否可信任。 主要方法是仅接受包含证书签名的文档(一个具有DocMDP签名的文档,该签名定义了文档中允许更改的内容)。

在创建认证签名时,应创建一个合法的证明字典,其条目如表3所示。该字典应为文档目录中Legal条目的值。 其条目应指定可能导致文档内容意外呈现的所有内容。

表3 法律证明字典中的条目

key type value
JavaScriptActions integer (可选)文档中JavaScript操作的数目
LaunchActions integer (可选)文档中Launch操作的数目
URIActions integer (可选)文档中URI操作的数目
MovieActions integer (可选)文档中Movie操作的数目
SoundActions integer (可选)文档中Sound操作的数目
HideAnnotationActions integer (可选)文档中Hide操作的数目
GoToRemoteActions integer (可选)文档中GoToRemote操作的数目
AlternateImages integer (可选)文档中备用图像的数目
ExternalStreams integer (可选)文档中找到的外部流的数量。
TrueTypeFonts integer (可选)文档中TrueType字体数目
ExternalRefXobjects integer (可选)文档中引用XObject的数量
ExternalOPIdicts integer (可选)文档中OPI词典数目
NonEmbeddedFonts integer (可选)文档中非嵌入字体数目
DevDepGS_OP integer (可选)在文档中图形状态参数OP的引用数目
DevDepGS_HT integer (可选)文档中图形状态参数HT的引用数目
DevDepGS_TR integer (可选)文档中图形状态参数TR的引用数目
DevDepGS_UCR integer (可选)文档中图形状态参数UCR的引用数目
DevDepGS_BG integer (可选)文档中图形状态参数BG的引用数目
DevDepGS_FL integer (可选)文档中图形状态参数FL的引用数目
Annotations integer (可选)文档中的注释的数目
OptionalContent boolean (可选)如果在文档中找到可选内容,则为true
Attestation text string (可选)由文档作者创建的证明,解释此词典中是否存在哪些条目,或是否存在影响文档法律完整性的任何其他内容。

数字签名过程

  1. 将签名的PDF先转换为字节流。
  2. 将整个PDF文件写入磁盘,并在签名字典中留有适当大小的空间(签名值保存的空间,ByteRange数组保存空间)。
    ByteRange是一个包含四个数字的数组。 每对值中,第一个数字是:需要hash的字节流的开头位置(从头开始,从0开始)。 第二个数字是:该字节流的长度。 这两对定义了两个字节序列,用于定义要hash的内容。 签名值存储在第一个序列的结尾和第二个序列的开头之间的/Contents键中。 在下图,计算字节0到839和960到1200的哈希值。
    PDF格式分析(五十三)Digital Signatures 数字签名-补充_第2张图片
  3. 根据文件中的偏移量知道签名值的位置后,将真实值以覆盖写方式写入ByteRange数组。 由于字节偏移量不得更改,因此新数组语句后面的额外字节将被零覆盖。
  4. 使用例如SHA-256之类的哈希算法,计算由ByteRange值指定的文档范围的哈希值。 注:Acrobat采用的方法是:对整个PDF文件进行哈希计算,而获得文档签名的哈希值(从字节0开始,以物理文件中的最后一个字节结束,但不包括签名值字节)。
  5. 计算出哈希值后,用签名者的私钥进行加密,并生成十六进制编码的PKCS#7对象签名对象。
  6. 签名对象作为/Contents的值,保存到文件中。 任何未用于签名对象的空间都将被零覆盖。
  7. PDF文件将会被Acrobat重新加载,以确保内存和磁盘版本一致。

多次签名,采用增量更新的形式进行保存,才能保证前面签名的有效性。
PDF格式分析(五十三)Digital Signatures 数字签名-补充_第3张图片

你可能感兴趣的:(PDF分析)