曾麗,李旭東
(西華大學(xué)理學(xué)院,成都610039)
部分盲簽名的定義首次被Abe和Fujisaki[1]在1996年提出,次年,Abe等人[2]中又給出了具體的基于RSA和Schnorr算法的部分盲簽名方案。部分盲簽名不僅是盲簽名的進一步發(fā)展,更是很好地解決了盲簽名存在的問題。與盲簽名的不同之處在于,它可以填加一些雙方已經(jīng)協(xié)商好的信息,如簽名周期、簽名時間等。這樣即保證了代簽消息的部分盲性,也保證了簽名者的合法權(quán)益。
2008年,榮維堅[3]結(jié)合無證書密碼體制,第一次提出無證書的部分盲簽名方案,但未證明該方案的不可偽造性。2010年,余丹等人[4]榮方案的存在的問題,提出了改進的部分盲簽名方案。在此期間,一些基于不同算法的無證書部分盲簽名的方案相繼被提出[5-9],這部分方案中,大多是都采用了雙線性對,這種運算計算開銷大。2012年,邵國金等人[10]提出一種基于橢圓曲線DLP的無證書部分盲簽名方案,該方案大大降低了簽名和簽名驗證過程中的計算開銷。2016年,趙振國[11]針對文獻[10]所提出的方案不能提供不可偽造性這一問題,提出了新的無證書部分盲簽名方案。
本文對文獻[11]通過公共信息被篡改具體的攻擊,指出該方案存在安全問題:惡意用戶可以在毫不被察覺的情況下,更改公共信息(雙方事先協(xié)商好的部分),讓簽名者的權(quán)益受到威脅,失去對消息的可控性。本文針對這個問題,提出了一個改進的方案,改進的方案不僅能夠抵抗公共信息被篡改,在滿足部分盲性、不可偽造性等安全性需求的同時,計算效率還得到了進一步提高。
(1)橢圓曲線的離散對數(shù)問題
給定定義于有限域Fq上的橢圓曲線E,選擇一個點P∈E(Fq)作為基點,P的階數(shù)為素數(shù)n,Q∈P,對于任意的a∈,給定P,由Q=aP計算a。整數(shù)a稱為Q的基于P的離散對數(shù),表示為a=。
(2)計算Diffie-Hellman問題
文獻[11]中的無證書部分盲簽名方案由以下四個協(xié)議構(gòu)成:
(1)設(shè)置
設(shè) p、q是兩個大素數(shù),G是由E(Fp)是橢圓曲線上的點組成的階為q加法群;
P0=sP為KGC的公鑰,其中,s∈是KGC的主密鑰,P是G是的一個基點。H1、H2、H3是安全的單向散列函數(shù),H1:{0 ,1}?×G→,H2:{0 ,1}?×{0 ,1}?×G→,H3:{0 ,1}?×{0 ,1}?×G×G×G→。 系統(tǒng)公布參數(shù){p,q,E(Fp),G,P0,H1,H2,H3}。
(2)密鑰設(shè)置
簽名者B將其身份IDB發(fā)送給KGC,KGC隨機選擇 yB∈,計 算YB=yBP ,qB=H1(IDB,YB)和dB=yB+sqB,KGC 返回dB、YB,dB、YB分別作為 B的部分私鑰、部分公鑰。B選擇任意的xB∈作為其私有秘密,計算XB=xBP,并且輸出B的私鑰SB=(xB,dB)和公鑰PB=(YB,XB)。
(3)簽名協(xié)議
用戶A請求簽名者B對消息m簽名,c是雙方共同協(xié)商的公共信息,簽名過程如下:
Step3.簽名(階段2):簽名者B計算k=H3(c,IDB,XB,YB,P0),v=r-u(kxB+dB),將v返回給A;
Step4.去盲:A收到 v后,計算 w=βv+α,則(h,w)是(m,c)的部分盲簽名。
(4)簽名驗證
驗證者通過計算qB=H1(IDB,YB),k=H3(c,IDB,XB,YB,P0)和T=h(kXB+YB+qBP0)+wP來驗證等式h=H2(m,c,T)是否成立。如果等式成立,則接受簽名,反之亦然。
通過分析,文獻[11]方案存在公共信息被惡意篡改的問題。假設(shè)攻擊者將公共信息c修改為c1(c≠c1),利用自己偽造的c1執(zhí)行簽名過程,如下:
用戶A請求簽名者B對消息m簽名,c1是雙方共同協(xié)商的公共信息,簽名過程如下:
Step3.簽名(階段2):簽名者B計算k?=H3(c1,IDB,XB,YB,P0),w?=r-u?(k?xB+dB),將 v?返回給A;
Step4.去盲:A收到 v?后,計算 w?=βv?+α,輸出對(m,c1)的部分盲簽名 (h?,w?)
驗證過程:
因此,驗證者也可以驗證(m,c1)的部分盲簽名(h?,w?)是有效合法的,在不被察覺的情況下,惡意的用戶就將協(xié)商好的公共信息進行了篡改。
針對文獻[11]中存在的問題——任意篡改公共信息,本文在原方案的基礎(chǔ)上進行了改進,改進方案的密鑰產(chǎn)生算法與文獻[11]相同,在設(shè)置中增加了安全的散列函數(shù)H4。密鑰設(shè)置、簽名協(xié)議和簽名驗證如下。
設(shè) p、q是兩個大素數(shù),G是由E(Fp)是橢圓曲線上的點組成的階為q加法群;
P0=sP為KGC的公鑰,其中,s∈是KGC的主密鑰,P是G是的一個基點。H1~H4是安全的散列函數(shù) , H1:{0 ,1}?×G→, H2:{0 ,1}?×{0 ,1}?×G→,H3:{0 ,1}?×{0 ,1}?×G×G×G→,H4:E(Fp)→。系統(tǒng)公布參數(shù){p,q,E(Fp),G,P0,H1,H2,H3,H4}。
簽名者B將其身份IDB發(fā)送給KGC,KGC隨機選擇yB∈,計 算YB=yBP ,qB=H1(IDB,YB)和dB=yB+sqB,KGC返回dB、YB,dB作為B的部分私鑰,YB作為B的部分公鑰。B隨機選擇xB∈Zq*作為其私有秘密,計算XB=xBP,并且輸出B的私鑰SB=(xB,dB)和公鑰PB=(YB,XB)。
用戶A請求B對消息m簽名,c是雙方共同協(xié)商的公共信息,簽名過程如下:
Step3.簽名(階段2):簽名者B計算k=H3(c,IDB,XB,YB,P0),v=rz-u(kxB+dB),將v返回給A;
Step4.去盲:用戶收到 v后,計算w=βv+α,輸出對(m,c)的部分盲簽名(h,w)。
驗證者計算qB=H1(IDB,YB),k=H3(c,IDB,XB,YB,P0)和 z=H4(c),驗證等式wP+h(kBXB+YB+qBP0)=L是否相等。若相等,則接受簽名,否則拒絕。
新方案的正確性證明如下:
針對本文使用的兩個盲化因子α,β∈Zq*,如果簽名者私自保留了u,由于H2是一個安全的哈希函數(shù),簽名者不能從h=H2(m,c,L)中恢復(fù)出信息m。考慮到以下三個式子:
一定存在唯一的 β=hu-1使式(2)成立。如果任意一個簽名(h,w)是有效的,可以計算出唯一的α=w-hu-1v,使得 wP+h(kBXB+YB+qBP0)=L=αP+zβR成立。因此,盲因子α,β一直存在于在部分盲簽名中。根據(jù)文獻[11]中定義1,由于α,β一直存在,所以攻擊者贏得游戲的優(yōu)勢可以忽略。因此,改進的方案能夠滿足部分盲性。
一般情況下,簽名者的私鑰只有自己知道,假設(shè)攻擊者AI通過訪問獲取了系統(tǒng)的三個參數(shù)(s,dB,PB),但是他不知道xB。攻擊者 AI如果想從XB=xBP獲取xB,則他需要解決DLP困難問題。因此不可能獲取SB,無法偽造出有效簽名。
假設(shè)攻擊者將公共信息c修改為c1(c≠c1),攻擊者利用自己偽造的公共信息c1執(zhí)行改進方案的簽名協(xié)議。由于協(xié)商的公共信息和簽名人的私鑰綁定在一起,如果想篡改c,那么他需要解決CDHP困難問題,顯然也是不可性的,所以改進后的方案能夠抵擋攻擊者惡意篡改公共信息c。
改進的方案與文獻[10-11]中的方案進行比較,求解時作出以下假設(shè):p為1024比特;q為160比特;n為1024比特;安全單向哈希函數(shù)的輸出大小為160比特;H、M和E分別表示哈希函數(shù)計算時間、橢圓曲線點加的計算時間和點乘的計算時間。在計算機仿真實驗中,操作系統(tǒng)采用Windows 7系統(tǒng),CPU主頻率為3.40GHz,內(nèi)存為4GB。通過編程實現(xiàn)了橢圓曲線密碼所需要的各種運算,其中:H≈0.0001ms,E≈0.442ms,M≈0.0018ms。結(jié)果見表1。由于多次使用哈希生成值來代替橢圓曲線上的點乘運算,所以計算性能優(yōu)于文獻[10]和文獻[11]。
表1 改進后的方案與其他方案的計算效率比較
本文對趙振國提出的可證安全的無證書部分盲簽名機制進行了分析,發(fā)現(xiàn)該方案并不安全,不能夠承受公共信息被篡改的攻擊,本文為了解決這個問題,在文獻[11]的基礎(chǔ)上,提了一個改進的方案,通過分析表明,新提出的方案是正確的,滿足不可偽造性和部分盲性,方案的總體安全級別高于同類方案,并且在效率上比邵的方案和趙的方案更具有優(yōu)勢,具有廣泛的應(yīng)用。