原文阅读摘要
PDF支持的数字签名, 不仅仅是公私钥签名,还可以是指纹、手写、虹膜等生物识别签名。PDF签名的计算方式,可以基于字节范围进行计算,也可以基于Pdf 对象(pdf object)进行计算。
PDF文件可能包含4种标准签名:常规签名、MDP 签名、UR签名等.
MDP (modification detection and prevention)签名区分为DocMDP和filedMDP。其中DocMDP有且仅有1个,且必须在第一个签名域重。DocMdp说明了pdf哪些修改是被允许的,哪些修改会导致签名失效。DocMDP是基于Pdf对象计算签名的。同理,FieldsMDP用来检测某些特定的表单对象是否被修改,计算哈希时,基于表单进行计算。
UR(Usage rights)签名用于控制PDF的权限。当文件未修改时,授权UR中列明的权限。如果签名不合法或者用户不合法,则无权限。
PDF的签名存在于PDF的signature dicttionary对象中,该对象的结构如下图所示
数字签名的计算基于PKI体系,该体系比较熟悉了,不再赘述。
PDF的多数字签名,基于Incremental updates,如下图所示。%%EOF是pdf的结束标记,因此每次签名都是追加在文件尾部,并重新计算生成签名。基于该特性,PDF支持预览之前的签名版本。
FileMDP和DocMDP
参考资料:
Pdf reference 1.7 GitCode - 全球开发者的开源社区,开源代码托管平台
Digital signature in a pdf https://www.adobe.com/devnet-docs/acrobatetk/tools/DigSigDC/Acrobat_DigitalSignatures_in_PDF.pdf