GML(Geography Madcup Language)是由OGC制定的基于XML的地理信息(包括几何和属性特征)编码、传输、存储的XML语法规范。它提供了一个开放的,用来定义地理空间数据的框架,允许用户开发出基于XML规范的应用子集H1。由于GML数据在描述、存储、传输地理空间信息时具有很强的可理解性,如果不采取安全措施,GML数据在传输过程中很容易被非法用户截获和篡改。

一、基于Web服务的GML数据传输

当前,Web服务是发布、传输地理空间数据的主要方法。这种方法首先对地理空间信息进行基于XML的地理特征编码,然后用抽象规范GML对地理空间信息进行建模、传输和存储,最后实现GML要素层异构数据的获取和服务的互操作,以及GML数据的访问机制WFS (Web Feature Serr ice)。

GML存储形式灵活;不受地理空间信息数据源格式限制,运用GML封装的地理空间数据和图形解释是清楚分离的,即数据的内容和其表现形式是分离的。因此,在针对不同的客户端应用开发时,客户端程序都能运用GML技术传输独立的地理空间信息数据。例如:生成ActiveX或者Java控件嵌入IE中作为瘦客户端应用;直接利用Windows构建胖客户端应用,如Map Info;保持当前GIS数据格式,借助GML进行分布式传输。总之,基于Web服务的GML数据传输极大地提高了WebGIS服务的互操作性,减少了服务器和客户机之间的频繁交互。但由于不同数据源的(异构)数据的共享性和服务的互操作性,也给基于Web服务的GML数据传输带来了一定的安全隐患。

二、基于Web服务的GML数据传输安全机制

Web服务的协议栈如表1所示。

GML数据传输中的加密研究

由Web服务的协议栈可见,Web服务的消息都是通过应用层传输的,安全性由现有的网络层的安全机制来保障。目前,基于Web服务的传输安全机制是安全套接协议层(SSL),加密、签名、访问控制等安全措施都是基于SSL的具体应用。但在SSL中的加密、签名等安全机制并没有充分考虑CML数据传输的特点,即数据量巨大,实时性要求高傈些军用系统)。因此,只依靠SSL并不能有效地保证基于Web服务的GML数据传输安全。主要原因有以下3个。

1)GML数据只是一种面向数据的标记规范,所以它通常总是力求准确清晰地说明数据本身的涵义,即使对于一些非常陌生的GML文件,对手很容易理解其所要表达的内容。从这个意义上讲,GML数据是完全开放的。因此,一旦含有军事信息或商业机密的GML文档被对手得到,泄密几乎是必然的,而且对手也可以对数据进行随意地篡改和伪造。

2)SSL只能对全部的信息进行加密,而不能有选择地对部分信息进行加密。以GML数据编码的地理信息的数据量巨大,但有些情况下并不是GML文档的所有信息都需要加密处理,有时只需要对GML文档的某一部分或单元做加密处理。SSL只能对GML数据的全部信息进行加密,而不能有选择性地对GML数据的核心或敏感部分进行加密。因此,用SSL这种单一粒度的加密方法给GML数据加密带来了实用性差的问题。

3)SSL只能确保点对点(Point to Point)的安全,而无法保障端到端(End to End)的安全。在基于Web服务的GML数据传输中,由地理信息服务的动态分布性和静态分布性可知,GML编码的数据往往要经过一系列的中间节点,每个节点都会对GML数据做一定的处理。虽然SSL可以确保GML数据在节点之间是安全的,但是由于在节点内部GML数据是以明文方式存在的,因此一旦节点被攻击者接管,攻击者就可以查看甚至篡改GML数据。

所以,当前基于Web服务的GML数据的传输机制存在着一定的安全隐患和实用性差的问题。由于GML数据传输的安全机制是一个较为庞大的系统工程,这里仅对GML数据传输的安全机制的核心——加密进行研究。

三、基于GML数据的加密

当前,虽然GCML数据在WebGIS中的应用日益广泛和深入,但基于GML的安全规范标准的制订却还没有进展。对GML数据的加密可以参照XML的安全规范,但GML数据的加密又不同于XML数据和二进制数据包的加密。这主要体现在以下两点:

1)多源异构的地理空间信息转化成GML数据时,其数据量要比转换成二进制格式的数据包大3倍以上,用传统的RAS,MD5等方法对全部二进制格式的数据包加密,会在传输时带来严重的延时性问题;

2)与一般的XML数据不同,GML数据既包含空间信息又包含属性信息,在选择GML数据的加密粒度时,应重点考虑拓扑关系和区域关系的加密和访问控制。比如:提取GML数据空间信息的拓扑关系作为加密的粒度或者作为访问控制的关键点,或者只考虑对完全包含在区域中的对象集进行加密和访问控制,或者考虑对完全包含在区域中的对象集和对象集与区域的交集部分进行加密和访问控制。

1、GML数据的加密算法

GML数据的加密算法可分为两种。一种是对整个GML文档进行加密,根据SSL协议建立安全数据通道,采用对称加密技术(DES,AES等)对传输的GML文档进行加密,很显然只依靠这种算法密钥管理有难度。另一种是对GML文档的一部分,或某一元素加密,即选择GML文档的加密粒度。如前所述,可选择GML数据的空间信息或属性信息、拓扑关系或区域关系作为加密的粒度。这种算法可提高加密传输的效率,且更具灵活性。这里主要对第2种加密算法作以介绍。

GML数据加密后仍以GML格式表示,并且由一个< Encryp tedData>元素或元素来标识。< Encryp tedData>元素用来表示除加密密钥以外所有的加密内容,而< Encryp ted- Key>元素用来表示加密后的数据是一个加密密钥。除了表示加密内容外,GML加密还表示了其他的加密信息,如所使用的加密算法和加密密钥等,这样使应用程序的工作得以简化。针对GML数据比二进制数据包大得多的现实,提出了一种GML数据的加密算法,如图1所示。

GML数据传输中的加密研究

假设发送者A向接收者B传输GML文档,首先选择GML数据加密的粒度。参照XML的安全规范,GML数据的加密粒度可以应用在以下3种情况:

1)GML数据元素的加密。元素加密是对整个元素包括属性数据加密,并使用< Encrypt_edData>元素代替它。

2)GML数据元素内容的加密。内容加密只加密元素的子节点,并且可以用元素代替它。

3)任意数据的加密。

根据GML3.O规范可以选择或设计算法,提出敏感或核心的空间信息或属性信息,以及拓扑关系或区域关系作为加密的粒度。

选择GML数据的加密粒度后;再利用Hash函数对加密的内容进行摘要,用SHA-1或MD5摘要函数,对属性数据中的属性特征数据(布尔型、整型、字符串)或几何数据中的几何要素和拓扑关系进行摘要,提取GML数据的散列值,并放在一个GML文档中。利用A的私钥对摘要后的GML数据完成数字签名,进而实现A发布的GML数据的完整性、不可抵赖性和可鉴别性。鉴于GML数据的数据量大,把数字签名和GML数据用对称加密算法形成GML密文,同时把实现对称加密算法的密钥用B已知的公钥加密。然后对摘要后的GML数据选择加密算法。在对GML文档加密时并没有定义任何新的加密算法,而是构建于现有的算法之上,从而使基于GML数据表达的地理空间数据互操作成为可能。最后把GML密文、加密后的密钥一起发送给B。

如果接收者事先不知道解密的密钥,发送者可以先产生一个密钥并发送给接收者。在传输过程中,可以通过元素中发送,或可以使用从中引用。可先用非对称加密交换对称密钥,再用对称加密交换GML数据。

在一个元素中,提供密钥,提供密文,和都是可选的。发送人和接收入可以事先商定加密方法和密钥。

3、GML数据的解密算法

GML数据的解密算法是其加密算法过程的逆运算,B接收GML数据前要建立和管理好自己的公钥和私钥。针对GML数据的解密,提出了一种如图2所示的算法。

GML数据传输中的加密研究

GML数据的解密过程首先要通过元素获取加密算法。当B接收到GML密文、加密后的密钥后,首先用自己的私钥解密加密后的密钥,取得对称加密算法的密钥;其次利用获得的密钥解密GML密文和GML文档的数字签名;再用事先约定的Hash函数,重新对GML文档的明文进行摘要;然后与已接收的GML明文进行对比,并根据对比的结果选择是否接收。

小知识之ActiveX

ActiveX是一个开放的集成平台,为开发人员、用户和 Web生产商提供了一个快速而简便的在Internet和Intranet 创建程序集成和内容的方法。使用ActiveX,可轻松方便的在Web页中插入多媒体效果、交互式对象、以及复杂程序,创建用户体验相当的高质量多媒体CD-ROM。