基于网格安全的XML数据交换技术的原理与实现
2008-06-13
作者:徐 秀,张 申
摘 要:网格是在互联网的基础上发展起来并得到应用的。伴随着互联网开放性所带来的信息安全问题日趋严重,用于网格中数据交换" title="数据交换">数据交换的安全需求也越来越重要。分析了基于可扩展" title="可扩展">可扩展标记语言XML的数据交换的安全需求,介绍了XML安全服务中加密与签名的标准。针对XML数据交换的请求/响应机制, 给出了XML数据交换的加密与签名机制及实例。
关键词:网格 可扩展标记语言 加密 签名
1 网格概述
网格是基于计算机技术和网络技术发展起来的,它将地理位置上分散的资源集成起来,从而建立起一种构筑在国际互联网" title="国际互联网">国际互联网上的新型计算平台。通过网格,人们可以获得诸如计算机、集群、计算机池、仪器、存储设施、数据、软件等各种资源、功能和服务。使人们共享计算资源、存储资源及其他资源[1]。
有了这种以现有的国际互联网为基础建立的满足人们对资源更高共享需求的计算机平台,人们就可以实现跨组织、跨管理域的管理资源,并为网格应用提供全面的资源共享接口,实现分布资源的有效集成,提供共享各种资源的手段,从而提高资源的利用率,满足人们对广域范围内各种资源的共享需求。
在网格环境下,人们不仅可以向网格发出请求资源消息,由网格接收请求并做出响应,而且客户提出的请求能够同时驱动多个资源工作。多个请求可以向多个服务器请求连接。客户程序资源可以被其他客户请求作为资源使用。网格的目的是无论地理位置的远近、设备类型的异同,都可以为用户提供统一且简单的共享网格资源的环境。为达到网格的目的,需要建立相应的网格体系结构。最简单的一种就是由分布式资源、网格系统" title="网格系统">网格系统及网格用户组成的三层结构(如图1)。底层是网格的物理层,它是分布式网格资源的集合,是建立网格的基础。顶层是网格的应用层,它是应用分布式网格资源的集合,是网格应用的基础。网格系统在物理层和应用层的中间,将用户和资源联系起来提供透明的使用,以支持全方位的资源共享。网格系统提供的功能就是应用层的需求,它直接影响着网格所要达到的目的。
网格是一个开放、动态、异构、分布的系统,要想将互联网上分布的各种已经接入网络的设备以及将要接入网络的设备有机地集成,不是简单的连通问题。网格要为用户和应用提供访问使用资源的统一接口。它要对不同的物理资源进行不同层次的抽象,使不同的模块协调起来;定义好各模块的关系、模块间进行交互的协议及相应的方法与规则。网格是以原有的国际互联网为基础构建的,需要已有的一些协议和规范作为支持。图2所示为支持国际互联网的各网格协议的层次。HTTP、FTP、SMTP都是网格协议的传输载体,同时也都是网格建设的基础。无论网格的具体实现细节如何,从用户的角度来看,它的确只是一个网格接口。通过这个接口,用户向网格发送请求和接收来自网格的信息。网格接口就是要定义实现数据交换的协议,采用相同协议的双方要能够相互理解对方的含义。在协议中还要指明数据表示格式和数据内容的具体含义。XML就是适合网络上使用的一种数据交换语言,它已经在网格领域得到广泛使用。
2 XML的运用
目前网格上最常用的数据交换表示形式中最重要和最常用的就是XML。XML是SGML的一个子集,以结构化" title="结构化">结构化的方式描述各种类型的数据。它允许文档制作人员创建新的标记,以便更准确地描述数据。XML几乎可以描述所有领域的数据。它用严格的嵌套标记表示数据信息,特别适合在国际互联网的多点数据交换环境下使用[2]。
XML本身是可扩展的,只规定了标准的语法。XML是可以创建行业词汇和应用的语言,其文档的基本语法由W3C创建文档定义的XML模式所规定。在XML文档中所有开始标记都必须有对应的结束标记,并且这种标记有元素和属性两种类型。元素由起始标记、数据和结束标记三部分组成,如:<data>123</data>就是一个元素。而属性是修饰成分,由属性名后跟一个等号加属性值的形式构成,用来描述元素的某些性质。属性必须有一个属性值。例如:<数据 编号=“56789”>我的数据</数据>就是一个有属性的,其中“编号”是属性,“56789”是属性值。
在网格环境下,由于XML文档的结构化和可读性, XML数据经常作为公文或流程数据,以合作的形式流转,因此还需要用加密和签名来保证基于XML的数据交换活动中信息的安全性[3]。XML语言的安全是网格上信息交换的基础。为保障XML数据交换的安全性,国际标准化组织W3C提出了一系列XML安全服务的新标准,为以XML作为数据交换载体的应用提供安全性保障。这些标准包括:XML加密(XML Encryption)、XML数字签名(XML Signature)、XML密钥管理规范(XKMS)、XML访问控制标记语言(XACML)等。
XML语言的搜索是明确的、无二义性的。在交换敏感信息时,发信方及收信方必须建立安全的通信机制。为确保安全性,在使用XML交换数据时,需要在数据上使用加密及签名技术。
2.1 XML加密机制
XML加密(XML Encryption)是对XML文档中的全部数据或其中部分元素进行加密。对同一文档的不同部分,可采用不同的密钥进行加密,将同一个XML文件分别发给不同的接收者后,接收者只能访问拥有权限的那部分信息。XML加密语法的核心元素是EncryptedData元素,该元素与EncryptedKey元素一起用来将加密密钥从发送方传送到已知的接收方,它描述了一个加密数据包含的所有信息[1]。加密时,EncryptedData 元素替换 XML 文档加密版本中的该元素或内容。当加密的数据是任意数据时,EncryptedData 元素可能成为新 XML 文档的根,或成为一个子元素。当加密整个 XML 文档时,EncryptedData元素则成为新文档的根[4]。
在加密过程中,对于经过加密的数据,只有指定的接收者才可以从中还原出密码本身。XML加密定义了一些元素: EncryptionMethod子元素使用URI惟一标识中所采用的加密算法,目的是确保通信双方可以在加密算法上保持一致。KeyInfo子元素表达了加密时所使用的密钥信息,它可以根据通信双方的约定,记录密钥名称、密钥值、数字证书,甚至获得密钥转换方法的描述,从而确保密钥的安全性。CipherData子元素标记为被加密的数据。EncryptionProperties子元素可以用来描述加密数据和密钥的附加信息,如时间戳、加密序列号[4]。发送者创建符合以上结构的EncryptedData元素发给接收者;接收者可以根据从EncryptedData元素中得到的解密所需的加密算法、参数和密钥信息,正确地解密信息。
2.2 XML签名机制
XML签名标准可对任何数据类型提供完整性、消息认证、签名认证等服务。XML签名的主要目的是确保XML文件内容没有被篡改,对来源的可靠性进行验证[4]。XML签名是使用XML应用开发工具实现的,而不是使用专用软件。签名时可直接对XML内容进行处理。
Signature是XML签名的元素,描述传输一个数字签名的完整信息。SignedInfo子元素记录被签署的原始信息。CanoniclizationMethod子元素使用URI惟一标识。该数字签名采用XML的数据算法,它是正确解析XML数据签名的前提。因为XML数字签名对SignedInfo子元素的字节流进行运算处理时,采用Canonicalization使XML签名适应各种文件系统和处理器在版式上的差异,使 XML签名适应XML文件可能遇到的各种环境。SignatureMethod元素记录的是签名所采用的算法。Reference子元素指定的是摘要算法和摘要值。经过运算的SignedInfo子元素记录在SignedValue中。KeyInfo子元素是接收者用来得到有效签名的密钥信息。接收者可以根据Signature元素包含的信息确定数据的完整性和可靠性。
2.3 XML数据交换安全中实现加密、签名的实例
XML作为实现跨平台信息交换和提高异构系统之间互操作性的最佳解决方案而被提出,这极大地促进了数据交换应用的发展。而基于XML强大的可扩展性而提出的XML安全服务标准,使得可以在考虑XML数据信息交换的安全控制问题上,完全采用基于XML标准的体系结构,继承XML的灵活性和可扩展性。图3给出一个安全的XML数据交换请求/响应流程。
在安全处理模块中,操作的对象是根据访问请求生成的原始XML文档,因此可以采用XML加密规范和XML签名规范进行安全处理。首先,对其中包含的敏感信息元素采用特定的加密算法加密,或者采用非对称密钥体系的公钥进行加密。加密时,首先将算法信息和密钥信息放在<EncryptionMethod>和<KeyInfo>子元素中,加密后的信息构成<CipherData>元素,然后建立符合XML加密规范的EncrypedData元素,取代文档中被加密元素。其次,对该文档进行数字签名。签名时,首先通过消息摘要运算得到摘要值,放在<DigestValue>元素中,再建立<Reference>元素和<SignedInfo>元素;然后通过对
<SignedInfo>元素进行规范化处理产生<SignatureValue>元素;最后生成包含<SignedInfo>、<SignatureValue>和可选的<KeyInfo>、<Object>等元素的<Signature>元素,嵌入XML文档内部作为目标文档发送,或者以外部文档形式随同目标文档发送。下面给是一个用XML实现加密与签名的例子[1]:
<?xml version=″1.0″ encoding=″UTF-8″?>
<signature xmlns=″http://www.w3.org/2001/08/xmldsig#″>
<signedInfo>
……
<Reference URI=″″>
<Transforms>
<Transform Algorithm=″http://″>
<DataReference URI=″#encl″ xmls=http:///>
</Transform>
<Trandsform Algorithm=″″/>
</Transforms>
……
</Reference>
</SignedInfo>
<SignatureValue>
……
</SignatureValue>
<KeyInfo>
<-- 密钥信息-->
</KeyInfo>
<Object>
<--数据-->
<个人数据>
<客户 标识=″12000″>
<名字>张三</名字>
<金额>2500</金额>
<账号>2000036547892</账号>
<EncryptedData>
<EncryptionMethod Algorithm=″3des-cbc″>
<KeyInfo>Total Security Key</KeyInfo>
<CipherData>……</CipherData>
</EncryptedData>
</客户>
</个人数据>
<Object>
</Signature>
上例对XML加密的数据进行了签名,被签名的内容包含在object元素中。
作为一个开放的平台,由于资源的共享性和互操作性,互联网也面临着各种各样的安全威胁,如信息窃取、恶意欺骗、伪装、非法修改以及各种扰乱破坏等。随着XML技术的广泛应用和深入发展,在开放环境下进行XML数据交换,确保信息的安全性是XML应用顺利开展的首要条件。XML数据经常作为公文或流程数据,以合作的形式流转,因此需要有加密和签名来支持。依据XML语言自身具有的结构化特征,XML文档同时也具有结构化和可读性,通过对加密机制和签名机制的运用,可以保证XML数据交换活动中信息的安全性。XML的安全机制为确保网格资源的安全共享提供了保障。
参考文献
1 徐志伟,冯百明,李伟编.网格计算机技术.北京:电子工业出版社,2004
2 Deitel H M,Deitel P J著,康博译.XML编程技术大全.北京:清华大学出版社,2002
3 金可仲,陈庆章.XML数据交换的安全解决方案.http://www.ahcit.com/200306/37.doc,2004-6