(遼寧工程技術(shù)大學 工商管理學院 遼寧 阜新 123000)
摘 要:針對普通XML數(shù)字簽名的可否認問題,首先介紹了XML數(shù)字簽名原理,然后分析了RSA簽名機制和不可否認簽名方案,在此基礎(chǔ)上提出了一種改進的不可否認簽名算法,并將其應(yīng)用到XML數(shù)字簽名結(jié)構(gòu)的簽名方法中,從而提出了一種新的XML不可否認簽名方法。實驗表明,該方法能夠確保XML數(shù)字簽名的不可否認性,是實現(xiàn)XML文檔安全交換的一種很有發(fā)展前景的保障技術(shù)。
關(guān)鍵詞:可擴展標記語言;數(shù)字簽名;RSA;不可否認簽名
中圖分類號:TP391文獻標志碼:A
文章編號:1001-3695(2009)05-1900-04
Research of RSAbased XML undeniable signature method
LI Xin,LIU Jianhui
(School of Business Administration Liaoning Technical University Fuxin Liaoning 123000 China)
Abstract:The paper aimed at the deniable problem of common XML digital signature introduced the fundamental XML digital signature and then analyzed the RSA digital signature mechanisms and the undeniable signature scheme. On the basis of the above,proposed an improved undeniable signature algorithm,and applied for signature method in the XML signature structure so presented a novel XML digital signature method.The experiments demonstrate that the new XML deniable signature method can ensure that the nonrepudiation of XML digital signature and it is a promising security technique for XML document transitions as well.
Key words:XML; digital signature; RSA; undeniable signature
XML已成為網(wǎng)絡(luò)數(shù)據(jù)表示和信息交換的標準[1]。隨著XML在各個領(lǐng)域的廣泛應(yīng)用,XML對其傳輸信息的安全性要求也愈來愈高,其安全性也更多地受到人們的關(guān)注。XML 數(shù)字簽名技術(shù)在保障交易信息的機密性、完整性、真實性和抗否認性等是尤其重要的一環(huán)。當前普通的XML數(shù)字簽名技術(shù)[2~4]只能確保被簽名數(shù)據(jù)的完整性,而不能夠確保簽名本身的不可否認性。然而,目前很少有關(guān)于XML不可否認簽名方面的研究,文獻[5]雖然提出了一種XML不可否認簽名方法,但是并沒有討論不可否認簽名方案中的確認協(xié)議和否認協(xié)議,因此無法證實其安全性。本文在研究RSA機制和不可否認簽名方案的基礎(chǔ)上,提出了一種改進的不可否認簽名算法,并將其應(yīng)用到XML數(shù)字簽名結(jié)構(gòu)的〈signaturemethod〉中,形成了一種新的XML不可否認簽名方法,包括產(chǎn)生簽名、確認協(xié)議和否認協(xié)議。該方法能夠充分地保證交易數(shù)據(jù)的完整性、可驗證性和不可否認性。
1 XML數(shù)字簽名原理
數(shù)字簽名是保障交易信息安全中的一個重要因素,用于確保數(shù)據(jù)的完整性、真實性和不可否認性。通常使用的數(shù)字簽名方案有RSA和DSA,它們使用一對數(shù)學上相關(guān)的密鑰來進行數(shù)字簽名。每一個想要創(chuàng)建數(shù)字簽名的用戶必須具有一個獨一無二的密鑰對(私鑰和公鑰)。一般情況下,私鑰被加密存放并用于簽名文檔,而公鑰則公開存放并用于驗證它的所有者的簽名。XML數(shù)字簽名是一個W3C(World Wide Web consortium)規(guī)范,W3C將XML數(shù)字簽名解釋為:定義一種與XML語法兼容的數(shù)字簽名語法描述規(guī)范,描述數(shù)字簽名本身和簽名的生成與驗證過程。實際上,XML數(shù)字簽名就是采用XML 的語法規(guī)則,對數(shù)字簽名的生成和驗證過程進行充分而準確的描述,該過程包括密鑰對生成、文檔簽名、傳送文檔及驗證簽名。
1.1 XML數(shù)字簽名的語法結(jié)構(gòu)
XML簽名可以用于對包括XML文檔在內(nèi)的任何內(nèi)容進行簽名,被簽名的數(shù)據(jù)內(nèi)容稱為數(shù)據(jù)對象。數(shù)據(jù)對象的簽名結(jié)果加上數(shù)字簽名信息以XML元素的形式存放在文檔中,稱為簽名元素。簽名元素為signature,它是XML簽名的核心標志。XML簽名的語法結(jié)構(gòu)如圖1所示。
在圖1所示的XML簽名語法結(jié)構(gòu)中,XML 簽名定義的主要內(nèi)容是〈signature〉元素,該元素的內(nèi)容包括數(shù)字簽名本身以及有關(guān)如何生成該簽名的信息。XML 數(shù)字簽名包括四個基本元素:〈signedInfo〉元素和〈signatureValue〉元素是必需的、〈keyInfo〉元素和〈object〉元素是可選的。其中〈signedinfo〉元素又包括三個子元素,分別是〈canonicalizationMethod〉〈signatureMethod〉和〈reference〉。圖中的“?”代表該元素可以出現(xiàn)0次或1次;“+”代表該元素至少出現(xiàn)1次;“*”代表該元素可出現(xiàn)0次或多次。
〈signedInfo〉元素是實際簽名的信息;〈canonicalizationMethod〉元素表示對XML進行規(guī)范化的規(guī)范化算法,規(guī)范化的目的是把邏輯上相同而表示上不同的XML片段生成相同的XML數(shù)據(jù);〈signatureMethod〉元素指定了簽名算法,不同的簽名算法是用不同的URI 來進行表示的;〈reference〉元素指定了將要簽名的數(shù)據(jù);〈transforms〉元素包含規(guī)范化、編/解碼、XS2LT 和XPath等操作,它可以在對reference的數(shù)據(jù)進行哈希運算之前對該數(shù)據(jù)進行篩選或修改;〈digestMethod〉應(yīng)用于進行〈transforms〉之后的數(shù)據(jù)以產(chǎn)生〈digestValue〉的算法;〈keyInfo〉包含簽名的密鑰等附加信息;〈object〉存儲了封裝簽名或數(shù)據(jù)對象[6]。
1.2 XML簽名類型
當XML文檔 (或其中的一部分) 經(jīng)過數(shù)字簽名之后,得到的XML簽名用〈signature〉元素表現(xiàn)出來。如上所述,〈signature〉元素封裝了簽名數(shù)據(jù)和與簽名有關(guān)的其他信息。根據(jù)〈signature〉元素與被簽文檔之間的位置關(guān)系,可分為三種簽名類型:
a)封內(nèi)(enveloped) 簽名。〈signature〉元素被封裝在被簽名的XML文檔中。〈signature〉元素通過它的子元素—〈reference〉元素提供的信息來引用被簽名的元素。圖2給出了封內(nèi)簽名的結(jié)構(gòu)。
b)封外(enveloping)簽名。〈signature〉元素中包含了被簽名數(shù)據(jù)對象元素,被簽名的元素成為了〈signature〉元素的子元素。圖3給出了封外簽名的結(jié)構(gòu)。
c)分離(detached) 簽名。〈signature〉元素與被簽名的元素各自獨立存在。被簽名的元素和〈signature 〉元素可以同屬于一個文檔,或者〈signature〉元素也可以在另一個完全不同的文檔中。〈signature 〉元素和被簽名數(shù)據(jù)存儲在不同文檔中,通過〈reference〉元素的URI用來指向被簽名數(shù)據(jù)。圖4給出了分離簽名的結(jié)構(gòu)。
一個XML簽名不僅能夠為多于一個的文檔簽名,而且還能夠?qū)崿F(xiàn)對同一份XML 文檔的不同部分使用多于一種格式的數(shù)字簽名。本文將使用封內(nèi)簽名格式。
2 基于RSA的不可否認簽名算法
Chaum等人[7]首次提出不可否認簽名方案。在不可否認數(shù)字簽名方案中,驗證者自己無法區(qū)分簽名的真與假,只有在一個稱為證實者的第三方的合作與幫助下才能驗證簽名的有效性。同時,只要參與了驗證,證實者就無法欺騙驗證者,即他既不能使驗證者接收一個無效的簽名,也不能讓驗證者相信一個實際上有效的簽名是無效的。對于傳統(tǒng)的數(shù)字簽名,一個不誠實的簽名者很容易去拒絕證實一個他自己的簽名文檔。然而,不可否認簽名通過添加一個稱為否認協(xié)議的方法來解決這一問題。不可否認簽名方案的簽名部分與其他簽名方案類似,也包括簽名生成和簽名確認。為了避免否認,不可否認簽名增加了驗證部分[8]。驗證通過質(zhì)詢響應(yīng)認證方案,驗證者向證實者發(fā)送一個質(zhì)詢消息,通過觀察回復(fù)消息來驗證簽名,這是一個不可否認的過程。一個驗證者發(fā)送一個質(zhì)詢消息,來自證實者的回復(fù)消息就能夠表明是否一個簽名屬于該簽名者。如果一個簽名者與該簽名無關(guān),則可以通過否認協(xié)議得到證實。
2.1 RSA數(shù)字簽名原理
RSA使用的一個密鑰對是由兩個大素數(shù)經(jīng)過運算產(chǎn)生的結(jié)果。其中一個是公鑰,為眾多實體所知;另外一個是私鑰,為了確保它的保密性和完整性,必須嚴格控制并只有它的所有者才能使用。RSA加密算法的最基本特征就是用密鑰對中的一個密鑰加密的消息只能用另外一個解密,這也就體現(xiàn)了RSA系統(tǒng)的非對稱性。
RSA的數(shù)字簽名是由一個實體用它的私鑰將明文加密而生成的。這種加密允許一個實體向多個實體發(fā)送消息,并且事先無須交換密鑰或加密私鑰,接收者用發(fā)送者的公鑰就可以解密[9]。
RSA的數(shù)字簽名過程如下:
S=md mod n
其中:m是消息;S是數(shù)字簽名的結(jié)果;d和n是消息發(fā)送者的私鑰。
消息的解密過程如下:
m=Se mod n
其中:e和n是消息發(fā)送者的公鑰。
基于RSA的不可否認簽名具有一些重要的屬性。首先,確認協(xié)議的驗證過程能夠通過與證實者進行交互來實現(xiàn);然后,使用否認協(xié)議,證實者可以證實一個偽造。證實偽造需要滿足下列屬性:對于一個特定消息和簽名,確認協(xié)議輸出合法的簽名;對于相同的輸入,否認協(xié)議將不會輸出,那么它就是一個偽造。確認和否認這兩個協(xié)議的結(jié)合,同時保護了簽名的接收者和簽名人,并且保持了傳統(tǒng)數(shù)字簽名的不可否認性的特點[10]。所以,不可否認簽名中存在三種主要的部件,即簽名產(chǎn)生算法(包括私鑰和公鑰的生成)、確認協(xié)議和否認協(xié)議。
2.2 基于RSA的不可否認數(shù)字簽名算法
本文在RSA簽名機制與Chaum等人設(shè)計的不可否認簽名方案的基礎(chǔ)上,提出了一種改進的不可否認簽名算法。
首先給出一個基本定義,下面的確認協(xié)議和否認協(xié)議都將用到該定義。
定義1 對于一個正整數(shù)k,令[k]=def{1,…,k},Zn代表整數(shù)模為n的乘法群,(n)=(p-1)(q-1)為該群的階。對于一個元素w∈Zn,ord(w)代表w在乘法群Zn中的階,〈w〉代表由元素w∈Zn生成的子群。
定義一個集合N ={n|n=pq,p 在上述定義基礎(chǔ)上,接下來介紹簽名的產(chǎn)生算法,確認協(xié)議和否認協(xié)議。 2.2.1 產(chǎn)生簽名 簽名者使用普通RSA簽名操作對消息m進行簽名,即計算Sm=md mod n,輸出(m,Sm)對。更為精確的,在對消息m求冪之前,消息m首先經(jīng)過合適的編碼形式(如單向哈希)進行處理,這樣能確保簽名結(jié)果不被偽造。給定一個消息m,用代表經(jīng)過編碼處理的m的輸出。所以,m的結(jié)果簽名將是Sm=defd mod n。對于(w,Sw)對來說,用Sw代表wd mod n,也就是直接對w而不是取冪。 2.2.2 確認協(xié)議 數(shù)字簽名的確認協(xié)議由一個證實者和一個驗證者進行交互來執(zhí)行的。協(xié)議的輸入是公鑰參數(shù),即(n w,Sw)∈PK和(m,S^m)對。如果S^m是消息m的一個合法簽名,則證實者P能夠向驗證者V證實該簽名的有效性;相反,如果簽名是非法的,則沒有證實者將能夠向驗證者V證實該簽名的有效性。 該協(xié)議在本質(zhì)上與Gennaro等人[8]和Chaum[11]提出的協(xié)議相同,即門限RSA。本文在這個協(xié)議上的變化是,使用一個驗證密鑰e,而不是簽名密鑰d(在文獻[11]中,簽名者僅知道d而不知道e)。該協(xié)議的思想是:驗證者去驗證一個對消息m的有效簽名,首先通過生成一個相關(guān)元素,該元素對于證實者來說是隨機的,并且驗證者知道該簽名(假設(shè)對m的簽名是正確的)。這個“盲”元素是通過使用w中的隨機指數(shù)i和j的乘積與消息m求冪而得到的(正確的簽名Sw是公開的)。直覺上,一個具有欺騙行為的證實者需要找出i和j的值來進行欺騙。然而,具有相同結(jié)果的不同指數(shù)對(i j)有很多,這就導(dǎo)致證實者即使通過大量的計算也不能夠區(qū)分它們。確認協(xié)議的具體執(zhí)行過程如下: 輸入:公鑰參數(shù)(n,w,Sw)∈PK,m∈Zn和有效簽名S^m,證實者的私鑰(d,e)∈[(n)]2 a)驗證者V選取i j∈R[n],計算Q=defS^2imSwj mod n,然后驗證者V將Q作為質(zhì)詢發(fā)送給證實者P。 b)證實者P計算A=defQe mod n,然后證實者P將A作為回應(yīng)消息發(fā)送給驗證者V。 c)驗證者V驗證A=2iwj mod n,如果等式成立,則驗證者V接受S^m作為消息m上的數(shù)字簽名,否則認為該簽名是不確定的。 2.2.3 否認協(xié)議 數(shù)字簽名否認協(xié)議的輸入是公鑰參數(shù),即(n,w,Sw)∈PK,以及(m,S^m)對。如果S^mSIg(m),則證實者P能夠向驗證者V證實簽名的有效性;相反,如果S^m*SIg(m),則沒有證實者將能夠向驗證者V證實該簽名是合法的。否認協(xié)議的具體執(zhí)行過程如下: 輸入:證實者的私鑰對(d,e)∈[(n)]2,公鑰參數(shù)(n,w,Sw)∈PK,m∈Zn和非有效簽名S^m a)驗證者V選取i=4b和j∈R[n]。其中:b∈R[k]。計算Q1=iwj mod n和Q2=S^imSwj mod n,然后驗證者V將(Q1,Q2)作為質(zhì)詢發(fā)送給證實者P。 b)證實者P計算Q1/Q2=(/S^em)i,并且通過測試所有可能的b。其中:b∈[k],計算i=4b。如果這樣的一個i值存在,則證實者P設(shè)置A=i,否則中止;然后,證實者P向驗證者V發(fā)送回應(yīng)消息A。 c)驗證者V驗證A=i。如果等式成立,則驗證者拒絕S^m作為消息m的數(shù)字簽名;否則,該數(shù)字簽名不確定。 3 不可否認簽名方法的完備性、可靠性和不可否認性分析 3.1確認協(xié)議的完備性和可靠性 定理1 令(n,w,Sw)∈PK,則確認協(xié)議的完備性和可靠性分別為: 完備性 給定Sm∈SIg(m),如果P和V遵從簽名確認協(xié)議,則V總能接受Sm作為一個合法的簽名。 可靠性 即便是通過大量計算,證實者P也無法以超過O(1)/P′的可能性說服驗證者V接受簽名S^mSIg(m)。 證明 完備性 觀察確認協(xié)議可以看出,如果存在階為2的額外因素,S^m有能力從簽名中消除這樣的額外因素(這樣的因素在SIg(m)的定義中是被允許的)。 可靠性 本文借鑒了文獻[13]的部分證明用于確認協(xié)議的可靠性證明。證實者能夠欺騙(或說服)V接受簽名S^mSIg(m)的可能性的最佳情況是,他選取的A能夠以最大可能性(這與V選取的i和j的值有關(guān))通過V的測試。當證實者在看到來自V的質(zhì)詢Q之后(并且基于他自己所知的S^m,m,w,d,e和n)選取A時,定理的可靠性證明需要獲取在i和j上對于證實者選取A時可用的一些信息。 在確認協(xié)議中,V從集合[n]中隨機選取值i和j。為了便于分析,假設(shè)這些值從[(n)]中進行選取,并且i或者j超出證實者進行欺騙的可能性范圍,即i或j[(n)]的可能性,用π表示,最多為2[n-(n)]/n。所以,接下來假設(shè)i j∈R [(n)]。 首先定義I(Q)={i∈[(n)]:j,Q=S^2imSjw mod n}。因為S^mSIg(m),對于α∈Zn,ord(α)>2,S^m=αd。在協(xié)議的第3步,驗證者將檢查 A=2iwj=α-2eiS^2eimSejw=α-2eiQe(1) 是否成立。 因為α已經(jīng)在前面設(shè)定,然后對于任意A,滿足式(1)的i的數(shù)目與使α2i=A-dQ成立的i的數(shù)目相同的最大可能性不超過(n)/ord (α)。給定Q,V對于i的選取均勻地分布在I(Q)上,這是因為對于每一個i∈I(Q),均存在相同數(shù)目的j的取值能夠滿足等式Q=S^2imSjw mod n。因此,P能夠成功欺騙的可能性最多為[(n)/ord(α)]/|I(Q)|。