簡介
XML數字簽名技術用於對XML格式的數據進行數字簽名,以保證報文的完整性,不可否認性,以及提供身份認證信息。JSR105提供了XML數字簽名的Java接口,而最近發布的JavaSE6則包括了JSR105的實現,從而為基於Java的應用程式提供了標準的XML數字簽名接口。本文首先簡要介紹技術背景,以實例來講解XML數字簽名的語法和處理規則,之後用具體的程式例子解釋如何使用JavaSE6生成各種格式的XML數字簽名並進行驗證。
美國國家標準技術局(NIST)在1991年提出作為美國聯邦信息處理標準(FIPS)的數字簽名標準。採用了美國國家安全局(NSA)主持開發的數字簽名算法(DSA)。所謂數字簽名,是一種用數字通信形式達到簽名的功能,目的是證明通信雙方的身份、達到確保通信的安全,是一套密碼系統。
數字簽名是伴隨數字編碼報文的一個數據項。數字簽名支持不可否認,即收方能夠用數字簽名使第3方相信發方的身份,並把它作為依據解決報文發方和收方之間的爭端。
發展
XML發展至今,已經逐漸成為標準的數據描述技術,在分散式套用中廣泛地用於數據的交換。由於XML數據本身的非凡性和使用XML進行數據傳輸的分散式套用的特點,在對XML文檔的特定部分進行簽名,多方簽名,以及簽名後保持XML文檔原有的良構特性等諸多方面,傳統的數字簽名技術都無法很好地實現。
基於這樣的問題,W3C組織制訂了XML數字簽名規範,規定了標準的XML數字簽名語法和處理規則。同傳統意義的數字簽名相比,XML數字簽名能夠對XML文檔進行細粒度地分析,支持多種方式的文檔數據轉換,只對文檔的特定部分進行簽名和驗證,並且能夠保持XML文檔的良構特性。此外,XML數字簽名提供的密鑰信息表示方法清楚易讀,更加便於簽名的自動驗證處理。