首页 > 编程知识 正文

pdf包含数字签名的文件怎么编辑,php7.4

时间:2023-05-06 17:45:26 阅读:59056 作者:798

XML

Signature规范是数字签名和XML的组合,不应将其视为XML

Signature只是将数字签名技术应用于XML文件。

XML Signature具有以下功能:

1.XML Signature是统一资源(URI格式)

identifier )所在的资源上签名。 它不仅包含与签名相同的XML文件中的元素,还包含其他XML文件中的元素。 另外,即使是图形文件等XML以外形式的资源,只要是可以在URI中搜索的资源,也可以应用XML

信号。

这还表明XML签名中的对象会动态变化。

2.XML

Signature可以签名XML文件中的任何元素,也可以签名整个文件。

3.XML签名可以用非对称密钥签名(

Signature (),用对称密钥签名) HMAC )。

XML信号的结构如下:

(传输?

(诊断方法)

(DigestValue

(KeyInfo?

(对象) *

(x )? 代表x出现0-1次(x ) ) ) )。

代表x出现1-n次*

表示x出现0-n次

现在,我将简要介绍Signature中出现的每个元素。 SignedInfo表示最终要签名的对象。 签名主要由两个过程组成:先汇总要签名的对象,然后加密摘要。 DSA的效果类似于混合摘要和密钥,而不是加密摘要。 XML

Signature签名的对象不仅包含您引用的对象,还包含其他元素,如CanonicalizationMethod

签名方法元素。 已签署整个SignedInfo元素。

CanonicalizationMethod描述了一种标准化XML元素的方法。 XML签名与常规签名的不同之处在于XML元素的特殊性。 例如,同一XML文档在Windows上的显示方式与在Linux上的显示方式不同。 因为相同的换行符在不同的操作系统中表示的字符不同。 但是,不能因此认为XML元素不同,因为一个XML元素的两个属性的位置改变并不破坏XML文件的完整性,所以必须在XML元素签名之前进行标准化处理。 此元素指定如何处理它。

SignatureMethod指定用于签名的方法,例如用于摘要的方法,以及是使用不对称密钥还是对称密钥加密(或混合)。

引用表示您真正想要签名的对象,通过URI导航到要签名的对象(一个xml元素或其他),如果未指定URI,则表示要签名的整个xml文件。

Transforms表示在签名之前可能对被签名对象进行的转换。 例如,如果要签名的对象是二进制资源,则必须在Base-64中进行转换,以避免该对象可能出现不正确的XML格式。 这里还可以使用其他转换方法,如XPATH和XSLT。

DigestMethod指定如何汇总引用,通常使用SHA1。

DigestValue中存储了进行摘要的结果,在以后进行SignedInfo签名时间接对引用对象进行签名,保证了完整性。

SignatureValue此处存储了“签名信息元素标准化”(CanonicalizationMethod )后“签名方法”(SignatureMethod )的结果。

KeyInfo是可选的,用于查找消息收件人验证签名所需的密钥。 例如,使用特定的名称id(identity )表示密钥,消息收件人可以根据该id找到验证签名所需的密钥。 如果消息交换双方都事先约定了签名的密钥,则可以省略该要素。

Object用于定义一些扩展信息,是可选的。

其中,XML基于被签名对象(Reference内URI所指示的对象)和Signature要素的位置关系

Signature进行了分类。

如果被签名对象是Signature的子元素,则此签名属于Enveloping

Signatures类型。 如果Signature是被签名对象的子元素,则签名属于Enveloped

Signatures类型。 如果不是任何一个,则为Detached

Signatures类型。

xmlns=' http://www.w3.org/2000/09/xmldsig # '

.

.

Stuff to be

已签名

环境信号

125356

17

xmlns=' http://www.w3.org/2000/09/xmldsig # '

>

...

...

Enveloped Signatures

id="po1">

12366

17

xmlns="http://www.w3.org/2000/09/xmldsig#">

...

...

Detached Signatures 1

xmlns="http://www.w3.org/2000/09/xmldsig#">

/>

...

...

Detached Signatures 2

在了解了XML Signature的结构的基础上,再来看看XML

Signature的处理过程,其中包括了Signature的创建以及验证过程。

在创建Signature的时候分为两个步骤:

1. 引用(Reference)的创建

1.1 利用URI定位到引用的资源,并获得其数据。

1.2

利用Transforms元素中指定的方法对引用的资源做转换。

1.3

利用DigestMethod元素中指定的方法对转换后的资源做摘要,获得的结果用于创建DigestValue元素。

1.4

将以上元素组合成Reference元素。

URI="http://www.foo.com/securePage.html">

Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"

/>

60NvZvtdTB+7UnlLp/H24p7h4bs=

2. 签名(Signature)的创建

2.1

创建SignedInfo元素,并指定CanonicalizationMethod

和SignatureMethod的方法,然后将之前创建的Reference元素包含进来。

2.2

根据指定的CanonicalizationMethod将刚创建的SignedInfo元素标准化。

2.3

根据指定的SignatureMethod对标准化后的SignedInfo元素做签名,所得到的结果用于创建SignatureValue元素。

2.4

将SignedInfo,SignatureValue以及可选的KeyInfo和Object元素组合成Signature元素。

经过以上步骤,Signature创建完毕。最后介绍消息的接受方如何对Signature进行验证,从而确认消息的完整性。

Signature的验证过程和创建过程一样也分为两个步骤,只有当Reference,

Signature都通过验证才能保证消息的完整性。首先在验证前利用CanonicalizationMethod元素中指定的方法将整个Signature元素标准化,然后开始验证各个部分:

1. 引用(Reference)的验证

1.1 利用URI定位到引用的资源,并获得其数据。

1.2

利用Transforms元素中指定的方法对引用的资源做转换。

1.3

利用DigestMethod元素中指定的方法对转换后的资源做摘要。

1.4

将上一步的结果与DigestValue中的内容做比较,如果完全一致,则通过验证。

2. 签名(Signature)的验证

2.1

获得用于验证的密钥。(可能事先已经约定好,也可能通过KeyInfo中的信息取得)

2.2 对经过标准化的SignedInfo元素做摘要。

2.3

利用在第一步中获得的密钥解密SignatureValue元素中的内容,将其与上一步创建的摘要做比较,如果完全一致,则通过验证。如果使用了数字签名(非对称密钥),那么消息还将具有抗否认性。

当以上的两个验证都通过时,可以得到以下的结论:

1.

消息在传送以及保存的过程中都没有被别人算改。

2.

消息的发送方与签名方一致(身份鉴别)。

因为密钥只有消息的发送方和消息的接受方知道。

3.

如果使用了数字签名(非对称密钥加密摘要),

那么还可以防止消息的发送方否认它曾经发送过此消息。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。