在电子商务活动中,Web服务的安全问题已经成为制约电子商务活动安全性的一个重要因素,而Web服务使用基于XML的消息机制作为服务的创建和访问机制,为了有效保证在使用XML作为信息交换媒介情况下的安全性,尤其是其描述的敏感的商务信息的安全,我们可以采用加密技术来处理。

一、传统的Web服务安全技术

目前,业界已经有一套现成的而且广泛接受的传输层安全机制SSL,但是只依靠SSL并不能在Web服务模型内提供足够的安全性的情况:

(1)SSL的安全机制并不一定适用于Web服务在未来的实现中引入的其他传输方式,如SMTP、TCP、FTP、消息队列等;

(2)SSL只能对全部的信息进行加密,而不能有选择地对部分信息进行加密;

(3)SSL只能确保点对点的安全,而无法保障端到端的安全。

综上所述,当前的安全传输机制并不能适应安全的Web服务要求,需要制定新的安全规范。在安全服务的逻辑组件中,提高可用性更多的是从物理层和网络层进行考虑,所以新的安全规范更多地集中在机密性、完整性、不可否认、鉴别和授权方面进行考虑。

XML加密是由W3C和IETF开发的,该技术在XML文档中加入了一些元素用于封装加密数据和加密方法等,实现了XML文件的机密性、鉴别、完整性、不可否认性等,是许多Web服务安全技术的基础构件。

二、XML加密

XML加密允许对文档中特定的部分进行加密,也可以对同一文档的不同部分进行多重加密,加密后的文档在传输和存储状态都是安全的。在XML加密中,加密后的数据以XML格式表示,并且由一个<EncryptedData>元素或<EncryptedKey>元素来标识,<EncryptedData>元素用来表示除加密密钥以外所有的加密内容,而<EncryptedKey>元素用来表示加密后的数据是一个加密密钥,除了表示加密内容外,XML加密还表示了其他的加密信息,如所使用的加密算法和加密密钥等,这样使应用程序的工作得以简化。另外,XML加密在对XML文档加密时并没有定义任何新的加密算法,而是构建于现有的算法之上,从而使互操作成为可能。

1、XML加密与传统加密的对比

当前,传输层安全性TLS是Internet上安全通信的事实标准,TLS是继安全套接字层(SSL)之后的端到端安全性协议,是一个非常安全和可靠的协议。它提供了通信双方之间端到端的安全性会话,在传统加密方式中,通常都是假定用单个密钥对整个明文文件加密。

XML加密并非替换或取代SSL/TLS,相反,它提供了用于SSL未涵盖的安全性需求的机制,XML加密过程允许使用多个对称密钥或多个非对称密钥来实现元素级的加密。

在传统的SSL/TLS中有两个领域未涉及:加密交换数据的一部分;多方的安全性会话。而XML加密规范可以对文档选定的某个部分进行加密,使用者可以只对需要保护的重要部分进行加密,并且XML加密为需要结构化数据安全交换的应用程序提供了一种端到端的安全性。

2、XML加密步骤 

XML加密定义了一个对明文加密产生密文以及对密文解密恢复明文数据的过程:

(1)选择加密算法

XML加密算法中有对称加密和非对称加密,由于不对称加密和对称加密算法都有各自的缺点,在实际应用中可把二者结合起来使用,可以先用不对称加密交换对称密钥,再用对称加密交换XML数据。

(2)选择密钥传输方法

解密必须使用密钥,可以传输解密的密钥的方法:不传输密钥、使用密钥名称或其他相关信息、传输加密后的密钥。

(3)加密原始数据

加密原始数据,生成加密的XML文档,<EncryptedData>元素是XML加密句法中最基础的元素。包括了待加密数据源的位置、加密算法等。

3、XML加密的粒度 

XML加密的基本粒度单位是元素,加密的粒度可以应用于三种情况:

(1)XML元素的加密;

(2)XML元素内容的加密;

(3)任意数据的加密。

基于XML加密的Web服务安全在电子商务中的实现如图,<EncryptedData>元素替换了文档中的<Cardld>,文档其他部分不变。加密后其他元素内容可以为任何人知晓,而<Cardld>元素的内容则只有拥有对应解密密钥的人才可获得。

三、基于XML加密的Web服务安全 

作为一个典型的应用,程序实现了完整的XML文档的加密和解密。

1、XML文档加密过程

(1)创建一个Xml Document对象,利用它的load方法装人要加密的XML文件(本例以encrypting.xml为例);

(2)创建一个Encrypted Xml对象,把上一步中创建的对象作为参数传递给它:Encrypted Xml exml= new Encrypted Xml(xdoc);

(3)用函数GetNumbering _Key()取得密钥,用Encrypted Xml对象的Add Key Mapping方法把将要使用的密钥映射到它们的相应名称。

RSA Numbering _Key=GetNumbering _Key();exml_AddKeyName Mapping(“id”,Numbering _Key);

(4)取得要加密的节点元素Xml Node List xnode=xdoc.GetElements ByTagName(‘cardid’);Xml Element _xelement=Xml Element(xnode[0]);

(5)调用Encrypt方法来进行加密,生成加密数据Encrypted Data encrypted NeedEncrypt=exml.Encrypt(xelement,"id");

(6)将原始XML文档的未加密部分换为新的加密数据exml.Replace lement(xelement,encryptedNeedEncrypt,true);

2、XML文档解密过程

(1)装入已加密的XML文件(本例为Encrypted .Xml);

(2)设置密钥一名称映射:RSA Numbering _Key=GetNumbering _Key();exml_AddKeyName Mapping(“Numbering ”,Numbering _Key);

(3)调用Encrypted Xml的DecryptDocument方法解密数据:DecryptDocument()。

Web服务在电子商务等领域有着广泛的应用,它是基于SOAP和WADL等之类的标准协议,以XML格式描述一种标准的数据表示格式和消息格式,对于Web服务安全的实现最好是基于开放的标准协议,而不是依赖于某些专用格式,XML加密规范将安全集成到XML环境中,完全可以作为电子商务中Web服务安全的基础,有着广阔的发展空间。

小知识之IETF

IETF又叫互联网工程任务组,成立于1985年底,是全球互联网最具权威的技术标准化组织,主要任务是负责互联网相关技术规范的研发和制定,当前绝大多数国际互联网技术标准出自IETF。