地理信息数据在转换成GML数据传输时,其数据量要比转换成二进制格式的数据包大三倍以上,用传统的对全部二进制格式的数据包加密会在传输时带来严重的延时性问题,而且节点的内部以明文方式存在的,端到端的安全性不能保证。因此,基于GML数据文件加密就要对其某些需要处理的特定部分进行加密,使之加密后的文档在传输和存储状态都是安全的。

一、GML数据的加密过程

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

基于GML数据的地理信息发布系统的加密研究

对GML数据的加密首先选择加密的粒度,即数据加密的范围,GML数据的加密粒度可以应用在以下几种情况:

1、元素及其内容的加密;

2、GML数据元素内容的加密;_任意数据的加密。

元素加密是对整个元素包括属性数据加密,并使用<EncryptedData>元素代替它。内容加密则只加密元素的子节点,并且可以用<EncryptedData>元素代替它。而传统的加密技术只能加密整个文档,不能按需求对文档进行选择性的加密。

在上图的加密过程中,假设的发送者A向接收者B发布地理信息。

首先选择GML数据的加密粒度,再利用Hash函数对加密的内容进行摘要,利用A的私钥对摘要后的GML数据完成数字签名,进而实现发送者A发布的地理环境信息的完整性、不可抵赖性和鉴别。

然后,鉴于GML数据的数据量大,把数字签名和GML数据用对称加密算法形成GML密文,同时把实现对称加密算法的密钥用接收者B已知的公钥加密。最后把GML密文、加密后的密钥一起发送给接收者B。

发送人和接收人可以事先商定加密方法和密钥,如果接收者事先不知道解密的密钥,发送者可以先产生一个密钥并发送给接收者。在传输过程中,可以通过<EncryptedKey>对象或是密钥管理对密钥进行加密保护,也可以在加密数据的<KeyInfo>元素中发送,或可以使用<RetrieveMethod>从<KeyInfo>中引用。

二、GML数据的解密过程

GML数据的解密过程是其加密过程的逆运算,接收者B接收地理信息前事先要建立和管理好自己的公钥和私钥,解密过程如下图所示。

基于GML数据的地理信息发布系统的加密研究
当接收者B接收到GML密文、加密后的密钥后首先用自己的私钥解密加密后的密钥取得对称加密算法的密钥。再利用它解密GML密文和GML文档的数字签名,然后用事先约定的的Hash函数,重新对GML文档的明文进行摘要。接下来和已接收的GML明文进行对比,最后根据对比的结果选择是否接收。

三、应用实例

这里以某城市模型(江东市)为例编写的GML文档进行说明。为简单起见,假设这个城市模型中只包含了一个属性信息&&&流经此市的河流。我们可以由WebGIS数据库利用ArcSDE工具或者编程输出GML文档,当然也可以直接读取文件产生GML文档。下面就是江东市城市模型的GML文档。

?mlversion="1.0"encoding="BIG5"?

CityModelxmlns="http://www.opengis.net/examples"xmlns:

gml="http://www.opengis.net/gml"xmlns:xlink="http://www.w3.org/1999/xlink"<gm:

lname>江东市/gm:lname><cityMember><River><gm:

ldescription>流经江东市的河流</gm:ldescription><gm:

lname>淡水河/gm:lname><gm:lcenterLineOf><gm:

lLineStringsrsName="http://www.opengis.net/gml/srs/epsg.xm#l4326">gm:

lcoord><gm:lX>0</gm:lX><gm:lY>50</gm:lY></gm:lcoord><gm:lcoord>gm:

lX>70</gm:lX><gm:lY>60</gm:lY></gm:lcoord><gm:lcoord>gm:

lX>100</gm:lX><gm:lY>50</gm:lY></gm:lcoord>

/gm:lLineString></gm:lcenterLineOf></River></cityMember>

1、于整个文档的GML数据加密

如果加密的数据是整个GML文档,就是将整个GML文档选择一种或组合使用加密算法使之加密,并将加密后的数据用加密元素进行封装。根据4__1GML数据的加密过程,<EncryptedData>表示数据加密结果,它包含或标识了密文数据。<EncryptionMethod>元素表示加密算法,<KeyInfo>元素表示加密使用的公钥信息<CipherData>元素包含或指示了密文数据,记录真正的加密后密文信息。则整个GML文档加密如下:

<?xmlversion="1.0"encoding="BIG5"?><EncryptedDataType=_httP://www.isi.edu/media2types/text/xml_>

<EncryptionMethodAlgorithm=(httP://www.w3.org/2001/04/xmlenc!tripledes.cbc(>

<ds:Keyinfoxmlns:ds=(httP://www.w3.org/2000/09/xmidsig!()

<Keyname>Citymane</Keyname></ds:KeyInfo><CipherData>

<CipherValue>FEOJFJ9034830DJNFHO2IJIKKNISD</Ci.pherValue>

</CipherData>

</EncryptedData>

2、GML文档部分内容加密

如果在GML文档传输中,只对其属性信息流经此市的河流加密,就可利用<EncryptedData>元素的Type属性,来说明加密的内容是整个文档还是文档的部分内容或单个元素,对文档的部分内容属性信息加密如下:

<?xmlversion="1.0"encoding="BIG5"?><CityModelxmlns="http://www.opengis.net/examples"xmlns:

gml="http://www.opengis.net/gml"xmlns:xlink="http://www.w3.org/1999/xlink"<gm:

lname>江东市</gm:lname><cityMember><River>
<EncryptedDataType=(httP://www.w3.org/2001/04/xm21enc#Content>

<CipherData><CipherValue>RFGR4552FDSG32455FDSFSFGSE1EWFS</CipherValue>

</CipherData></River>

小知识之GML

GML (Geography Markup Language)即地理标识语言,它由OGC(开放式地理信息系统协会)于1999年提出,并得到了许多公司的大力支持,如Oracle、Galdos、MapInfo、CubeWerx等。GML能够表示地理空间对象的空间数据和非空间属性数据。