DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> XML簽名概覽
XML簽名概覽
編輯:XML詳解     
摘要:本文比較全面地介紹了XML簽名,但並未深入探究。本人水平有限,錯誤難免,歡迎指正,共同探討。

  目錄:

XML簽名概覽... 1

簡介... 1

為什麼需要XML簽名... 1

數字簽名... 2

XML簽名語法... 2

應用... 4

實現... 4

參考... 4

  簡介

  XML簽名是一種基於XML格式的簽名規范。它是W3C最早的XML安全方面的推薦標准規范。設計的XML簽名帶有多個目標,可提供“對任何數據類型的完整性、消息認證、和/或簽名者認證服務, 無論是在包括該簽名的 XML 內部還是在別處(這對因特網的發展意義重大)。”

  XML實質上是定義了一些XML標簽,通過這些標簽來達到對XML文檔或其他數據進行簽名的目的。

  本文首先說明XML簽名解決的問題,然後再從數字簽名原理、XML簽名語法、應用等各方面講述XML簽名。

  為什麼需要XML簽名

  互聯網在快速發展的同時,帶來了許多安全方面的挑戰。數據傳輸的機密性、完整性,消息認證,數據不可抵賴性等,都是在應用時需要高度重視的。正如簡介中所說,XML簽名能夠解決完整性、消息認證和不可抵賴性(即簽名者認證服務)。

  完整性:即保證數據在傳輸過程中不被篡改。

  消息認證:使數據接收者能夠確定消息來源的一項服務。

  不可抵賴性:使數據發送者不能對自己已經發送數據的行為進行否認的一項服務。

  同時,XML簽名是完全基於XML的,這使得它的應用將十分方便。還有一點很重要,它是W3C的推薦標准(要知道因特網上的應用,標准是十分重要的)。

  數字簽名

  數字簽名是密碼學中非常重要的一個領域,應用十分廣泛。

  密碼學主要分為對稱和非對稱兩大類,其區別在於加解密密鑰是否相同。非對稱密碼學又稱公私鑰密碼學,是近代密碼學一個非常重大的突破。非對稱加密的加解密密鑰不同,一般稱其中一個為私鑰,另一個為公鑰。私鑰為用戶私有,公鑰通過某種機制公布,並且兩者無關聯(並非完全沒有聯系,是指從一個無法推的得另一個)。由於它使用兩種不同的密鑰,因而稱為非對稱,並且因此可以用於消息認證和防抵賴。

  在應用數字簽名時,一般都會配合使用消息摘要算法(因為如果直接對原數據進行加密簽名的話,會使簽名十分冗長。所以先計算其摘要,再對摘要進行簽名)。消息摘要算法也是密碼學中很重要的一個方面。它是一種單向函數,對原數據進行變換並獲得摘要值(一般512位)。它的特點是攻擊者無法針對一個摘要逆向生成產生此摘要的原數據,由此可知它是提供完整性服務的關鍵。

  下面是一個簡單的應用模式:

  注:XML簽名規范是包括摘要部分的XML簽名語法,首先看個例子:

[來源於“XML-Signature Syntax and Processing”]

  [s01] <Signature Id="MyFirstSignature" xmlns="http://www.w3.org/2000/09/XMLdsig#">

   [s02]   <SignedInfo>

   [s03]   <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-XML-c14n-20010315"/>

   [s04]   <SignatureMethod

 Algorithm="http://www.w3.org/2000/09/XMLdsig#dsa-sha1"/>

   [s05]   <Reference

 URI="http://www.w3.org/TR/2000/REC-xHtml1-20000126/">

   [s06]     <Transforms>

   [s07]       <Transform Algorithm="http://www.w3.org/TR/2001/REC-XML-c14n-20010315"/>

   [s08]     </Transforms>

   [s09]     <DigestMethod Algorithm="http://www.w3.org/2000/09/XMLdsig#sha1"/>

[s10]     <DigestValue>j6lwx3rvEPO0vKtMup4NbeVu8nk=</DigestValue>

   [s11]   </Reference>

   [s12] </SignedInfo>

   [s13]   <SignatureValue>MC0CFFrVLtRlk=...</SignatureValue>

   [s14]   <KeyInfo>

   [s15a]    <KeyValue>

   [s15b]      <DSAKeyValue>

   [s15c]        <P>...</P><Q>...</Q><G>...</G><Y>...</Y>

   [s15d]      </DSAKeyValue>

   [s15e]    </KeyValue>

   [s16]   </KeyInfo>

   [s17] </Signature>

  開始為一個Signature標簽,表示這是一個XML簽名。

  2-12行為SignedInfo,其中Reference中指明簽名的對象,以及原數據的摘要。

  13行為簽名值。

  14-16行為KeyInfo標簽,指明簽名使用的公鑰信息。

  例子中出現的標簽,以及為出現的標簽,將在下面簡要介紹。

  [更加具體的說明以及相關的XML Schema或DTD可以參考“XML-Signature Syntax and Processing”]

  1、  名稱空間

xmlns:ds="http://www.w3.org/2000/09/xmldsig#"為XML簽名使用的名稱空間。

  2、  Signature標簽

  標識了特定環境下的一個完整XML簽名。包括子元素<SignedInfo>、<SingatureValue>、<KeyInfo>和<Object>,其中後兩個可選。屬性有Id,作為簽名的標識。

  3、  SignedInfo標簽

  最復雜的一個標簽,指明了規范化方法、數據源、簽名算法、摘要算法、摘要值以及簽名變換等。包括<CanonicalizationMethod>、<SignatureMethod>、<Reference>三個標簽,其中Reference標簽可以有多個,即簽名可以指定多個數據源。屬性Id為標識。

  3.1、<CanonicalizationMethod>標簽

  空標簽。屬性Algorithm用URI方式指定規范化的算法。

  3.2、< SignatureMethod >標簽

       空標簽。屬性Algorithm用URI方式指定簽名的算法。

  3.3、<Reference>標簽

  < DigestMethod>和< DigestValue>標簽分別指定摘要的算法和值。屬性Id為標識,URI指定數據源。< Transforms>指定簽名變換,由零至多個<Transform>子標簽構成。每個<Transform>子標簽為一種簽名變換。這裡的變換指的是簽名之前對需要簽名的數據進行的一種變換。<Transform>標簽的Algorithm屬性指定簽名變換算法。

  4、  <KeyInfo>標簽

  (可選。因為在實際應用中,上下文可能已經隱含了這個信息,或者雙方通過其他約定來傳遞這個信息)

  包含<KeyName>、<KeyValue>、<RetrIEvalMethod>、<X509Data>、<PGPData>、<SPKIData>、<MgmtData>子標簽。

  4.1、<KeyName>標簽

  密鑰名稱的簡單文本標識符。

  4.2、<KeyValue>標簽

       RSA或DSA公鑰。

  4.3、<RetrIEvalMethod>標簽

  允許遠程訪問密鑰信息。

  4.4、<X509Data>標簽

       X.509證書數據。

  4.5、<PGPData>標簽

       PGP相關數據。

  4.6、<SPKIData>標簽

       SPKI相關數據。

  4.7、<MgmtData>標簽

       密鑰共識參數(如DiffIE-Hellman參數等)

5、  <Object>標簽

  用於附加信息。

  再次強調,這裡只是簡要介紹,更加詳細的說明參考“XML-Signature Syntax and Processing”。

  應用

  XML簽名可以作為其他標准框架的一部分使用,當然也可以獨立適用,自己定義一個框架,自己生成和解析XML簽名。XML簽名已經廣泛應用於WS-Security中,具體可參閱WS-S的內容。

  實現

  現在已經出現了很多XML簽名開發包。主要有IBM的XML Security Suite和apache的XML Security。其中實現了XML簽名生成和校驗的API(Java)。

  IBM的XML Security Suite:http://www.alphaworks.ibm.com/tech/XMLsecuritysuite/download

  apache的XML Security:http://XML.apache.org/security/index.Html

 

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