基于XML的数据安全保护技术

时间:2022-08-07 03:59:19

基于XML的数据安全保护技术

[摘要] 在面向Internet环境的数据库安全方面,该文主要研究了内涵级的XML数据安全保护技术。在XML访问控制方面,改进了现有模型中授权主体的定义范畴,同时将请求评估模块和决策执行模块显式分开,增加了定制安全策略和安全规则的灵活性和通用性。探讨了利用XML对文档进行数字签名和对签名进行校验,以及对XML文档加解密的方法,并利用这些技术实现了一个基于Java通用平台的xml数字签名和加密原型系统。

[关键词] XML 数据保护技术 数字签名

1 引言

伴随Web应用规模的扩大和层次的深入,作为数据存贮、查询、更新、分析载体的数据库系统,在存储模式、体系结构等方面也随之发生变化,逐步走向面向Internet的系统整合、数据集中。可扩展标记语言(eXtensible Markup Language,XML)是目前最热门的在World Wide Web上保存和传递信息的语言。本文利用XML语言本身的特性,如基于元素、可扩展、表现与内容分离等优点与传统的安全技术的结合,使这些传统的安全技术如签名、加密、访问控制等具有更细致的数据保护粒度和更丰富灵活的语义特征。研究内容包括XML访问控制策略与模型、元素级的XML数字签名技术和XML加密技术的实现等。

2 基于XML的访问控制技术

基于XML的访问控制的研究目标在于,为XML数据文档提供一个成熟的访问控制模型、策略和规范,使得安全管理员能够定制系统的安全策略并控制XML数据可以按照预想的方式展现在数据请求者面前。

2.1 改进的XML访问控制模型与策略

我们的访问控制模型中的主体XML访问控制处理器(XML Access Control Processor,XACP)包含两个主要的模块:请求评估模块(Request Evaluation Module,REM)和决策执行模块(Decision Execution Module,DEM)。当用户给出某个访问请求要求对目标XML文档执行某种动作的时候,XACP将按照以下步骤做出反应:

(1) 用户提交访问请求,其中包括用户的身份标识、访问对象(文档或元素)、以及预期动作;

(2) 请求评估模块检查策略库中的访问规则,生成对该请求的访问决议;

(3) 决策执行模块执行确定的访问决议,如果访问决议中用户对所访问资源的请求操作为“更新”、“创建”或“删除”等写操作,则修改相应的目标文档;

(4) 当访问决议中用户对所访问文档请求的操作为“读”时,生成该文档对象的访问视图返回给用户,同时将此视图保存到缓存。

图1描述了访问控制系统的构架和上述过程,其中XML用户视图的计算方法将在以下作详细的描述。

2.2 请求者视图计算方法

将访问控制策略施加于授权主体和授权客体上,从本质上是一种对客体对象进行的投影操作(projection)。投影的结果是该主体(即访问请求者)根据授权规则所能访问的节点的集合。因此对每个请求者(requester)而言,授权决策模块最后都应该提供一个针对该请求者的XML文档的视图(view)。如果将XML视为树型结构的话,那么这样的一个视图就是对该树进行剪枝操作后的一颗子树。我们给XML文档树的每个节点n附加一个8元组的标签:<LXHn, RXHn, Ln,Rn, LXn,RXn,LSn,RSn>其中的L代表Local,R代表Recursive,X代表Xml schema,H代表Hard,S代表Soft。

从元组中元素的排列顺序很容易看出,元素是按照优先级从高到低的顺序排列的。本地硬模式LXHn有最高优先级,递归软授权RSn优先级最低。元组中的每个元素代表该类型的访问许可信息的符号,其取值值域为{‘+’,‘-’,‘ε’},分别代表“肯定许可”,、“否定许可”和“不确定许可”。我们通过给文档树中的节点作标签(document tree labeling)的方法给出了计算用户视图的过程和相应的算法,如图2所示。

在上述的用户视图计算过程中,首先,Initial Label根据策略库中的各条授权规则设置每个节点的8元组的标签;然后,Set Label过程根据每个节点及其父节点的元素标签更新自己的标签,从根节点开始对XML树进行自顶向下的顺序(preorder)遍历;Get Final Label过程计算每个节点标签中第一个非空的元组元素作为其最终标签(因为8元组标签按优先级从高到低排序);最后,将那些最终标签为‘-’或‘ε’的节点剪枝(‘ε’节点是否删除取决于全局策略是开放的还是封闭的),最终得到用户请求的XML文档的可访问视图。

3 XML数字签名及加密的研究与实现

随着信息技术的飞速发展和网络应用的日益普及,越来越多的事务以网络为媒介采用电子化方式进行处理,比如远程教育、电子商务、电子银行、电子政务等等。而安全问题是这些应用能否成功的关键问题。可扩展标记语言XML由于其自身的优点(基于元素的概念、可扩展性、表现与内容分离以及可表示复杂的结构等)而逐渐成为一种在WWW上进行信息描述和交换的标准。但XML仅是一种语言,它自身无法保证基于它的应用的安全性。因此,建立一个安全的应用平台便成为其应用的前提和基础。一般而言,所面临的安全威胁主要有以下几类:非法访问、非法篡改、假冒伪造、拒绝服务、抵赖等等。要抵御上述安全威胁,一个安全的基于Web的应用平台必须满足如下安全需求:

(1) 机密性(Confidentiality)――其他任何人都不能访问或复制该数据;

(2) 完整性――该数据从发送者到达接收者的过程中未被更改;

(3) 身份验证――对发送者进行身份鉴定;

(4) 抗抵赖――发送者不可否认该文档确由其发送,也不能否认文档的内容。

3.1 XML数字签名的生成和校验

一份XML数字签名的生成包括以下几个基本步骤:

(1) 决定准备被签名的数据(或资源);

(2) 对每个要签名的资源进行一系列变换操作最后计算其摘要值;

(3) 收集各个参考对象(Reference)元素;

(4) 对整个<SignedInfo>元素进行规范化处理后签名;

(5) 添加密钥信息;

(6) 将上述结果组装到一个<Signature>元素中。

图3描述了对两个文档进行签名的数据流程,其中包括了对签名资源的变换过程和对<SignedInfo>元素的规范化处理过程。

对XML数字签名的校验包含两个必需的步骤,分别是签名校验(SignatureValidation)和参考检验(Refenrence Validation)。

签名校验就是对<Signedinfo>元素签名的校验。校验过程为:对<SignedInfo>进行规范化处理,然后用<Signature Method>指定的算法重新计算其摘要值,并用<KeyInfo>中或已知的签名者公钥来计算最后的签名值。如果该值与<SignatureValue>中的数值吻合,则这一步骤的校验通过。

参考检验的过程,则是先对<Referenee>URI属性中的签名对象实施<Transform>中指定的变换算法,然后利用<DigestMethod>指定的单向哈希算法计算每个参考的摘要值,并与<DigestValue>中的数值进行比较,如果对所有的参考对象该值都是吻合的,则参考检验成功。只有当上述两个步骤都成功时,该XML数字签名的校验才算通过。

3.2 XML文档的加密

我们可以将XML文档整篇加密,然后安全地发送给一个或多个接收方,这是SSL或TLS的常见功能,但XML文档加密主要研究的是如何对同一文档的不同部分进行不同处理的情况。XML加密定义了一个对明文加密产生密文以及对密文解密恢复明文数据的过程。明文可以是任意文件,如一篇完整的XML文档或是XML文档的一个小段落,但只允许有两种形式的XML文档段落:XML元素或XML元素的内容。<EncryptedData>元素包含了三个子元素:<Encrytion Method>定义了加密的算法、<KeyInfo>提供密钥、<Cipher Data>提供密文。<EncryptionMethod>和<KeyInfo>都是可选的,发送人和接收人可以事先商定加密方法和密钥。如果接收者事先不知道解密的密钥,发送者可以先产生一个密钥并发送给接收者。在传输过程中,可以通过EncryptedKey对象或是密钥管理(使用<AgreementMelhod>)对密钥进行加密保护,也可以在加密数据的<KeyInfo>元素中发送,或使<RetrievalMethod>从<KeyInfo>引用。以下代码给出了XML加密语法和处理的构成元素:

<EncryptedData Id ? Type ? MimeType ? Encoding?>

<EncryptionMethod/>?

<ds:KeyInfo>

<EncryptedKey>?

<AgreementMethod>?

<ds:KeyName>?

<ds:RetrievalMefhod>?

<ds:*>?

</ds:KeyInfo>?

<CipherDala>

<ciphervalue>?

<CipherReference URI?>?

</CipherData>

<EncryptionProperties>?

</EncryptedData>

我们可以看到,XML加密语法的核心元素是<Encrypted Data>元素,该元素与<EncryptedKey>元素一起用来将加密密钥从发起方传送到已知的接收方,<EncryptedData>是从<EncryptedType>抽象类型派生的。要加密的数据可以是任意数据、XML文档、XML元素或XML元素内容,加密数据的结果是一个包含或引用密码数据的XML加密元素。当加密元素或元素内容时,<EneryptedData>元素替换XML文档加密版本中的该元素或内容。当加密的是任意数据时,<EncryptedData>元素可能成为新XML文档的根,或者可能成为一个后代元素。当加密整个XML文档时,<Enerypted Data>元素可能成为新文档的根。此外,<EncryptedData>不能是另一个<EncryptedData>元素的父代或后代元素,但是实际加密的数据可以是包括现有<EncryptedData>或<Encrypted Key>元素的任何内容。我们系统中的加密模块主要实现了DESede和RSA算法对XML文件的加密,用DESede可以对XML文件实现对整个文件、元素和元素内容的加密。由于用RSA算法加密所花的时间要比DESede多得多,而且BouncyCastle提供的RSA算法对明文的长度有一定的限制,所以对RSA算法只实现了XML文件的单元素或元素内容的加密。

3.3 实现技术

我们研究的X-Sig系统采用Java编程,主要实现了三大功能模块:密钥管理模块、数字签名模块和加解密模块。分别包括:生成和存储公开密码体制的密钥对及自签名证书、生成和存储对称密码体制的单密钥,对XML文件或元素的签名、校验、加密以及解密等操作。签名之前如果没有密钥的话,要先生成用于签名加密的密钥,对称密码体制和公开密码体制的密钥分别放在不同的密钥库中。签名分为detached、enveloping和enveloped签名,对于被签署对象为XML文件来说,这三种签名都可以生成,而且可以对其中的元素进行签名。而对于非XML文件来说,则只可以生成detached形式的签名。加密分为对整个XML文档的加密,对元素的加密和对元素内容的加密,系统整体模块如图4所示。

X-sig数字签名模块的主要流程描述如下:

(1) 选择要签名的文件;

(2) 接收用户输入的各参数;

(3) 按照是否进行Enveloped形式的签名决定是否生成新的DOM文档;

(4) 设置id值;

(5) 根据所选签名算法生成TemplateGeneralor实例并设置属性;

(6) 根据用户输入选择何种方式注册Reference实例(分离式,嵌入式,封装式);

(7) 调用getSignatureElement()生成签名的根元素;

(8) 根据用户提供的密码取出密钥库中的密钥和证书信息;

(9) 调用SignatureContext的sign()函数进行签名;

(10) 生成keyinfo元素并插入到签名元素中;

(11) 将签名保存为指定的XML文档。

4 总结

本文研究了Internet环境下基于XML的数据安全问题,包括XML的访问控制、数字签名与加密技术的研究,提出了基于XML的数据安全研究的论题。接着讨论了基于XML访问控制模型中的授权主体和授权客体、访问授权规范以及请求者视图的计算算法,提出了一个改进的XML访问控制模型框架,将请求评估模块和决策执行模块显式分开,使访问控制处理器不仅可以处理对XML文档的“读”请求和“写”请求,而且可以根据需要增加一些“临时”的授权动作。我们比较了XML数字签名与传统的数字签名技术的不同,阐述了利用XML对文档进行数字签名和对签名进行校验、以及对XML文档加解密的基本方法,探讨了基于Java的通用平台的XML数字签名和加密原型系统X-sig的实现技术。

参考文献

[1] 朱虹,冯玉才,王元珍等. 多级安全空间数据库的语义[J]. 小型微型计算机系统, 2001,(9).

[2] 王元珍,汪皓. 基于信息流的存储隐通道标识方法研究[J]. 小型微型计算机系统, 2001,(4).

[3] 朱虹,冯玉才. 隐通道识别技术研究[J]. 计算机科学, 2000,(5).

[4] 冯玉才,周淳,朱虹. 安全DBMS中存储隐通道审计[J]. 小型微型计算机系统, 2001,(5).

[5] 王晓京,何永忠. 用XML实现电子公文的签名和加密[J]. 计算机应用, 2002,(8).

上一篇:论产业集群与企业技术创新的互动关系 下一篇:重力式挡土墙初探