这篇文章给大家介绍如何在Adobe Acrobat Reader DC中验证电子签名,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
1.1 CA数字证书
数字证书就是互联网通讯中标志通讯各方身份信息的一系列数据,提供了一种在Internet上验证您身份的方式,其作用类似于司机的驾驶执照或日常生活中的身份证。它是由一个由权威机构—–CA机构,又称为证书授权,(Certificate Authority)中心发行的,人们可以在网上用它来识别对方的身份。 数字证书是一个经证书授权中心CA机构数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。
1.2 X.509格式证书
X.509 是密码学里公钥证书的格式标准。X.509 标准规定了证书可以包含什么信息。 X.509 证书里含有公钥、身份信息(比如域名、单位名称或个人姓名等)和签名信息(如证书签发机构CA的签名)。 对于一份经由可信的证书签发机构签名的证书,证书的拥有者就可以用证书及相应的私钥来对文档进行数字签名。 除此之外X.509还附带了证书吊销列表和用于从最终对证书进行签名的证书签发机构直到最终可信点为止的证书合法性验证算法。
1.3 时间戳
时间戳(Time stamp)是一种计算机术语,是指电子文件产生的时间。个人计算机产生电子文件后的时间取决于该台计算机设备的时钟,而此类时钟可以任意修改,因此在普通个人计算机设备上形成的电子文件的时间戳因难以证明不可篡改性而没有一般意义上的证据效力。
可信时间戳是由权威可信时间戳服务中心签发的一个能证明数据电文(电子文件)在一个时间点是已经存在的、完整的、可验证的,具备法律效力的电子凭证,可信时间戳主要用于电子文件防篡改和事后抵赖,确定电子文件产生的准确时间。一个国家的标准时间是具有权威性的,每个国家的标准时间由各国权威授时中心管理。在中国可信时间戳服务机构的法定时间源由中国科学院国家授时中心授时。 目前在中国能够提供可信时间戳服务的机构有:ZJCA、CFCA等。
1.4 文档哈希值(摘要值)
哈希值,又称:单向散列函数(或散列算法,又称哈希函数或哈希摘要)是一种可以通过散列函数把任意消息或任意数据压缩成摘要的方法。散列函数将数据打乱混合,重新创建而得到的这个值叫做散列值(哈希值或摘要值)。 文件哈希值是根据文件的内容的数据通过哈希运算得到的数值, 不同的文件(即使是相同的文件名)得到的哈希值是不同的, 所以哈希值就成了每一个文件里的身份证。 不同哈希值的文件被认为是不同的文件,因为相同哈希值的文件,其内容肯定是完全相同(即使文件名不同)。 在现在密码体系的数字签名中单向散列函数也是重要的一部分。对文件哈希值(又称“数字摘要”)进行签名,在PDF电子签名中可以认为与对文件本身进行数字签名是等效的,可以校验一份文件的完整性。
在Adobe Reader DC 中的“签名属性”对话框中的“有效性小结”,该小结可能显示以下消息之一: 签名日期/时间来自签名者计算机上的时钟 时间建立在签名者计算机的当地时间基础上。 签名包含时间戳 签名时使用了时间戳服务,且本机已安装时间戳根证书与时间戳服务之间建立信任关系。 签名包含时间戳,但无法验证该时间戳 签名时使用了时间戳服务,但本机未将时间戳服务根证书添加到可信任身份列表中。 签名包含时间戳,但时间戳已过期 Reader根据当前时间验证时间戳。如果时间戳服务的证书在当前时间之前已过期,将显示该消息。要让Reader接受过期时间戳,请在“签名验证首选项”对话框(“首选项”>“签名”>“验证: 更多”)中选择“使用已过期时间戳”。验证包含已过期时间戳的签名时,Reader中会显示一条警告消息。
1.自应用本签名以来,“文档”未被修改 :这类验签信息主要出现在签署者对PDF文件内容签名后其签名所保护的PDF文件内容未被修改。
2.本修订版文档未被更改,在此修订版之后,文档已被更改 :这类验签信息主要出现在签署者对PDF文件内容签名后,在其签名所保护的PDF文件内容之外其他地方被修改。 如一个PDF文件签署者A填写与A相关信息签名后,签署者B又填写与B相关的信息后再签名。
3.本签名“(签名的字节范围无效)”的格式或其包含的信息出现错误: 这类验签信息主要出现在签署者对PDF文件内容签名后,其签名所保护的PDF文件内容范围被修改(即签名被篡改)。
4.本签名“(支持信息:SigDict/Contents illegal data)”的格式或其包含的信息出现错误 :这类验签信息主要出现在签署者对PDF文件内容签名后,其签名所保护的PDF文件中的Contents信息被修改含有格式不正确的数据(即签名被篡改)。
PDF的签名标准是 PAdES。其签名后的PDF文档格式如下:
1.使用CA数字证书进行PDF文件签名过程
假设一个用户A需要对一份电子合同原文PDF文件进行签署,则电子签名服务首先对电子合同原文PDF文件进行哈希算法,得到电子合同原文PDF文件的哈希值。然后使用用户A的CA私钥证书对哈希值进行加密,把加密得到的电子签名插入到电子合同PDF文件中发送给用户B。
2.使用CA数字证书进行PDF文件验签过程
用户B收到签署后的电子合同PDF文件(带电子签名的电子合同)后,先对电子合同原文PDF文件用哈希算法得到哈希值,然后使用用户A的CA证书公钥对PDF文件中的电子签名进行解密,解密得到的哈希值与电子合同原文PDF文件计算的哈希值进行比对,如果哈希值一致,则证明电子合同确实是A所签署的,并且没有被纂改过,也就达到验证“签名未改、原文未改”的目的。
3.PDF文件签名和验签过程说明
1)将签名的PDF先转换为字节流。
2)将整个PDF文件写入磁盘,并在签名字典中留有适当大小的空间(签名值保存的空间,ByteRange数组保存空间)。ByteRange是一个包含四个数字的数组。 每对值中,第一个数字是:需要hash的字节流的开头位置(从头开始,从0开始)。 第二个数字是:该字节流的长度。 这两对定义了两个字节序列,用于定义要hash的内容。 签名值存储在第一个序列的结尾和第二个序列的开头之间的/Contents键中。 在下图,计算字节0到839和960到1200的哈希值。
3)根据文件中的偏移量知道签名值的位置后,将真实值以覆盖写方式写入ByteRange数组。 由于字节偏移量不得更改,因此新数组语句后面的额外字节将被零覆盖。
4)使用例如SHA-256之类的哈希算法,计算由ByteRange值指定的文档范围的哈希值。 注:Acrobat采用的方法是:对整个PDF文件进行哈希计算,而获得文档签名的哈希值(从字节0开始,以物理文件中的最后一个字节结束,但不包括签名值字节)。
5)计算出哈希值后,用签名者的私钥进行加密,并生成十六进制编码的PKCS#7对象签名对象。
6)签名对象作为/Contents的值,保存到文件中。 任何未用于签名对象的空间都将被零覆盖。
在中国CA机构所颁发的CA数字证书都是受工信部进行监管的,CA机构需要按照相关法规进行业务开展。 由某个CA中心的顶层根证书给下面的二级根证书签名,然后再由二级根证书给具体的个人或企业用户签发证书。
CA机构拥有自己的公钥和私钥,CA机构使用私钥给用户(包括CA机构中心其他级别根证书)签发数字证书,具体签发过程如下:
(1)将用户的身份信息和用户的公钥信息,按照特定的格式组成数据D。
(2)使用哈希摘要算法对数据D进行计算得到哈希值H。
(3)使用CA中心的私钥对哈希值H进行加密得到数字签名S。
(4)将用户的身份信息、用户公钥信息和数字签名S,按照特定格式组成最终的CA数字证书。其CA数字证书中的“指纹”项记录的就是CA中心私钥签名后的数字签名S值。
数字证书验签过程如下:
(1)用CA数字证书中读取到证书指纹(数字签名S值)。
(2)利用CA中心公钥对数字签名S值进行解密。
(3)如果可以成功解密则可以说明用户的CA数字证书是某CA中心颁发。
关于如何在Adobe Acrobat Reader DC中验证电子签名就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。