宋靖文,張大偉,孟吳同,高 凡,劉曉東
(1.北京交通大學 計算機與信息技術學院 北京 100044;2.山東大學 網(wǎng)絡信息安全研究所 山東 濟南 250000)
1996年,Mambo等[1-2]針對現(xiàn)實生活中數(shù)字簽名權力的委托問題提出了代理簽名的概念.代理簽名可以看作是數(shù)字簽名的擴展形式.RSA算法[3]、Elgamal算法[4]、Schnorr算法[5]是常用的可用于數(shù)字簽名的算法,這些算法主要依賴于離散對數(shù)問題或大數(shù)因子分解問題.1985年,Koblitz和Miller[6-7]分別提出將橢圓曲線應用到公鑰密碼系統(tǒng).橢圓曲線公鑰密碼體制依賴的橢圓曲線離散對數(shù)問題相較于前兩類難題,更加難以求解.2003年白國強等[8]設計出基于橢圓曲線的代理數(shù)字簽名;2005年張寧等[9]指出文獻[8]中原始簽名者也能生成有效的代理簽名,對此進行了改進;2007年高勝[10]對文獻[9]進一步改進,提高了方案效率.此外,其他基于橢圓曲線的代理簽名的研究也在進行.2004年紀家慧等[11]改進了ECDSA,并提出新的代理簽名體制;2007年左為平等[12]指出文獻[11]存在原始簽名者能偽造代理簽名者的普通簽名的情況,并提出避免此攻擊的方案;2010年胡蘭蘭等[13]指出文獻[12]中原始簽名者仍可偽造代理簽名,并進行改進;2017年郭青霄等[14]基于SM2算法[15]提出一種新的代理簽名方案.一般來說,不采用授權書的代理簽名方案存在一些固有的局限性[16].文獻[14]中的方案也是如此,其安全性要由證書來保證,如果沒有公開證書將代理簽名者的身份和授權信息綁定,則方案不滿足可識別性和不可否認性.
本文借鑒文獻[17]中的授權信息的構造方法,在文獻[14]方案的基礎上加以改進,改進的方案將原方案中證書的信息加入到授權信息生成過程中,使得驗證代理簽名的同時也是在驗證證書中的內(nèi)容,從而無須額外生成和驗證證書,提高效率的同時保證了代理簽名的安全性.
代理簽名是指在代理簽名方案中,被指定的代理簽名者可以代表原始簽名者生成有效的簽名.
文獻[1-2]指出代理簽名應滿足可驗證性、可區(qū)分性、不可偽造性、可識別性和不可否認性等性質(zhì).之后,文獻[18-19]在一定程度上加強了不可偽造性、可識別性、不可否認性的定義.
可以認為代理簽名分為4大類:完全代理簽名、部分代理簽名、具有證書的代理簽名[1-2]以及具有證書的部分代理簽名[17].本文僅對后3類進行介紹.
部分代理簽名中的代理簽名密鑰是由原始簽名者的私鑰計算生成的.代理簽名者使用代理簽名密鑰進行簽名,驗證者仍使用原始簽名者公鑰進行驗證,以確保簽名消息得到了原始簽名者的認可.
具有證書的代理簽名方案需要借助證書來實現(xiàn)簽名權力的委托.原始簽名者需要使用私鑰對同意授權某人的文件進行簽名,生成授權證書.之后,代理簽名者使用自己的私鑰或原始簽名者為其生成的代理簽名密鑰進行簽名.驗證者不僅要對代理簽名進行驗證,還要對證書進行驗證.
具有證書的部分代理簽名是部分代理簽名和具有證書的代理簽名的結(jié)合.原始簽名者首先對授權文件簽名,但不同于具有證書的方案,代理簽名者會結(jié)合授權文件的簽名和私有信息計算代理簽名密鑰,利用此密鑰對消息簽名.這樣,代理密鑰還是由原始簽名者私鑰計算出來的,驗證者仍使用原始簽名者公鑰驗證代理簽名,但無需再驗證授權文件的簽名,既保證了安全性,又提高了效率.
文獻[14]的方案雖然是部分代理簽名,但可識別性和不可否認性仍需證書的保證,而證書的生成和驗證會影響方案的效率,因此,本文將設計一種更加高效的具有證書的部分代理簽名方案.
選取SM2公鑰密碼算法[15]中推薦的橢圓曲線參數(shù),G是橢圓曲線中階為n的基點.假設Alice是原始簽名者,私鑰為dA∈[1,n-2],公鑰為PA=dAG,私鑰保密,公鑰公開;假設Bob是代理簽名者,代表原始簽名者Alice 簽名;驗證者Carol 對生成的代理簽名進行驗證.
首先,Bob進行如下操作.
B1:用隨機數(shù)生成器生成隨機數(shù)kb∈[1,n-1],計算橢圓曲線上的點Gb=kbG;
B2:Bob將Gb發(fā)送給Alice.
Alice收到來自Bob的信息后,進行下面的步驟:
A1:用隨機數(shù)生成器生成隨機數(shù)ka∈[1,n-1],計算橢圓曲線上的點Ga=kaG;
A2:計算橢圓曲線上的另一個點Gab=(x1,y1)=kaGb;
A3:計算rab=x1modn,若rab=0則返回步驟A1;
A5:Alice將(Ga,Gab,sA)作為授權信息發(fā)送給Bob.
其中:Ga和Gab需要公開并在證書中與Bob的身份綁定,而sA需秘密發(fā)送給Bob.
Bob收到授權信息后,對授權信息進行驗證,驗證過程如下.
當Bob代替Alice對消息M進行簽名時,Bob使用的簽名密鑰是dP,簽名過程如下.
B8:用隨機數(shù)生成器生成隨機數(shù)k∈[1,n-1],計算(x3,y3)=kGab;
B9:令r=(e+x3)modn,若r=0或r+k=n則返回步驟B8;
B10:計算代理簽名s=((1+dP)-1(k-rdP))modn,若s=0則返回步驟B8;
B11:此時消息M的代理簽名是(Ga,Gab,r,s).
為了驗證收到的消息M′及其代理簽名(Ga,Gab,r′,s′),驗證者Carol進行以下驗證步驟.
C1:檢驗r′∈[1,n-1]和s′∈[1,n-1]是否成立,若不成立則驗證不通過;
C3:計算rab=x1modn;
C4:計算t=(r′+s′)modn,若t=0,則驗證不通過;
文獻[14]方案的某些性質(zhì)依賴授權證書的存在.若沒有證書,則驗證者不能識別出代理簽名生成者的身份;若一個原始簽名者授權了多個代理簽名者,則代理簽名者可以對自己生成的有效代理簽名進行否認,方案不滿足不可否認性.此外,代理簽名者可以利用已知信息偽造其他授權信息和代理簽名密鑰,進而偽造代理簽名.雖然偽造的代理簽名仍是由代理簽名者生成的,看似對方案的安全性威脅不大,但若代理簽名者為逃避責任每次都用偽造的代理簽名密鑰進行簽名,而驗證者在不知情的情況下接受了偽造的代理簽名,那么當需要確定代理簽名者身份時,即使原始簽名者記錄了授權信息與代理簽名者身份的對應關系,也無法找出代理簽名的真正生成者.
mW:授權證書信息,可以包含原始簽名者及代理簽名者的身份信息、代理簽名者的權限等.
其他參數(shù)與文獻[14]相同.
此階段的步驟B1~B2及步驟A1~A3與2.2節(jié)相同,其他步驟為
A4: 計算e0=H(mW‖rab);
A6: Alice將(mW,Ga,Gab,sA)作為代理簽名的授權信息發(fā)送給Bob.
其中:mW、Ga和Gab需要對外公開,而sA需秘密發(fā)送給Bob.
Bob驗證授權信息.
B4: 計算e0=H(mW‖rab);
Bob使用密鑰dP對消息M進行簽名,簽名過程同文獻[14],代理簽名的形式變?yōu)?mW,Ga,Gab,r,s).
為了驗證收到的消息M′及其數(shù)字簽名(mW,Ga,Gab,r′,s′),驗證者Carol應執(zhí)行以下操作.
C1: 檢驗r′∈[1,n-1]和s′∈[1,n-1]是否成立,若不成立則驗證不通過;
C3: 計算rab=x1modn;
C5: 計算t=(r′+s′)modn,若t=0,則驗證不通過;
3.6.2代理簽名驗證的正確性 當Carol收到正確的簽名(mW,Ga,Gab,r′,s′)時,應有R=r′.
即k=(s′+dPt)modn,得
改進方案的安全性仍然是基于哈希函數(shù)的單向性和橢圓曲線離散對數(shù)問題的困難性.
3.7.1不可偽造性 1) 原始簽名者的普通簽名的不可偽造性
2) 授權信息的不可偽造性
i) 未被授權的攻擊者偽造授權信息.偽造有效的授權信息等價于求(mW,Ga,Gab,sA),使得sAGa=rabPA+e0G成立,e0=H(mW‖rab).e0是哈希函數(shù)值,哈希函數(shù)具有單向性,因此,攻擊者必須先確定mW和rab的值.rab=x1modn,x1是Gab的橫坐標,故也要確定Gab的值,由此,rabPA+e0G的值確定.
3) 代理簽名的不可偽造性
如果通過構造k來確定(r,s)的值,因為(x3,y3)=kGab,r=(e+x3)modn,根據(jù)k、e和Gab的值可以進一步計算出r.由kGab=sGab+trabPA+te0G和t=(r+s)modn,可以得到kGab-r(rabPA+e0G)=s(Gab+rabPA+e0G),此時求解s意味著求解橢圓曲線離散對數(shù)問題.
如果通過構造(r,s)來確定k的值,無論是根據(jù)kGab=sGab+trabPA+te0G對k進行求解,還是根據(jù)r=(e+x3)modn和(x3,y3)=kGab進行求解,都是求解橢圓曲線離散對數(shù)問題.
3.7.2可區(qū)分性 1) 代理簽名(mW,Ga,Gab,r,s)的形式與普通簽名(r,s)的形式不同.2) 即使對同一代理簽名者進行多次授權,也可以對不同授權情況下生成的代理簽名加以區(qū)分.這是因為,原始簽名者和代理簽名者在每次授權過程中,生成的授權信息不同.3)mW中有代理簽名者的身份信息,所以不同代理簽名者生成的代理簽名之間也可以區(qū)分.
3.7.3可識別性和不可否認性 有效代理簽名(mW,Ga,Gab,r,s)中的mW不能被包括代理簽名者在內(nèi)的任何人篡改.因此,一旦有效的代理簽名被生成,就可以通過mW識別出代理簽名者的身份,使得代理簽名者無法進行否認.
實驗主機配置為1.80 GHz、i5-3337U CPU、4 GB RAM,系統(tǒng)為Ubuntu16.10,編程語言為Golang1.7.6.
4.1.1橢圓曲線參數(shù) 采用SM2橢圓曲線公鑰密碼算法標準[15]推薦的素數(shù)域256位橢圓曲線,即y2=x3+ax+b.對于曲線參數(shù),同樣采用SM2橢圓曲線公鑰密碼算法標準[15]中的推薦,如表1所示.
表1 SM2公鑰密碼算法橢圓曲線參數(shù)[15]Tab.1 Elliptic curve parameters of SM2 public key cryptography algorithms[15]
4.1.2原始簽名者公私鑰 原始簽名者的公私鑰如圖1所示.
圖1 原始簽名者的公私鑰信息Fig.1 The public key and private key of the original signer
代理授權的生成、代理授權的驗證及代理密鑰的生成、代理簽名的生成和代理簽名的驗證的實驗結(jié)果分別如圖2~5所示.
文獻[14]中的方案除授權信息的生成外還有授權證書的生成.此外,驗證者驗證代理簽名時需要進行兩次驗證:一次是證書上簽名的驗證,另一次是代理簽名的驗證.假設文獻[14]中證書上的簽名為標準SM2數(shù)字簽名,表2是對標準SM2數(shù)字簽名、文獻[14]中的代理簽名方案與改進的SM2代理簽名方案的復雜性比較,由于Hash運算速度很快,橢圓曲線上的加法運算也很高效[20].故本文主要對點乘次數(shù)TM、表示模乘次數(shù)TMM、表示模逆次數(shù)TINV進行比較.實驗對3種方案的簽名和驗證時間進行了多次測試,計算得到的平均時間如表3所示.
圖2 代理授權生成階段結(jié)果Fig.2 The results of proxy generation
圖3 代理授權驗證及代理密鑰生成階段結(jié)果Fig.3 The results of proxy verification and proxy key generation
圖4 代理簽名生成階段結(jié)果Fig.4 The results of proxy signature generation
圖5 代理簽名驗證階段結(jié)果Fig.5 The results of proxy signature verification
表2 三種方案的復雜性比較Tab.2 Comparison of the complexity of three schemes
表3 三種方案的簽名和驗證速度比較Tab.3 Comparison of signing and verification speeds of three schemes ms
由表3可見,標準SM2數(shù)字簽名、原SM2代理簽名方案和改進的代理簽名方案的簽名生成時間相差不大,這是因為兩種代理簽名方案中的簽名算法與標準SM2簽名算法所需運算次數(shù)相同;原SM2代理簽名方案中,總驗證時間約是標準驗證時間的2.03倍,原因是總驗證時間等于證書驗證時間與代理簽名的驗證時間之和;改進后的代理簽名方案的驗證時間接近標準SM2驗證時間的1.5倍,這是由于代理簽名驗證過程比標準簽名驗證過程多了兩次數(shù)乘運算和一次點乘運算.從總體上來說,改進方案的代理簽名生成效率與文獻[14]中的方案相近,驗證效率提高了約26%.
本文分析并指出了文獻[14]方案的不足,并進行了改進.改進的方案無需可信任方生成證書,但仍能滿足可驗證性、不可偽造性、可區(qū)分性、可識別性和不可否認性.與原方案相比,雖然改進的方案中增加了部分運算,但減少了原方案中證書的生成和驗證過程.總體來說,改進方案的效率比原方案有所提高.