是否可以在 PDF 1.4 中使用带有 SHA256 的 ECDSA 签名?

Sen*_*rai 0 pdf itext pdfbox

我们正在尝试对生成的 pdf(pdf 版本 1.4)进行签名,但我找不到任何说明 PDF 1.4 支持 ECDSA 的标准。

mkl*_*mkl 5

简而言之

PDF 1.4 中没有关于允许的签名算法的规范要求。此外,PDF 1.4 尚未包含对可互操作签名的建议。

PDF 2.0 标准在其“签名互操作性”部分认为 SHA256withECDSA 只能从 PDF 2.0 开始互操作。

详细

首先,1.7 之前的 PDF 版本没有正确标准化,第一个标准化的通用 PDF 版本是 1.7,如 ISO 32000-1:2008。

好的,有高达 1.7 的 PDF 版本的 Adob​​e PDF 参考;但Adobe 个人在 iText 邮件列表中解释说PDF 参考本质上不是“规范的”——它们(通常)不会做出最终的、明确的陈述——只是一般的陈述。因此,您无法独立确定给定的陈述对于给定的 PDF 版本是否正确,Adobe 稍后可以判定情况正好相反。

尽管如此,PDF 参考 1.4 还是作为 ISO 19005-1:2005 规范 PDF/A-1 的基础,这在一定程度上将该 PDF 参考提升到了半规范级别。因此,让我们假设 PDF 1.4 确实由 PDF 参考 1.4“指定”。

不幸的是,PDF Reference 1.4 并没有对签名的格式进行太多限制:

签名可以是纯数学的,例如公钥/私钥加密的文档摘要,也可以是生物识别形式,例如手写签名、指纹或视网膜扫描。使用的特定身份验证形式由插件签名处理程序实现

因此,在 PDF 1.4 中,由相关签名处理程序决定允许什么和不允许什么,这不是“标准”的一部分。

正如Lonzak 的回答所指出- 感谢提醒 - 上述引用后的 PDF 参考 1.4 继续说“公钥数字签名认证的规范可在 Adob​​e 文档 PDF 公钥数字签名和加密规范中找到(请参阅参考书目)。”

乍一看,该文档似乎包含所寻求的信息。虽然它确实包含比 PDF 参考更多的细节,例如哪些SubFilter值对应于 PKCS#1 或 PKCS#7 签名值以及哪些数据(如果有)应嵌入到要签名的 PKCS#7 中,但它没有描述PKCS#7 容器中允许使用哪些签名和散列算法。因此,不幸的是,这份文件对手头的问题没有帮助。

这对应于 PDF 协会的观点,参见。他们的技术说明 6

PDF 参考 1.4 定义了如何将数字签名嵌入到文档中。PDF/A-1 标准会影响数字签名的某些方面,例如字体和颜色。但是,该标准没有对语义做出任何声明,即如何创建和验证签名。数字签名的语义由相应的签名处理程序决定,这些处理程序由注册名称唯一标识。

因此,技术说明 6 继续从后来的 PDF 参考中推导出这些语义

实际上,从 PDF 参考 1.5 开始,“签名互操作性”部分为可互操作的 PDF 签名提供了越来越具体的指导方针。

但请注意,这些指导方针仍然不是一般要求。

根据 PDF 2.0 规范 ISO 32000-2:2017,PDF 版本对互操作签名的算法限制是:

截屏

这认为您的 SHA256withECDSA 签名在 PDF 2.0 之前不可互操作!