XML在傳統制造業B2B供應鏈中的應用分析(五):

XML數據傳輸的安全加密第二部分

郭路
Technical Manager
2001 年 6 月

布式多層系統是目前在企業級大中型應用中最流行的架構,而XML則是計算機數據處理的最新技術,強強聯手能產生多大的化學效應;作爲新的數據處理標準,XML的通用性與開放性勿庸置疑,不過對於傳統成熟的開發模式,XML的價值是在於錦上添花,還是將取而代之;作爲一名開發人員,我們相信通過XML可以整合與優化系統的總體性能,爲了實現這個目標,在設計中要採取哪些步驟,又需要注意哪些誤區……本篇就B2B供應鏈系統應用模型的設計爲實例,試圖爲上述疑問尋求解答。

XML數據僞編譯
僞編譯是計算機系統中針對解釋性程序語言源代碼保密的一種常用技術,文本格式的源代碼經過僞編譯成爲二進制機器碼,並可被特定的程序讀懂。僞編譯是一種較爲簡單的數據保密方法,與祕鑰加密不同,它不存在關鍵字形式的加密解祕鑰匙;應用程序可以讀取二進制碼XML數據的任意部分,而無需先將整個文檔解密。我們知道,一個XML文檔在內存中可表示爲一段用Unicode格式編碼的字符串,而僞編譯的基本思路,就是改變一般XML數據明文的特點,用一種新的編碼方法將XML文檔保存在存儲器中。XML數據的僞編譯通常有兩種方式:

  1. 基於文本字符串方式,即將整個XML文檔簡單的看作一字符串,逐個字符進行僞編譯。XML的默認字符編碼方式是Unicode,在IANA(互聯網數字化專職機構)中註冊過編碼方案的字符通常都可用Unicode表示,因此,我們可以Unicode爲藍本,對字符的存儲字進行多次組合的反碼、補碼、加減、循環移位等處理,得到僞編譯後的XML文檔字符,此時用一般編輯器打開XML目標文檔看到的是亂碼。舉例而言, 一個簡單的僞編譯流程如下圖所示:

    此時接收端只需調用一個反編譯模塊ReTransf(E),便可直接對僞編譯XML文檔進行處理。
  2. 基於XML文檔結構方式,此方法通常須結合祕鑰加密或字符串僞編譯使用。由於XML文檔採用標準的樹形結構,因此我們可以將XML標記信息部分以索引樹格式保存在存儲塊頭部,而將數據部分保存在存儲塊後部。標記部分可以用一結構數組表示,每個數組元素中應包含標記的內容、位置及對應XML數據的相對地址指針。由於XML標記記載了XML源文檔的結構及文字內涵的信息,是人們破讀XML文檔的主要憑藉,並且XML標記部分的長度往往較短(小於XML的數據部分),因此可對XML標記部分進行高強度加密。由於通過前後兩個標記元素的相對地址可得到單個標記對中的完整數據內容,所以不僅可對XML數據部分按字符串方式僞編譯,也可將每段完整的標記數據內容視爲以位爲單位的一段二進制串,將此二進制串作爲一整體進行反碼、補碼、加減、循環移位等處理。

基於XML文檔結構僞編譯較字符串僞編譯其保密度要高得多,這是因爲單純的字符串僞編譯無法改變XML源文檔中相同字符的出現頻率及編譯結果,因此通過明文攻擊很容易破譯其算法。

通常僞編譯的算法是靜態固定的,目標文檔的保密性基於保持算法的祕密,我們一般稱之爲Restricted(受限的)算法。此時當算法一旦泄漏,或對於程序的設計者,目標文檔是完全透明的。需要指出的是,僞編譯也可是動態的,即算法動態生成。舉例而言,設反碼爲0,補碼爲1,前移爲2,後移爲3,任何時候不能存在"00"、"11"、"23"、"32"組合,則可以用一數字串如"0120313020"表示一個具體的僞編譯算法組合,此數字串的長度越長,保密度越高,實際組合的次序可隨機生成。顯然,我們也可以將這種動態的僞編譯視作一種特殊的對稱算法,此時數字串便成了加密解密的祕鑰。

與祕鑰算法相比,僞編譯的加密強度要低好幾個數量級,因此通常僅被用於非密級數據的加密。使用僞編譯的一個前提是被加密數據的安全週期很短,由於計算機中軟件實現僞編譯的加密解密速度極快(沒有延時),並且佔用系統資源極少,因此對於一些交互頻繁,實時性要求較高的應用而言還是具有實用性的。在B2B供應鏈中,僞編譯主要用於後臺系統,如庫存管理、物料需求管理、運輸管理等應用中。

系統安全的輔助策略
爲了保護供應鏈系統中的XML數據安全,除了上述幾種主要的加密方法外,合理選擇一些其它輔助的安全策略也是非常重要的,以下是關於一些常見策略的介紹。

進程的訪問令牌。通常在供應鏈系統中,數據的安全主要是通過控制用戶口令來實現的,也就是說,只要具有了操作某個進程的用戶權限,通過網絡中任何一臺計算機,都可以經數據庫的用戶校驗訪問應用層,這樣做固然有其靈活方便的一面,不過,也有可能帶來安全方面的隱患。例如,爲了防止協同作假,通常銷售與採購之間是不能數據交叉的,一個採購計劃員在銷售部的計算機上發佈訂單就是違規操作,同樣,採購員A在採購員B的計算機上修改訂單也是不允許的,然而,僅通過用戶口令根本無法保證這點。爲此我們可以安裝每個客戶端時在其計算機上生成唯一的令牌,所謂令牌通常是以用戶身份,機器ID(如網卡號),所調用應用層進程ID號爲參數得出的一個客戶端祕鑰,由於令牌的生成要調用應用層進程,因此客戶端的安裝過程必須經過服務器檢驗。客戶端每次要調用應用層進程時,都要將該令牌作爲身份認證傳給該進程,而當其接受應用層的XML數據時,客戶端程序也都會校驗發送數據的應用層進程ID號,只有當其與本地令牌相符纔會顯示。

文檔的數字簽名。在XML數據的使用過程中,爲了減小文檔冗餘,許多DTD、Schema、XSLT文件都以外部形式存在,不僅沒有保密,而且在調用過程中很容易被僞造。舉例而言,一個200子元素在WEB頁中應該被輸出爲 200元,現在將格式化的XSLT文件稍加修改,輸出的格式有可能變成 200美元,在整個過程中,肇事者也許都無法接觸到XML目標數據,卻仍可以造成巨大的破壞。爲了防止這種現象出現,我們要求確保這類外部文件在傳輸過程中沒有被篡改,然而,由於許多DTD、Schema、XSLT的調用都是文件內通過URI直接完成的,因此不能採用加密的方法。此時我們通過哈希函數爲每個外部文件生成一個摘要(所謂哈希函數是一種單向散列函數,它可以將每個長文件單向映射爲唯一定長的短字符串即摘要,將此摘要加密便得到文檔的數字簽名),可以將該數字簽名放在數據庫中或網絡中,要調用網絡中某外部文檔時可通過相應的數字簽名驗證其真實性,由於數字簽名較短,因此可以和XML文件一起傳遞,加密數字簽名的祕鑰通常保存在數據庫中。數字簽名的實際應用相當廣泛,事實上,對於絕大多數有可能收到僞數據的情況,都可通過數字簽名的方法來解決。除了本節所介紹的內容,在前面所說的網絡安全協議如SSL、SET中,也都嵌入了數字簽名的方法。

XML數據的合法有效期。通常,任何數據都有一定的生存週期,或者僅在某些時段是對用戶可見的。假設某工廠規定每天上午進行採購計劃的訂單分解,中午審覈,下午發送,即當天的訂單發送後,相關的物料需求記錄便已失效。而第二天要分解的物料需求雖然在當天夜裏就已產生,但要到第二天早晨7:00纔開始生效,可以被採購計劃員進行訂單分解。這樣做的主要目的是將有關數據的操作限定在指定時段才能執行。通常,大部分的有效期校驗都在數據庫端進行,不過當XML數據存在於應用層緩衝中時,便需通過XML數據中嵌入的有效時間標記來進行數據過濾。另外,通過在XML數據中加入時間標記(),可以防止數據的二次接收,假設現在我們在應用層對產生的每張訂貨單都加上生成的時間標記,然後發送到生產計劃部進行任務分配,現有訂貨單A 因爲網絡問題,向生產計劃部發了兩遍,由於兩張訂貨單上的時間相同,因此生產計劃子系統會自動將後一張過濾掉。

數據交互的點對點跟蹤。客戶端通過應用層與數據庫聯繫,數據庫對每次連接都應記錄流水操作(記錄連接的客戶名,計算機,時間,所查詢的數據等信息),而有些處理不會反映到數據庫中,因此數據庫中的流水不會對這類操作有所記錄。有時爲了提高應用系統的性能,我們會在應用層設置數據緩衝,存放最近的常用數據,此時當客戶端與應用服務器發生數據請求或交換時,應用層就應負責記錄下連接信息,並定時彙總到數據庫中。同樣,客戶端對於每次數據請求與交換也都會在本地留有記錄,這樣做的目的並不是爲了直接將數據加密,而是萬一有事故發生後可以通過比較流水來查找問題的癥結。如數據庫中顯示用戶A在3月份共登陸了30次,而用戶A的客戶計算機上顯示其3pu'huo僅登陸28次,除非用戶A有權利在其它計算機上登陸,否則就有可能是其他人惡意假冒身份。

客戶端安裝節點控制。通常,每個子系統的客戶端安裝節點數都是限定的,其限定數可以由管理員在數據庫中設置。如某工廠的採購計劃員一共有八個,那麼,在數據庫中就可以設採購訂單子系統的安裝節點數爲八個,每安裝一個客戶端,數據庫中的相應記錄減一,當計劃員人數改變時,數據庫中相應字段的最大值也應改變。

選擇合適的防火牆。這是最基本的安全保護措施,雖然它與我們的開發並沒有什麼直接的關聯,但卻是必不可少的一關。不管你在設計過程中關於數據的安全保密考慮得有多周全,如果實際應用時忘了使用防火牆,那麼你所作的一切努力就都是白費心機。因爲哪怕一個最簡單的特洛伊木馬也能將你計算機中曾發生過的一切記錄下來,並傳給遠程的偷窺者,要知道,目前絕大多數的企業內部網都有至少一個外部接口,更何況那個監視你計算機端口或投放木馬的人很可能就是你身邊的某個同事。使用防火牆的主要目的就是爲了預防外部計算機對本機端口的偵聽,過濾惡意的數據包傳遞,對不合理的計算機操作及有木馬嫌疑的軟件行爲進行報警。目前市場上較爲成熟的防火牆軟件有Check Point公司的FireWall-1 3.0;Elron Software公司的Elron Firewall/Secure 32OS;思科公司的PIX FireWall 4.1;微軟公司的ISA(Internet Security and Acceleration) Server 2000等。

有關數據安全的保護策略還有很多,比如與實際操作系統及網絡架構、數據庫架構的安全策略相結合,本文所列舉的僅是冰山一角,有興趣者可以到 http://ww.security.org(國際安全研究聯盟)http://www.vertarmy.org(綠色兵團)http://www.cns911.com(中國網絡安全響應中心)等網站上了解更多信息。

XML安全的標準及網絡資源等
以下是一些有關XML數據安全技術標準、工具的簡介及網絡資源鏈接。

  1. XDS:XDS是由W3C和IETF聯合制定的基於XML的互聯網數字簽名規範,在XML-DSig工作組中有來自W3C、MIT、IETF的安全技術專家,目前他們正在加緊對XDS草案的修改工作,有關XDS技術的詳細描述可查看網址 http://www.ietf.org/rfc/rfc2807.txt
  2. W3C XML Encryption
  3. WG:正如你所看到的,這也是W3C下的一個工作小組,其任務就是負責制定XML數據的加密與解密標準,該小組的主頁爲 http://www.w3.org/Encryption/2001,目前XML Encryption最新版本的草案已於2001年4月21日分佈,有關該草案的建議與疑問可發信到 [email protected]聯繫。
  4. XKMS:XKMS是由VeriSign、微軟、webMethods共同制定的一種,它遵循XDS數字簽名標準和XML加密草案,其主要功能包括公鑰的登記、發佈、撤銷、驗證、管理、查詢等,XKMS由兩部分組成:X-KISS(XML祕鑰信息服務規範)和X-KRSS(XML祕鑰登記服務規範),其簡單描述如下:
    • X-KISS定義了一種用於驗證互聯網上公鑰(包含在XML-SIG子元素中)合法性的服務實現規範,使用X-KISS,一個XML應用可通過互聯網委託某可信第三方(CA)處理有關簽名認證、數據加密的服務,包括提供其它客戶的加密公鑰,驗證某公鑰合法性等;
    • X-KRSS則定義了一種可通過互聯網接受公鑰登記、撤銷、恢復的服務規範,一個XML應用建立了一個祕鑰對,可通過X-KRSS協議將公鑰部分及其它有關本人身份的信息發給可信第三方登記。

    XKMS的制定遵循如下基本原則:
    • 其語法規範與XDS數字簽名標準及XML加密草案相兼容;
    • 客戶端只要求使用標準的XML工具(支持XML數字簽名與加密);
    • 不需要ASN.1工具;
    • 公鑰狀態信息(如已撤銷)的管理對於客戶端是透明的;
    • 最小化客戶代碼與複雜度,不要求與X.509及PKI兼容。

    XKMS規範是使用XML Schema定義的,其默認的通訊協議爲SOAP V1.1,其服務與消息的語法定義遵循WSDL V1.0(互聯網消息定義語言),也可遵循其它向上兼容的標準。2000年9月27日Verisign、微軟、Webmethods發佈XKMS的1.0版草案並正式提交給W3C,預計到2001年底可以通過使用。有關XKMS的詳細內容可到 http://www.verisign.com/rsc/wp/xml/xkmshttp://www.w3.org/TR/xkms下載其白皮書與技術規範。
  5. S2ML:S2ML是第一個基於XML實現互聯網安全電子商務的工業標準,其規範的制定成員目前包括W3C和OASIS。S2ML是完全開放免費的,使用S2ML可以實現顧客、供應商、銷售商、合夥人之間認證、授權、特徵摘要等信息的安全交換。S2ML是與工作流平臺無關的,可用於Biztalk、EbXML等框架中,S2ML同樣是與網絡協議無關的,它可與JMS、HTTP、SOAP等多種協議協同工作。
      S2ML包括兩個Schema(Name Assertion 和 Entitlement)和一個基於XML的握手協議(服務的請求/相應),並由此提供一種架構可以在互聯網上共享安全信息,實現安全認證、授權等服務,有關Name Assertion和Entitlement的簡單描述如下:
    • Name
    • Assertion(名稱聲明):當一次認證成功後會生成一個名稱聲明,一個S2ML聲明(Assertion)描述某種類型的認證,認證者(如某個認證服務器),及被認證的分支(如某個用戶或某個實體)。
    • Entitlement(權利):Entitlement是一個包含認證、授權、特徵摘要等描述信息的數據集,在S2ML的白皮書描述中,一個Entitlement類似於一個"授權令牌",Entitlement的制定應包括(授權的)起始時間、生存週期及收件人地址,在S2ML中將Entitlement數據打包插入一個發佈了的授權(文件)中。

     目前S2ML的版本爲V0.8草案,有關S2ML的詳細介紹可到 http://www.verisign.comhttp://www.s2ml.org下載其白皮書與技術規範。
     XML TRUST Services:是由微軟、Ariba、webMethods, 及Netegrity共同制定的
  6. XML Security Suite:這是IBM出的一套XML安全組件,它可以提供如下功能:
    • XML數據的元素級加密;
    • XML數據形式的規範化;
    • 使用標記對XML資源進行數字簽名;
    • 實現ASN.1數據與XML之間自動轉換的翻譯器;
    • 爲DOM樹節點建立HASH值及判斷兩個DOM樹之間區別的DOMHASH工具。
    有關XML Security Suite的更多信息可到下述的IBM官方網站中免費下載源程序與詳細的技術文檔: http://www.alphaworks.ibm.com/tech/xmlsecuritysuite
  7. AuthXML:AuthXML是一種採用XML數據格式的授權與認證規範,該技術的主要推崇者爲互聯網安全技術供應商Securant
  8. Technologies與Outlook Technologies,Inc.。AuthXML實現的具體目標如下:
    1. AuthXML應定義一種消息格式用於在不同的安全區域之間傳遞授權、認證、用戶描述等信息;
    2. AuthXML採用XML數據格式;
    3. AuthXML獨立於任何特定的安全模式;
    4. AuthXML應具有良好的可擴展性;
    目前AuthXML還處於草案階段,有關AuthXML的詳細描述以及AuthXML工作組的最新進展可到 http://www.authxml.org/中查看。
  9. http://www.nue.et-inf.uni-siegen.de:這是由一家德國大學(University of Siegen)建立的網站,其中有對XML安全的專題研究,如果你想了解有關最新XML安全研究的網絡資源,可以到它的網頁 http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/xml_security.html上看看。

XML數據安全的本質仍是計算機數據安全,由於數據採用了XML格式,因此我們可以結合此特點衍生出各種符合應用實際需求的安全加密技術,XML數據安全不僅僅是一個技術問題,它是整個供應鏈系統安全的重要組成部分,只有從企業安全管理的高度加以重視,只有在日常工作的每一個操作細節加以規範,才能防微杜漸,萬無一失。在一般情況下,靈活使用上述的加密方法與補充策略可以杜絕絕大多數安全方面的常見漏洞。不過,方法是死的,人是活的,如何結合實際情況,將這些安全策略合理地組合運用,也是一門非常大的學問。另外,對於應用系統的使用者與管理者而言,切忌因爲應用系統中採取了較爲完善的安全措施,就認爲可以放鬆戒心,隨意操作。要知道,無論是哪一類型的商業泄密,由於人爲因素造成的損失都遠遠要比技術失誤造成的多的多,也容易的多。

參考資料

Visual Basic 6 XML專業技術 James Britt/Teun Duynstee 人民郵電出版社
XML用戶手冊 Charles F.Goldfarb/Paul Prescod(美) 人民郵電出版社
計算機網絡(高級) 胡道元 清華大學出版社
Internet協議手冊 Dave Roberts 海洋出版社
WindowsNT系統安全實用技術   清華大學出版社
BackOffice Intranet解決方案指南   Stephen Wynkoop(美)機械工業出版社
電子商務核心技術--安全電子交易協議的理論與設計 梁晉等 西安電子科技大學出版社
混合環境下的網絡安全 Dan Blacharski(美) 世界圖書出版公司
應用密碼學--協議、算法與C源程序 施奈爾(美) 機械工業出版社
網絡安全技術內幕   機械工業出版社
Internet網絡安全專業參考手冊   機械工業出版社


名詞解釋

IANA: 互聯網數字化專職機構(Internet Assigned Numbers Authority)
NIST: 美國國家標準技術研究所(National Institute of Standard Technology)
NSA: 美國國家安全局(National Security Agency)
RSA: RSA公共祕鑰算法(由Rivest/Shamir/Adleman所提出)
RC: Ron Rivest祕鑰算法(Rivest Cipher)
SET: 安全電子傳輸協議(Secure Electronic Transaction)
SSL: 安全套接層協議(Secure Socket Layer)
DES: 數據加密標準(Data Encryption Standard)
IDEA: 國際數據加密算法(International Data Encryption Algorithm)
GOST: 蘇維埃政府密碼標準(Govemment Standard of the Union of Soviet Socialist Republics)
CAST: CAST對稱祕鑰算法(由Carlisle Adams/Stafford Tavares發明)
DSA: 數字簽名算法(Digital Signature Algorithm)
PGP: 私人加密工具包(Pretty Good Privacy)
IIOP: 互聯網對象請求代理協議(Internet Inter-ORB Protocol)
SOAP: 簡單對象訪問協議(Simple Object Access Protocol)
RPC: 遠程進程調用(Remote Process Call)
PCT: 私人通信技術(Privacy Communicate Technology)
TLSP: 傳輸層安全協議(Transport layer sericuty protocol)
PKI: 公鑰基礎設施(Public Key Infrastructure)
IPX: 網間分組交換(Internetwork Packet eXchange)
SPX: 順序分組交換(Sequence Packet eXchange)
XDS: XML數字簽名(XML Digital Signatures)
XKMS: XML祕鑰管理規範(XML Key Management Specification)
X-KRSS: XML祕鑰登記服務規範(XML Key Registration Service Specification)
X-KISS: XML祕鑰信息服務規範(XML Key Information Service Specification)
S2ML: 安全服務標記語言(Security Services Markup Language)
IETF: 互聯網工程任務組(Internet Engineering Task Force)
WDSL: 互聯網服務定義語言(Web services Definition Language )
MOSS: MIME對象安全服務(MIME Object Security Services)
MSP: 消息安全協議(Message Security Protocol)
S/MIME: 互聯網郵件多用途擴展安全協議(Security Multipurpose Internet Mail Extensions)
PEM: 保密性增強郵件標準(Privacy-Enhanced Mail)
VPN: 虛擬專用網(Virtual private network)
PPTP: 點對點通道協議(Point-to-Point Tunneling Protocol)
CBC: 加密塊鏈接(Cipher Block Chaining)
CFB: 加密反饋模式(Cipher Feedback Mode)
OFB: 輸出反饋模式(Output Feedback Mode)
AH: 驗證頭(Authentication Header)
ESP: 封裝安全載荷(Encapsulating Security Payload)
IKE: 互聯網密鑰交換協議(Internet Key Exchange)
IANA: 互聯網號碼分配當局(Internet Assigned Number Authority)
關於作者
郭路郭路,杭州大學計算機系92屆本科應用專業,曾先後就職於浙江省紡織經貿總公司計算機中心、思能軟件、華企、飛時達等軟件公司,擔任技術主管,主要從事於企業 MIS、GIS、ERP 及電子商務項目的開發管理和系統分析,對 IBM、微軟、SUN、Autodesk 等公司的企業級產品有較深的研究及理解。
mailto:[email protected]


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章