DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML基礎 >> 啟用 XML 安全性(1)
啟用 XML 安全性(1)
編輯:XML基礎     

 

XML 是因特網以及近來 Web 服務持續增長和開發的主要支持者。但是,在實現 XML 語言的全部能力之前,還有許多與安全性相關的工作要做。目前,加密整個 XML 文檔、測試其完整性和確認其發送方的可靠性是一個簡單的過程。但是,越來越有必要對文檔的某些部分也使用這些功能,以便以任意順序加密和認證以及涉及不同用戶或發起方。目前,在與 XML 相關的安全性領域方面開發規范的最重要部分是 XML 加密、XML 簽名、XACL、SAML 和 XKMS。本文介紹前兩個。
簡介
XML 已經成為一種用於在因特網上交換數據的有價值機制。SOAP,這種發送 XML 消息的方式,促使進程以一種前所未有的方式相互通信,而 UDDI 看起來正在快速成為整合 Web 服務的供應商和用戶的標准;服務本身是 XML 以 WSDL (即“Web 服務描述語言”)形式描述的。如果沒有 XML,將不可能有這種靈活性和能力,並且,正如許多人所說的,將有必要發明元語言。

安全性領域是另一個快速增長的領域。在不同團體之間建立信任的傳統方法在公共因特網上已不合適,實際上,在大型 LAN 和 WAN 上也不合適。在這些情況下,基於非對稱密碼術的信任機制可能會非常有用,但實際上,部署和密鑰管理的方便性、互操作性的范圍和提供的安全性遠不如各種的“公鑰基礎設施”(Public Key Infrastructures (PKI))的熱情的供應商曾讓我們相信的那樣。處理層次數據結構,以及帶有機密、訪問權限或完整性等不同需求的數據的子集特別困難。另外,具有不同於 XML 文檔的現今標准安全性控制的應用程序一點都不簡單。

目前,一些團體正積極投身於檢查這些問題和開發標准的活動中。其中主要的相關開發是 XML 加密和相關的 XML 簽名、“可擴展訪問控制語言(XACL)”和相關的“安全性斷言標記語言(SAML — 以前是互為競爭對手的 AuthML 和 S2ML 的結合)”。所有這些都由 OASIS 和“XML 密鑰管理規范(XKMS)”驅動。本文將 介紹 XML 加密和 XML 簽名。

XML 加密和 XML 簽名
象其它任何文檔一樣,可以將 XML 文檔整篇加密,然後安全地發送給一個或多個接收方。例如,這是 SSL 或 TLS 的常見功能,但是更令人感興趣的是如何對同一文檔的不同部分進行不同處理的情況。XML 的一個有價值的好處是可以將一整篇 XML作為一個操作發送,然後在本地保存,從而減少了網絡通信量。但是,這就帶來了一個問題:如何控制對不同元素組的授權查看。商家可能需要知道客戶的名稱和地址,但是,無需知道任何正在使用的信用卡的各種詳細信息,就像銀行不需要知道購買貨物的詳細信息一樣。可能需要防止研究人員看到有關個人醫療記錄的詳細信息,而管理人員可能正好需要那些詳細信息,但是應該防止他們查看醫療歷史;而醫生或護士可能需要醫療詳細信息和一些(但不是全部)個人資料。

密碼術現在所做的遠遠不止隱藏信息。消息摘要確定文本完整性,數字簽名支持發送方認證,相關的機制用於確保任何一方日後無法拒絕有效事務。這些都是遠程交易必不可少的元素,現在,用於處理整個文檔的機制開發得相當好。

有了一般的加密,對 XML 文檔整體進行數字化簽名不是問題。然而,當需要對文檔的不同部分(可能由不同的人)簽名,以及需要與選擇性的方法一起來這樣做時,就會出現困難。也許不可能或者不值得強制不同部分的加密工作由特定人員按特定順序進行,然而成功地處理文檔的不同部分將取決於是否知道這點。此外,由於數字簽名斷言已經使用了特定專用密鑰來認證,所以要小心簽名人是以純文本形式查看文檔項的,這可能意味著對由於其它原因而加密的部分內容進行了解密。在另一種情況下,作為更大集合中的一部分,可能對已經加密過的數據進行進一步加密。在牽涉單一 XML 文檔(可能由一些不同的應用程序和不同的用戶處理在工作流序列中使用的 Web 表單或一系列數據)的事務集中考慮的不同可能性越多,就越可能看到巨大的潛在復雜性。

還有其它問題。XML 語言的強項之一是,搜索是明確的,無二義性的:DTD 或 Schema 提供了相關語法的信息。如果將包括標記在內的文檔的一部分作為整體加密,就會喪失搜索與那些標記相關的數據的能力。此外,如果標記本身被加密,那麼一旦洩漏,它們將被利用對采用的密碼術進行純文本攻擊。

這些是工作組正在考慮的一些方面。

XML 加密示例
XML 加密語法的核心元素是 EncryptedData 元素,該元素與 EncryptedKey 元素一起用來將加密密鑰從發起方傳送到已知的接收方,EncryptedData 是從 EncryptedType 抽象類型派生的。要加密的數據可以是任意數據、XML 文檔、XML 元素或 XML 元素內容;加密數據的結果是一個包含或引用密碼數據的 XML 加密元素。當加密元素或元素內容時,EncryptedData 元素替換 XML 文檔加密版本中的該元素或內容。當加密的是任意數據時,EncryptedData 元素可能成為新 XML 文檔的根,或者可能成為一個子代元素。當加密整個 XML 文檔時,EncryptedData 元素可能成為新文檔的根。此外,EncryptedData 不能是另一個 EncryptedData 元素的父代或子代元素,但是實際加密的數據可以是包括現有 EncryptedData 或 EncryptedKey 元素的任何內容。

加密工作草案給出了一些示例來演示:加密的顆粒度如何根據要求的不同而不同,以及可能出現什麼結果。清單 1 中的代碼片斷顯示了帶有信用卡和其它個人信息的未加密 XML 文檔。在某些情況下(例如,隱藏支付機制的信息),可能希望加密除客戶名稱以外的所有信息,清單 2 的代碼片斷演示了如何這樣做。

清單 1. 顯示 John Smith 的銀行帳戶、5000 美元限額、卡號和有效期的的信息
      <?xml version='1.0'?>
      <PaymentInfo xmlns='http://example.org/paymentv2'>
        <Name>John Smith<Name/>
        <CreditCard Limit='5,000' Currency='USD'>
      &nbs

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved