关于XML签名的介绍
扫描二维码
随时随地手机看文章
本文比较全面地介绍了XML签名,但并未深入探究。本人水平有限,错误难免,欢迎指正,共同探讨。
简介
XML签名是一种基于XML格式的签名规范。它是W3C最早的XML安全方面的推荐标准规范。设计的XML签名带有多个目标,可提供“对任何数据类型的完整性、消息认证、和/或签名者认证服务, 无论是在包括该签名的 XML 内部还是在别处(这对因特网的发展意义重大)。”
XML实质上是定义了一些XML标签,通过这些标签来达到对XML文档或其他数据进行签名的目的。
本文首先说明XML签名解决的问题,然后再从数字签名原理、XML签名语法、应用等各方面讲述XML签名。
为什么需要XML签名
互联网在快速发展的同时,带来了许多安全方面的挑战。数据传输的机密性、完整性,消息认证,数据不可抵赖性等,都是在应用时需要高度重视的。正如简介中所说,XML签名能够解决完整性、消息认证和不可抵赖性(即签名者认证服务)。
完整性:即保证数据在传输过程中不被篡改。
消息认证:使数据接收者能够确定消息来源的一项服务。
不可抵赖性:使数据发送者不能对自己已经发送数据的行为进行否认的一项服务。
同时,XML签名是完全基于XML的,这使得它的应用将十分方便。还有一点很重要,它是W3C的推荐标准(要知道因特网上的应用,标准是十分重要的)。
数字签名
数字签名是密码学中非常重要的一个领域,应用十分广泛。
密码学主要分为对称和非对称两大类,其区别在于加解密密钥是否相同。非对称密码学又称公私钥密码学,是近代密码学一个非常重大的突破。非对称加密的加解密密钥不同,一般称其中一个为私钥,另一个为公钥。私钥为用户私有,公钥通过某种机制公布,并且两者无关联(并非完全没有联系,是指从一个无法推的得另一个)。由于它使用两种不同的密钥,因而称为非对称,并且因此可以用于消息认证和防抵赖。
在应用数字签名时,一般都会配合使用消息摘要算法(因为如果直接对原数据进行加密签名的话,会使签名十分冗长。所以先计算其摘要,再对摘要进行签名)。消息摘要算法也是密码学中很重要的一个方面。它是一种单向函数,对原数据进行变换并获得摘要值(一般512位)。它的特点是攻击者无法针对一个摘要逆向生成产生此摘要的原数据,由此可知它是提供完整性服务的关键。
下面是一个简单的应用模式:
注:XML签名规范是包括摘要部分的XML签名语法,首先看个例子:
[来源于“XML-Signature Syntax and Processing”]
[s01]
[s02]
[s03]
[s04] <SignatureMethod
Algorithm="http://www.w3.org/2000/09/xmldsig#dsa-sha1"/>
[s05] <Reference
URI="http://www.w3.org/TR/2000/REC-xhtml1-20000126/">
[s06]
[s07]
[s08]
[s09]
[s10]
[s11]
[s12]
[s13]
[s14]
[s15a]
[s15b]
[s15c]
...
[s15d]
[s15e]
[s16]
[s17]
开始为一个Signature标签,表示这是一个XML签名。
2-12行为SignedInfo,其中Reference中指明签名的对象,以及原数据的摘要。
13行为签名值。
14-16行为KeyInfo标签,指明签名使用的公钥信息。
例子中出现的标签,以及为出现的标签,将在下面简要介绍。
[更加具体的说明以及相关的XML Schema或DTD可以参考“XML-Signature Syntax and Processing”]
1、 名称空间
xmlns:ds="http://www.w3.org/2000/09/xmldsig#"为XML签名使用的名称空间。
2、 Signature标签
标识了特定环境下的一个完整XML签名。包括子元素
3、 SignedInfo标签
最复杂的一个标签,指明了规范化方法、数据源、签名算法、摘要算法、摘要值以及签名变换等。包括
3.1、
空标签。属性Algorithm用URI方式指定规范化的算法。
3.2、< SignatureMethod >标签
空标签。属性Algorithm用URI方式指定签名的算法。
3.3、
< DigestMethod>和< DigestValue>标签分别指定摘要的算法和值。属性Id为标识,URI指定数据源。< Transforms>指定签名变换,由零至多个
4、
(可选。因为在实际应用中,上下文可能已经隐含了这个信息,或者双方通过其他约定来传递这个信息)
包含
4.1、
密钥名称的简单文本标识符。
4.2、
RSA或DSA公钥。
4.3、
允许远程访问密钥信息。
4.4、
X.509证书数据。
4.5、
PGP相关数据。
4.6、
SPKI相关数据。
4.7、
密钥共识参数(如Diffie-Hellman参数等)
5、
用于附加信息。
再次强调,这里只是简要介绍,更加详细的说明参考“XML-Signature Syntax and Processing”。
应用
XML签名可以作为其他标准框架的一部分使用,当然也可以独立适用,自己定义一个框架,自己生成和解析XML签名。XML签名已经广泛应用于WS-Security中,具体可参阅WS-S的内容。
实现
现在已经出现了很多XML签名开发包。主要有IBM的XML Security Suite和apache的XML Security。其中实现了XML签名生成和校验的API(Java)。