如何计算SignerInfo中的message-digest以生成支持LTV的PDF?
PDF LTV签名signedAttributes字段相关问题解答
message-digest值的计算规则
signedAttributes中的message-digest取值为:签名时指定的PDF ByteRange 覆盖的全部字节拼接后,使用签名算法对应哈希函数计算得到的原始摘要值,无需额外编码或处理。
签名计算的正确逻辑
不需要将message-digest与PDF内容一同做哈希,正确的私钥签名流程如下:
- 第一步:计算PDF
ByteRange对应字节的哈希值,填入signedAttributes的message-digest属性 - 第二步:构造完整的
signedAttributes结构,必须包含以下必填属性,且整体采用标准DER编码:content-type:OID固定为1.2.840.113549.1.7.1(对应id-data)message-digest:第一步计算得到的PDF字节哈希值- 你已构造完成的
adbe-revocationInfoArchival对象(存放CRL/OCSP验证信息)
- 第三步:对整个DER编码后的
signedAttributes结构计算哈希,再使用签名者私钥对该哈希值做签名,签名结果存入signerInfo的signature字段即可
常见错误排查
你当前遇到的签名有效但LTV未启用、签名值校验失败问题,通常由两类错误导致:
signedAttributes的ASN.1编码不符合规范:RFC3852要求signedAttributes的SET OF结构必须使用隐式标签0xA0(不能用默认SET标签0x31),且所有属性需按ASN.1 DER规则排序(按属性OID的字节序升序排列)- 签名对象错误:未对
signedAttributes结构做哈希签名,而是直接对PDF原始内容的哈希做了签名,导致Acrobat校验signedAttributes完整性失败,无法认可其中的吊销信息
内容的提问来源于stack exchange,提问作者F.C.
相关产品推荐
相关产品推荐

