乐于分享
好东西不私藏

PDF格式文件电子签名(国密)-手工验证

PDF格式文件电子签名(国密)-手工验证
一、首先准备工作
1、待验证的PDF电子签名test文件(test-电子签名.pdf
2、相关标准(GM/T 0112-2021 《PDF格式文档的密码应用技术要求》、GB/T 35275-     2026 《网络安全技术SM2密码算法加密签名消息格式
3、主要工具(Notepad++、ANS.1、DataConverter、Winhex等)
二、PDF文件结构学习及分析
1、标准关于PDF文件组成结构介绍
2、标准关于PDF文件签名结构介绍
3、使用Notepad++工具打开test-电子签名.pdf进行分析
    1)PDF文档结构分析如下:
    2)PDF签名结构分析如下:
a、 根据签名域找到签名字典在29个对象
       b、 找到第29个对象提取签名数据,可使用winhex工具分析签名原文
4、提取上面3082开头,000后为结尾的签名数据,使用Asn.1工具打开
     1)对照GB/T 35275,根据oid=1.2.156.10197.6.1.4.2.2,可知该数据为签名数据类型
    2)对照标准,签名数据类型结构分析
     3)主要分析signInfos每个签名者信息的集合,有我们需要验证的签名原文、对应签名值信息等
   4)按照上面的结构寻找并提取待签名数据签名值签名公钥,注意需要把待签名开始的oxA0改为0x31才是正确的待签名数据。
5、提取上面待签名数据、签名值及签名公钥分别为:
    1)待签名数据:3169301806092A864886F70D010903310B06092A864886F70D010701301C06092A864886F70D010905310F170D3236303532383037333133325A302F06092A864886F70D01090431220420248ADCDEB2A7214D0E63143B0624C2286A5B76137AD1989D83E21B80EEED84C4
   2)签名值:r:63B0DC76C9520B559B3A78B62E390C76E71B6447F05249AD65245A4B9EFEE3FB
s:E01BE91EE9820690C259142C3B79D302BFF4D031FAED158F3933113FDA98E460
   3)签名公钥:  04
px:E6A5191077208454668D3766705140CFA17BCB8C49544AB9FF41689B98001ADF
py:5F290346618205FBACECDC470C1A0CEBCFBFDACB8743D353D21DCF0A70EF2B94
6、使用DataConverter工具对以上数据进行SM2验证,验证结果如下: