首页> 中国专利> PDF数字签名方法和系统以及PDF数字签名验证方法和系统

PDF数字签名方法和系统以及PDF数字签名验证方法和系统

摘要

本发明提出了一种PDF数字签名方法,包括:根据待签名的PDF文件及数字签名的属性信息计算数字签名对应的字节范围数据;根据所述字节范围数据计算摘要值,并根据所述摘要值计算出副署数字签名结果;根据所述摘要值计算出主数字签名结果;将所述副署签名结果封装在所述主数字签名结果中,并将封装后的数字签名结果存储在PDF文件数字签名字典中。相应地,本发明还提供了一种PDF数字签名系统,PDF数字签名验证方法和系统。通过本发明的技术方案,可以对PDF文件的同一版本进行多次数字签名,实现了同一文件内容的联合签名,通过将自定义算法的副署签名结果封装在标准算法的主签名结果中,实现了自定义算法签名PDF文件与通用PDF阅读器的兼容。

著录项

  • 公开/公告号CN105320900A

    专利类型发明专利

  • 公开/公告日2016-02-10

    原文格式PDF

  • 申请/专利号CN201410356589.9

  • 发明设计人 王绪胜;杨玉坤;高莉;

    申请日2014-07-24

  • 分类号G06F21/64(20130101);H04L9/32(20060101);

  • 代理机构北京友联知识产权代理事务所(普通合伙);

  • 代理人尚志峰;汪海屏

  • 地址 100080 北京市海淀区北四环西路52号方正国际大厦18层

  • 入库时间 2023-12-18 14:21:19

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-08-23

    授权

    授权

  • 2017-10-24

    实质审查的生效 IPC(主分类):G06F21/64 申请日:20140724

    实质审查的生效

  • 2016-02-10

    公开

    公开

说明书

技术领域

本发明涉及数据签名技术领域,具体而言,涉及一种PDF数字签名方法、一种PDF数字签名验证方法,一种PDF数字签名系统和一种PDF数字签名验证系统。

背景技术

随着PDF已经成为主流文件交换格式之一,PDF文件的数字签名已经成为保证文件的真实性和完整性的重要技术手段。根据《ISO32000:1-2008文献管理--便携式文献格式--第1部分:PDF1.7》规范,PDF文件的签名的范围由PDF签名字典中的字节范围(ByteRange)指定,一般取值为去除签名字典内签名结果(Contents)以外的文档其他内容,PDF签名的流程如图1所示,具体描述如下:

1.计算待签名文件中字节范围对应的字节范围数据;

2.对字节范围数据进行摘要计算,得到摘要值;

3.使用签名人私钥将摘要值进行摘要;

4.将摘要结果、数字证书、时间戳(可选)封装后写入PDF签名字典中的签名结果中;

在PDF文件多重数字签名时,每次签名是将上次签名的结果文件作为一个签名源,重复签名的过程,如图2所示。

上述多重签名的处理方式具有如下几个缺点:

1.不满足需要对同一内容进行联合签名的业务需求,由于每次签名覆盖的字节范围不同,因此每次数字签名保护的文档内容是不一样。

2.验签时性能比较低,阅读器需要提取每次签名的数据进行验证;

另一方面,PDF阅读器对数字签名的验证依赖于数字签名字典中的过滤器(Filter)和子过滤器(SubFilter)属性中指定的签名处理程序及签名结果编码格式,为保证不同提供商的签名处理程的互操作,PDF规范进一步定义了adbe.pkcs7.detached、adbe.pkcs7.sha1、adbe.x509.rsa.sha1几个SubFilter,通过实现这几个预定义的SubFilter,通用PDF阅读器可以支持RSA、DSA签名算法及SHA1、SHA256、SHA384、SHA512、RIPEMD160摘要算法的验证。

adbe.x509.rsa.sha1指定了数字签名中使用RSA加密算法、摘要算法可以是SHA1、SHA256、SHA384、SHA512、RIPEMD160之一,数字签名的结果按照DER编码的PKCS#1二进制数据是直接存储在PDF文件签名字典的Contents条目中,用于签名的证书链存储在PDF文件签名字典的Cert条目中。adbe.pkcs7.detached、adbe.pkcs7.sha1指定了签名结果是按照DER编码的PKCS#7(RFC3852CryptographicMessageSyntax)二进制数据的格式存储在PDF文件签名字典的Contents条目中,PKCS#7的签名可以包括直接签名结果、签名证书链、证书回收列表、时间戳等信息。

要实现非RSA、DSA签名算法及其他摘要算法,需要定义自己的Filter和SubFilter属性,并开发特定的签名处理程序,实现自定义签名算法的签名和验证。签名处理程序可以通过插件机制嵌入在AdobeReader等通用PDF阅读器中,实现在AdobeReader等通用阅读器上支持自定义签名算法的验证。

基于AdobeReader等通用阅读器开发自定义签名算法验证插件的方法需要在用户的客户机上安装专用插件,具有如下一些缺点:

1、用户体验差:采用现有技术,签名的验证依赖于专用插件,对于未安装插件的常规客户端,使用自定义算法签名的文档将显示为签名无法验证或验证失败,用户对文档的真实完整无法确认。

2、分发维护困难:阅读器插件需要安装在客户机阅读器安装目录下的特定子目录,阅读器的版本不同,该子目录也有所差别,如Acrobat的插件子目录为Acrobatplug_ins,而AdobeReader的插件子目录为Readerplug_ins。由于客户端环境的复杂度,自定义签名算法验证专用插件的分发和维护都非常困难。

3、成本较高:使用通用阅读器的插件接口需获得源厂商的开发许可,增加了开发成本。

4、与阅读器绑定:由于不同阅读器开发商的插件接口没有统一标准,为降低开发和维护成本,开发商需要绑定1-2款阅读器进行专用插件的开发。

因此,需要一种新的技术方案,可以支持对PDF文件的同一版本实现多次签名,并能使现有通用PDF阅读器兼容自定义签名和摘要算法,提升用户使用体验的同时,降低分发维护的难度,节省开发成本。

发明内容

本发明正是基于上述问题,提出了一种新的技术方案,可以支持对PDF文件的同一版本实现多次签名,并能使现有通用PDF阅读器兼容自定义签名和摘要算法,在提升用户使用体验的同时,降低分发维护的难度,节省开发成本。

有鉴于此,本发明提出了一种PDF数字签名方法,包括:根据待签名的PDF文件及签名属性信息计算数字签名对应的字节范围;根据所述字节范围提取所述PDF文件中的字节范围数据;根据所述字节范围数据计算摘要值;根据副署签名证书私钥、副署签名算法和所述摘要值计算出副署数字签名结果;根据主签名证书私钥、主签名算法和所述摘要值计算出主数字签名结果;将所述副署数字签名结果封装在所述主数字签名结果中,并将封装后的数字签名结果和所述字节范围、所述签名属性数据存储在PDF文件数字签名字典中。

在该技术方案中,电子文件的副署签名(CounterSignature),指的是多人(多证书)对同一个电子文件的同时签名时,电子文件主要责任人的数字签名为主签名,其他人的数字签名为副署签名,主签名结果采用符合RFC3852标准的PKCS#7格式,副署签名结果作为PKCS#7格式中的未签名属性(UnsignedAttribute)封装在主签名结果中;PDF签名字典中的子过滤器(SubFilter)属性需指定为adbe.pkcs7.detached或adbe.pkcs7.sha1。采用上述技术方案对PDF文件进行数字签名时,副署签名和主签名覆盖的字节范围完全相同,因此它们保护的文档内容相同,实现了对同一内容进行联合签名;验签时,只需要提取一次签名数据进行验证,提高了验证性能。

其中,所述签名属性信息包括签名日期、签名原因、位置、联系人信息、显示外观等。

在上述技术方案中,优选地,所述副署数字签名为多个,在将所述副署签名结果封装在所述主数字签名结果之前,还包括:根据所述副署数字签名的个数,重复计算副署数字签名,即根据每个副署数字签名对应的副署签名证书私钥、副署签名算法和所述摘要值计算出每个副署数字签名对应的副署数字签名结果。

在上述技术方案中,优选地,在将所述副署签名结果封装在所述主数字签名结果之前,还包括:分析所述副署数字签名结果的格式,根据所述格式判断所述副署数字签名结果是否需要封装;在判断结果为不需要封装时,直接将所述副署签名结果封装在所述主签名结果中。

在上述技术方案中,优选地,在判断结果为需要封装时,将所述摘要值、所述副署数字签名对应的签名证书链、签名算法、所述副署签名结果封装成预设格式的签名结果,并将所述预设格式的签名结果封装在所述主签名结果中。所述预设格式可以是符合RFC3852标准的PKCS#7格式,也可以是自定义格式。

在上述技术方案中,副署签名与主签名采用不同的签名算法。副署签名的算法可以是自定义算法,主签名算法是PDF规范定义的标准算法。自定义算法的签名结果作为副署签名(CounterSignature)封装在标准算法的主签名结果中,通用PDF阅读器可以直接显示和验证主数字签名,自定义算法的签名结果由外部程序提取和验证。这样,避免通用PDF阅读器无法验证签名的错误,提升用户使用体验;避免了针对每个通用阅读器开发和分发签名处理程序,降低分发维护的难度,节省开发成本。

根据发明的另一方面,还提供了一种PDF数字签名验证方法,包括:从PDF文件数字签名字典中获取字节范围、封装后的数字签名结果;根据所述字节范围提取PDF文件中的字节范围数据,并计算摘要值;从所述封装后的数字签名结果中逐一提取出副署签名结果;根据所述摘要值和所述副署签名结果验证所述副署数字签名。

采用上述PDF数字签名方法对PDF文件进行数字签名后,主数字签名的显示和验证由通用PDF阅读器完成,副署签名结果的提取和验证由外部程序完成,外部程序提取和验证时,按照所述步骤从签名提取字节范围、副署签名,进而计算字节范围数据的摘要值,根据所述摘要值和所述副署签名结果验证所述副署数字签名。这样,PDF阅读器只用验证主数字签名,主数字签名内含的副署数字签名验证时,计算的摘要值可以被多个副署签名验证所使用,避免了多个字节范围的提取和摘要值计算,降低了签名验证的复杂度,提高了验证时的性能。

在上述技术方案中,优选地,在根据所述摘要值和所述副署签名结果验证所述副署数字签名前,还包括:对所述副署签名结果进行解析,以获得副署签名对应的签名数据、签名结果、签名算法、签名证书链;对所述摘要值和所述签名数据进行比对,并根据所述签名数据、所述签名结果、所述签名算法、所述签名证书链进行数字签名验证。

根据本发明的又一方面,还提供了一种PDF数字签名系统,包括:第一计算单元,根据待签名的PDF文件及签名属性信息计算数字签名对应的字节范围;第二计算单元,根据所述字节范围提取所述PDF文件中的字节范围数据;第三计算单元,根据所述字节范围数据计算摘要值;第四计算单元,根据副署签名证书私钥、副署签名算法和所述摘要值计算出副署数字签名结果;第五计算单元,根据主签名证书私钥、主签名算法和所述摘要值计算出主数字签名结果;封装单元,将所述副署数字签名结果封装在所述主数字签名结果中,并将封装后的数字签名结果和所述字节范围、所述签名属性数据存储在PDF文件数字签名字典中。

在该技术方案中,电子文件的副署签名(CounterSignature),指的是多人(多证书)对同一个电子文件的同时签名时,电子文件主要责任人的数字签名为主签名,其他人的数字签名为副署签名,主签名结果采用符合RFC3852标准的PKCS#7格式,副署签名结果作为PKCS#7格式中的未签名属性(UnsignedAttribute)封装在主签名结果中;PDF签名字典中的子过滤器(SubFilter)属性需指定为adbe.pkcs7.detached或adbe.pkcs7.sha1。采用上述技术方案对PDF文件进行数字签名时,副署签名和主签名覆盖的字节范围完全相同,因此它们保护的文档内容相同,实现了对同一内容进行联合签名;验签时,只需要提取一次签名数据进行验证,提高了验证性能。

其中,所述签名属性信息包括签名日期、签名原因、位置、联系人信息、显示外观等。

在上述技术方案中,优选地,所述副署数字签名为多个,所述第四计算单元具体用于:根据所述副署数字签名的个数,重复计算副署数字签名,即根据每个副署数字签名对应的副署签名证书私钥、副署签名算法和所述摘要值计算出每个副署数字签名对应的副署数字签名结果。

在上述技术方案中,优选地,还包括:判断单元,分析所述副署数字签名结果的格式,根据所述格式判断所述副署数字签名结果是否需要封装;第一处理单元,在判断结果为不需要封装时,直接将所述副署数字签名结果封装在所述主签名结果中。

在上述技术方案中,优选地,还包括:第二处理单元,在判断结果为需要封装时,将所述摘要值、所述副署数字签名对应的签名证书链、所述副署签名算法、所述副署签名结果封装成预设格式的签名结果,并将所述预设格式的签名结果封装在所述主签名结果中。所述预设格式可以是符合RFC3852标准的PKCS#7格式,也可以是自定义格式。

在上述技术方案中,优选地,所述副署签名算法与所述主签名算法为不同的签名算法。其中,副署签名的算法可以是自定义算法,主签名算法是PDF规范定义的标准算法。自定义算法的签名结果作为副署签名(CounterSignature)封装在标准算法的主签名结果中,通用PDF阅读器可以直接显示和验证主数字签名,自定义算法的签名结果由外部程序提取和验证。这样,避免通用PDF阅读器无法验证签名的错误,提升用户使用体验;避免了针对每个通用阅读器开发和分发签名处理程序,降低分发维护的难度,节省开发成本。

根据本发明的再一方面,还提供了一种PDF数字签名验证系统,包括:获取单元,从PDF文件数字签名字典中获取字节范围和封装后的数字签名结果;计算单元,根据所述字节范围提取PDF文件中的字节范围数据,并计算摘要值;提取单元,从所述封装后的数字签名结果中逐一提取出副署签名结果;签名验证单元,根据所述摘要值和所述副署签名结果验证所述副署数字签名。

采用上述PDF数字签名方法对PDF文件进行数字签名后,主数字签名的显示和验证由通用PDF阅读器完成,副署签名结果的提取和验证由外部程序完成,外部程序提取和验证时,按照所述步骤从签名提取字节范围、副署签名,进而计算字节范围数据的摘要值,根据所述摘要值和所述副署签名结果验证所述副署数字签名。这样,PDF阅读器只用验证主数字签名,主数字签名内含的副署数字签名验证时,计算的摘要值可以被多个副署签名验证所使用,避免了多个字节范围的提取和摘要值计算,降低了签名验证的复杂度,提高了验证时的性能。

在上述技术方案中,优选地,提取单元包括:解析单元,对所述副署签名结果进行解析,以获得副署签名对应的签名数据、签名结果、副署签名算法和签名证书链;验证单元,对所述摘要值和所述签名数据进行比对,并根据所述签名数据、所述签名结果、所述副署签名算法和所述签名证书链进行数字签名验证。

通过以上技术方案,将副署数字签名的结果和相关数据封装为一个自包含的结构,封装在主签名结果中,降低验证时的复杂度,提高验证时的性能。

附图说明

图1示出了相关技术中PDF签名的流程图;

图2示出了相关技术中重复签名的具体流程图;

图3示出了根据本发明的实施例的PDF数字签名方法的流程图;

图4示出了根据本发明的实施例的PDF数字签名方法的具体流程图;

图5示出了根据本发明的实施例的PDF数字签名验证方法的原理示意图;

图6示出了根据本发明的实施例的PDF数字签名验证方法的流程图;

图7示出了根据本发明的实施例的PDF数字签名验证方法的具体流程图;

图8示出了根据本发明的实施例的PDF数字签名系统的框图;

图9示出了根据本发明的实施例的PDF数字签名验证系统的框图。

具体实施方式

为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。

在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明的保护范围并不受下面公开的具体实施例的限制。

图3示出了根据本发明的实施例的PDF数字签名方法的流程图。

如图3所示,根据本发明的实施例的PDF数字签名方法,包括:步骤302,根据待签名的PDF文件及签名属性信息计算数字签名对应的字节范围;步骤304,根据所述字节范围提取所述PDF文件中的字节范围数据;步骤306,根据所述字节范围数据计算摘要值;步骤308,根据副署签名证书私钥、副署签名算法和所述摘要值计算出副署数字签名结果;步骤310,根据主签名证书私钥、主签名算法和所述摘要值计算出主数字签名结果;步骤312,将所述副署数字签名结果封装在所述主数字签名结果中,并将封装后的数字签名结果和所述字节范围、所述签名属性数据存储在PDF文件数字签名字典中。

在该技术方案中,电子文件的副署签名(CounterSignature),指的是多人(多证书)对同一个电子文件的同时签名时,电子文件主要责任人的数字签名为主签名,其他人的数字签名为副署签名,主签名结果采用符合RFC3852标准的PKCS#7格式,副署签名结果作为PKCS#7格式中的未签名属性(UnsignedAttribute)封装在主签名结果中;PDF签名字典中的子过滤器(SubFilter)属性需指定为adbe.pkcs7.detached或adbe.pkcs7.sha1。采用上述技术方案对PDF文件进行数字签名时,副署签名和主签名覆盖的字节范围完全相同,因此它们保护的文档内容相同,实现了对同一内容进行联合签名;验签时,只需要提取一次签名数据进行验证,提高了验证性能。

其中,所述签名属性信息包括签名日期、签名原因、位置、联系人信息、显示外观等。

在上述技术方案中,优选地,所述副署数字签名为多个,在将所述副署签名结果封装在所述主数字签名结果之前,还包括:根据所述副署数字签名的个数,重复计算副署数字签名,即根据每个副署数字签名对应的副署签名证书私钥、副署签名算法和所述摘要值计算出每个副署数字签名对应的副署数字签名结果。

在上述技术方案中,优选地,在将所述副署签名结果封装在所述主数字签名结果之前,还包括:分析所述副署数字签名结果的格式,根据所述格式判断所述副署数字签名结果是否需要封装;在判断结果为不需要封装时,直接将所述副署签名结果封装在所述主签名结果中。

在上述技术方案中,优选地,在判断结果为需要封装时,将所述摘要值、所述副署数字签名对应的签名证书链、签名算法、所述副署签名结果封装成预设格式的签名结果,并将所述预设格式的签名结果封装在所述主签名结果中。所述预设格式可以是符合RFC3852标准的PKCS#7格式,也可以是自定义格式。

在上述技术方案中,副署签名与主签名采用不同的签名算法。副署签名的算法可以是自定义算法,主签名算法是PDF规范定义的标准算法。自定义算法的签名结果作为副署签名(CounterSignature)封装在标准算法的主签名结果中,通用PDF阅读器可以直接显示和验证主数字签名,自定义算法的签名结果由外部程序提取和验证。这样,避免通用PDF阅读器无法验证签名的错误,提升用户使用体验;避免了针对每个通用阅读器开发和分发签名处理程序,降低分发维护的难度,节省开发成本。

图4示出了根据本发明的实施例的PDF数字签名方法的具体流程图。

如图4所示,根据本发明的实施例的PDF数字签名方法的具体流程如下:

步骤402,签名程序根据主签名证书及算法要求设置数字签名的Filter、SubFilter、其他属性数据(如签名原因、联系人等)和显示外观,Filter、SubFilter需设置为通用PDF阅读器可以验证的值,如将Filter设置为Adobe.PPKLite、SubFilter设置为adbe.pkcs7.detached或adbe.pkcs7.sha1。

步骤404,计算本次签名对应的ByteRange数据,记为Data(ByteRange)。

步骤406,对PDF内ByteRange包含的数据进行摘要,摘要算法的选取根据主签名的SubFilter确定,记为Digest(Data(ByteRange))。

步骤408,使用自定义算法(如:调用算法的SDK包)根据步骤406产生的摘要值计算副署数字签名,记为CSig(Digest(Data(ByteRange)))。

步骤410,根据副署数字签名格式判断是否需要封装,如果副署数字签名格式是需要封装的格式(如:仅包括直接签名结果的二进制PKCS#1格式),则执行步骤412,否则执行步骤414。

步骤412,封装副署签名。将PKCS#1格式的数字签名结果、签名公钥证书、签名算法封装,封装后的格式可能是符合RFC3852标准的PKCS#7格式,也可以是自定义格式,Encapsulate(CSig(Digest(Data(ByteRange))));

步骤414,计算PKCS#7主签名结果。根据Filter和SubFilter设置,使用主签名证书的私钥和SubFilter确定的算法,对步骤406产生的摘要数据进行数字签名,根据SubFilter设置,签名结果格式为PKCS#7格式,记为Sig(Digest(Data(ByteRange)))。

步骤416,将主签名结果和副署签名的封装结果(如需封装)进行二次封装,为保证通用PDF阅读器可以识别和验证,二次封装结果需为PKCS#7格式,记为Encapsulate(Sig(Digest(Data(ByteRange)))、CSig(Digest(Data(ByteRange))))【副署签名无需封装】或Encapsulate(Sig(Digest(Data(ByteRange))),Encapsulate(CSig(Digest(Data(ByteRange)))))【副署签名需要封装】。

步骤418,将步骤416的封装结果存入PDF文件数字签名字典中的Contents域。

其中,根据本发明的实施例的PDF数字签名方法的原理示意图如图5所示。本发明将自定义算法的签名结果作为副署签名(CounterSignature)封装在PDF通用阅读器可以验证的标准算法的主签名结果中;电子文件的副署签名,指的是多人(多证书)对同一个电子文件的同时签名时,电子文件主要责任人的数字签名为主签名,其他人的数字签名为副署签名,副署签名可以与主签名的算法不同,作为主签名的组成部分存储在文档中。由于副署签名结果需要封装在主签名结果中,因此签名结果需要采用PKCS#7格式。通用的PDF阅读器直接识别和校验标准算法的主签名结果;副署签名的结果可通过外部处理程序进行提取和检验。

具体地,PDF数字签名验证方法的流程如图6所示,包括:

步骤602,从PDF文件数字签名字典中获取字节范围、封装后的数字签名结果;

步骤604,根据所述字节范围提取PDF文件中的字节范围数据,并计算摘要值;

步骤606,从所述封装后的数字签名结果中逐一提取出副署签名结果;

步骤608,根据所述摘要值和所述副署签名结果验证所述副署数字签名。

采用上述PDF数字签名方法对PDF文件进行数字签名后,主数字签名的显示和验证由通用PDF阅读器完成,副署签名结果的提取和验证由外部程序完成,外部程序提取和验证时,按照所述步骤从签名提取字节范围、副署签名,进而计算字节范围数据的摘要值,根据所述摘要值和所述副署签名结果验证所述副署数字签名。这样,PDF阅读器只用验证主数字签名,主数字签名内含的副署数字签名验证时,计算的摘要值可以被多个副署签名验证所使用,避免了多个字节范围的提取和摘要值计算,降低了签名验证的复杂度,提高了验证时的性能。

在上述技术方案中,优选地,在根据所述摘要值和所述副署签名结果验证所述副署数字签名前,还包括:对所述副署签名结果进行解析,以获得副署签名对应的签名数据、签名结果、签名算法、签名证书链;对所述摘要值和所述签名数据进行比对,并根据所述签名数据、所述签名结果、所述签名算法、所述签名证书链进行数字签名验证。

下面结合图7详细说明本发明的PDF数字签名验证方法的具体流程。

如图7所示,根据本发明的实施例的PDF数字签名验证方法的具体流程如下:

步骤702,签名验证程序依据PKCS#7提取主签名中的封装后的副署签名结果;

步骤704,如提取的副署签名结果是可以直接验证的PKCS#7格式,如果签名数据包含在签名结果中,提取出签名数据,执行步骤708;

步骤706,根据封装格式解析出签名数据、签名结果、签名算法、签名证书链;

步骤708,根据签名字典读取出本次签名的ByteRange;

步骤710,计算ByteRange对应的数据;

步骤712,根据签名字典中的SubFilter计算ByteRange数据的摘要;

步骤714,将摘要数据与步骤704或步骤706中的提取出的签名数据,作比对,如相等,则执行步骤716,否则签名验证失败,流程结束;

步骤716,使用步骤704或步骤706的数据验证数字签名。

其中,为降低副署签名验证时的复杂度,避免从外部获取证书,副署签名的封装数据应该是自包含的,保证只使用副署签名即可进行验证,此时副署签名的数据应该包含如下信息:

1、待签名数据

2、签名算法

3、签名结果

4、用户公钥证书(证书链)

副署签名的封装结构的选取依赖于自定义签名算法提供商(以SDK方式)提供的签名结果格式,如自定义签名算法提供商支持PKCS#7的签名结果,封装结构应该使用PKCS#7签名结构,签名算法提供商只支持PKCS#1的签名结果时,可以使用XML等结构化的描述信息。

图8示出了根据本发明的实施例的PDF数字签名系统的框图。

如图8所示,根据本发明的实施例的PDF数字签名系统800包括:第一计算单元802,根据待签名的PDF文件及签名属性信息计算数字签名对应的字节范围;第二计算单元804,根据所述字节范围提取所述PDF文件中的字节范围数据;第三计算单元806,根据所述字节范围数据计算摘要值;第四计算单元808,根据副署签名证书私钥、副署签名算法和所述摘要值计算出副署数字签名结果;第五计算单元810,根据主签名证书私钥、主签名算法和所述摘要值计算出主数字签名结果;封装单元812,将所述副署数字签名结果封装在所述主数字签名结果中,并将封装后的数字签名结果和所述字节范围、所述签名属性数据存储在PDF文件数字签名字典中。

在该技术方案中,电子文件的副署签名(CounterSignature),指的是多人(多证书)对同一个电子文件的同时签名时,电子文件主要责任人的数字签名为主签名,其他人的数字签名为副署签名,主签名结果采用符合RFC3852标准的PKCS#7格式,副署签名结果作为PKCS#7格式中的未签名属性(UnsignedAttribute)封装在主签名结果中;PDF签名字典中的子过滤器(SubFilter)属性需指定为adbe.pkcs7.detached或adbe.pkcs7.sha1。采用上述技术方案对PDF文件进行数字签名时,副署签名和主签名覆盖的字节范围完全相同,因此它们保护的文档内容相同,实现了对同一内容进行联合签名;验签时,只需要提取一次签名数据进行验证,提高了验证性能。

其中,所述签名属性信息包括签名日期、签名原因、位置、联系人信息、显示外观等。

在上述技术方案中,优选地,所述副署数字签名为多个,所述第四计算单元808具体用于:根据所述副署数字签名的个数,重复计算副署数字签名,即根据每个副署数字签名对应的副署签名证书私钥、副署签名算法和所述摘要值计算出每个副署数字签名对应的副署数字签名结果。

在上述技术方案中,优选地,还包括:判断单元814,分析所述副署数字签名结果的格式,根据所述格式判断所述副署数字签名结果是否需要封装;第一处理单元816,在判断结果为不需要封装时,直接将所述副署数字签名结果封装在所述主签名结果中。

在上述技术方案中,优选地,还包括:第二处理单元818,在判断结果为需要封装时,将所述摘要值、所述副署数字签名对应的签名证书链、所述副署签名算法、所述副署签名结果封装成预设格式的签名结果,并将所述预设格式的签名结果封装在所述主签名结果中。所述预设格式可以是符合RFC3852标准的PKCS#7格式,也可以是自定义格式。

在上述技术方案中,优选地,所述副署签名算法与所述主签名算法为不同的签名算法,所述签名属性信息包括签名日期、签名原因、位置、联系人信息、显示外观。其中,副署签名的算法可以是自定义算法,主签名算法是PDF规范定义的标准算法。自定义算法的签名结果作为副署签名(CounterSignature)封装在标准算法的主签名结果中,通用PDF阅读器可以直接显示和验证主数字签名,自定义算法的签名结果由外部程序提取和验证。这样,避免通用PDF阅读器无法验证签名的错误,提升用户使用体验;避免了针对每个通用阅读器开发和分发签名处理程序,降低分发维护的难度,节省开发成本。

图9示出了根据本发明的实施例的PDF数字签名验证系统的框图。

如图9所示,根据本发明的实施例的PDF数字签名验证系统900,包括:获取单元902,从PDF文件数字签名字典中获取字节范围和封装后的数字签名结果;计算单元904,根据所述字节范围提取PDF文件中的字节范围数据,并计算摘要值;提取单元906,从所述封装后的数字签名结果中逐一提取出副署签名结果;签名验证单元908,根据所述摘要值和所述副署签名结果验证所述副署数字签名。

采用上述PDF数字签名方法对PDF文件进行数字签名后,主数字签名的显示和验证由通用PDF阅读器完成,副署签名结果的提取和验证由外部程序完成,外部程序提取和验证时,按照所述步骤从签名提取字节范围、副署签名,进而计算字节范围数据的摘要值,根据所述摘要值和所述副署签名结果验证所述副署数字签名。这样,PDF阅读器只用验证主数字签名,主数字签名内含的副署数字签名验证时,计算的摘要值可以被多个副署签名验证所使用,避免了多个字节范围的提取和摘要值计算,降低了签名验证的复杂度,提高了验证时的性能。

在上述技术方案中,优选地,提取单元906包括:解析单元9062,对所述副署签名结果进行解析,以获得副署签名对应的签名数据、签名结果、副署签名算法和签名证书链;验证单元9064,对所述摘要值和所述签名数据进行比对,并根据所述签名数据、所述签名结果、所述副署签名算法和所述签名证书链进行数字签名验证。

以上结合附图详细说明了本发明的技术方案,本发明的技术方案可以对PDF文件的同一版本进行多次数字签名,实现了同一文件内容的联合签名。通过将自定义算法的副署签名结果封装在标准算法的主签名结果中,实现了自定义算法签名PDF文件与通用PDF阅读器的兼容,相比基于AdobeReader等通用阅读器开发自定义签名算法验证插件的方法,具有如下一些优点:1、用户体验较好:用户使用通用PDF阅读器可显示和验证主数字签名,由于主数字签名和副署数字签名是针对PDF文件的同一版本,用户可以确认文档的真实完整;2、易于分发维护,且不绑定特定PDF浏览器;自定义算法签名验证程序与阅读器无关,可以实现自动分发。3、开发成本低:无需获得源厂商的开发许可,减少了开发成本。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号