基于GML數(shù)據(jù)的地理信息系統(tǒng)的加密

地理信息數(shù)據(jù)在轉(zhuǎn)換成GML數(shù)據(jù)傳輸時,其數(shù)據(jù)量要比轉(zhuǎn)換成二進制格式的數(shù)據(jù)包大三倍以上,用傳統(tǒng)的對全部二進制格式的數(shù)據(jù)包加密會在傳輸時帶來嚴重的延時性問題,而且節(jié)點的內(nèi)部以明文方式存在的,端到端的安全性不能保證。因此,基于GML數(shù)據(jù)文件加密就要對其某些需要處理的特定部分進行加密,使之加密后的文檔在傳輸和存儲狀態(tài)都是安全的。

一、GML數(shù)據(jù)的加密過程

基于GML數(shù)據(jù)的加密,加密后的數(shù)據(jù)仍以GML格式表示。并且由一個<EncryptedData>元素或<EncryptedKey>元素來標識。<EncryptedData>元素用來表示除加密密鑰以外所有的加密內(nèi)容,而<EncryptedKey>元素用來表示加密后的數(shù)據(jù)是一個加密密鑰。除了表示加密內(nèi)容外,GML加密還表示了其他的加密信息,如所使用的加密算法和加密密鑰等,這樣使應(yīng)用程序的工作得以簡化。針對GML數(shù)據(jù)比二進制數(shù)據(jù)包大得多的現(xiàn)實,GML數(shù)據(jù)的加密過程可以如圖所示。

基于GML數(shù)據(jù)的地理信息發(fā)布系統(tǒng)的加密研究

對GML數(shù)據(jù)的加密首先選擇加密的粒度,即數(shù)據(jù)加密的范圍,GML數(shù)據(jù)的加密粒度可以應(yīng)用在以下幾種情況:

1、元素及其內(nèi)容的加密;

2、GML數(shù)據(jù)元素內(nèi)容的加密;_任意數(shù)據(jù)的加密。

元素加密是對整個元素包括屬性數(shù)據(jù)加密,并使用<EncryptedData>元素代替它。內(nèi)容加密則只加密元素的子節(jié)點,并且可以用<EncryptedData>元素代替它。而傳統(tǒng)的加密技術(shù)只能加密整個文檔,不能按需求對文檔進行選擇性的加密。

在上圖的加密過程中,假設(shè)的發(fā)送者A向接收者B發(fā)布地理信息。

首先選擇GML數(shù)據(jù)的加密粒度,再利用Hash函數(shù)對加密的內(nèi)容進行摘要,利用A的私鑰對摘要后的GML數(shù)據(jù)完成數(shù)字簽名,進而實現(xiàn)發(fā)送者A發(fā)布的地理環(huán)境信息的完整性、不可抵賴性和鑒別。

然后,鑒于GML數(shù)據(jù)的數(shù)據(jù)量大,把數(shù)字簽名和GML數(shù)據(jù)用對稱加密算法形成GML密文,同時把實現(xiàn)對稱加密算法的密鑰用接收者B已知的公鑰加密。最后把GML密文、加密后的密鑰一起發(fā)送給接收者B。

發(fā)送人和接收人可以事先商定加密方法和密鑰,如果接收者事先不知道解密的密鑰,發(fā)送者可以先產(chǎn)生一個密鑰并發(fā)送給接收者。在傳輸過程中,可以通過<EncryptedKey>對象或是密鑰管理對密鑰進行加密保護,也可以在加密數(shù)據(jù)的<KeyInfo>元素中發(fā)送,或可以使用<RetrieveMethod>從<KeyInfo>中引用。

二、GML數(shù)據(jù)的解密過程

GML數(shù)據(jù)的解密過程是其加密過程的逆運算,接收者B接收地理信息前事先要建立和管理好自己的公鑰和私鑰,解密過程如下圖所示。

基于GML數(shù)據(jù)的地理信息發(fā)布系統(tǒng)的加密研究
當(dāng)接收者B接收到GML密文、加密后的密鑰后首先用自己的私鑰解密加密后的密鑰取得對稱加密算法的密鑰。再利用它解密GML密文和GML文檔的數(shù)字簽名,然后用事先約定的的Hash函數(shù),重新對GML文檔的明文進行摘要。接下來和已接收的GML明文進行對比,最后根據(jù)對比的結(jié)果選擇是否接收。

三、應(yīng)用實例

這里以某城市模型(江東市)為例編寫的GML文檔進行說明。為簡單起見,假設(shè)這個城市模型中只包含了一個屬性信息&&&流經(jīng)此市的河流。我們可以由WebGIS數(shù)據(jù)庫利用ArcSDE工具或者編程輸出GML文檔,當(dāng)然也可以直接讀取文件產(chǎn)生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>流經(jīng)江東市的河流</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數(shù)據(jù)加密

如果加密的數(shù)據(jù)是整個GML文檔,就是將整個GML文檔選擇一種或組合使用加密算法使之加密,并將加密后的數(shù)據(jù)用加密元素進行封裝。根據(jù)4__1GML數(shù)據(jù)的加密過程,<EncryptedData>表示數(shù)據(jù)加密結(jié)果,它包含或標識了密文數(shù)據(jù)。<EncryptionMethod>元素表示加密算法,<KeyInfo>元素表示加密使用的公鑰信息<CipherData>元素包含或指示了密文數(shù)據(jù),記錄真正的加密后密文信息。則整個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文檔部分內(nèi)容加密

如果在GML文檔傳輸中,只對其屬性信息流經(jīng)此市的河流加密,就可利用<EncryptedData>元素的Type屬性,來說明加密的內(nèi)容是整個文檔還是文檔的部分內(nèi)容或單個元素,對文檔的部分內(nèi)容屬性信息加密如下:

<?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(開放式地理信息系統(tǒng)協(xié)會)于1999年提出,并得到了許多公司的大力支持,如Oracle、Galdos、MapInfo、CubeWerx等。GML能夠表示地理空間對象的空間數(shù)據(jù)和非空間屬性數(shù)據(jù)。