張金輝 黃加成 梁紅梅 李慧敏
1(應(yīng)用數(shù)學(xué)福建省高校重點(diǎn)實(shí)驗(yàn)室 福建 莆田 351100)2(莆田學(xué)院數(shù)學(xué)與金融學(xué)院 福建 莆田 351100)3(閩南師范大學(xué)數(shù)學(xué)與統(tǒng)計(jì)學(xué)院 福建 漳州 363000)
在傳統(tǒng)的公鑰密碼系統(tǒng)中,用戶的公鑰是通過公鑰基礎(chǔ)設(shè)施PKI頒發(fā)證書來認(rèn)證的,由此出現(xiàn)了公鑰證書的管理、存儲(chǔ)、發(fā)布、驗(yàn)證等問題[1]。為了簡(jiǎn)化證書的管理等問題,1984年,Shamir[2]首次提出了基于身份的公鑰密碼體制,在該體制中使用能夠唯一識(shí)別該用戶身份的公開信息來作為用戶的公鑰,這樣用戶的公鑰就不再需要PKI頒發(fā)證書認(rèn)證,從而降低了PKI的證書管理等問題的復(fù)雜性。但是,在基于身份的公鑰密碼體制中,用戶的私鑰完全由KGC產(chǎn)生,使得基于身份的公鑰密碼體制存在密鑰托管這一新問題。為了解決該問題,Al-Riyami等[3]在2003年的亞洲密碼學(xué)會(huì)議上首次引入了無證書公鑰密碼學(xué)概念,解決了基于身份公鑰密碼學(xué)中存在的用戶密鑰托管問題,也解決了PKI中存在的證書管理問題。
在無證書認(rèn)證動(dòng)態(tài)群組密鑰協(xié)商協(xié)議中,對(duì)于動(dòng)態(tài)群組中人員的變動(dòng)后組密鑰的更新總是困難的。伍前紅等[4]提出針對(duì)基于ASGKA(Asymmetric Group Key Agreement)協(xié)議,允許成員的離開和加入,且高效地完成了密鑰的及時(shí)更新。但是由于群成員可能來自不同的時(shí)區(qū)、領(lǐng)域、網(wǎng)絡(luò)類型,而ASGKA不能滿足該需求。張啟坤等[5]提出基于身份的可認(rèn)證非對(duì)稱群群組密鑰協(xié)商協(xié)議(Identity-Base authenticated Asymmetric Group Key Agreement,IB-AAGKA)解決了群成員因各種差異不能保持多輪在線密鑰協(xié)商問題和實(shí)現(xiàn)匿名與可認(rèn)證性并且支持節(jié)點(diǎn)的動(dòng)態(tài)群組密鑰更新的問題。由于是基于身份的公鑰密碼體制,存在密鑰的托管問題,陳若昕等[6]提出無證書非對(duì)稱群密鑰協(xié)商協(xié)議,實(shí)現(xiàn)了對(duì)于群成員公開信息認(rèn)證的同時(shí)又認(rèn)證了其身份,保證了成員的安全通信,提高了效率?,F(xiàn)今隨著網(wǎng)絡(luò)計(jì)算、即時(shí)通信、對(duì)等網(wǎng)絡(luò)數(shù)據(jù)共享愈加重要,在這類通信中兩方密鑰協(xié)商協(xié)議顯得非常重要[7-11]。但是,對(duì)于三方以上的秘密通信問題,學(xué)者們提出了組密鑰協(xié)商協(xié)議[12-15]。最近,Kumar A和Tripathi S提出了一個(gè)無雙線性對(duì)的匿名無證書動(dòng)態(tài)群組密鑰協(xié)商協(xié)議[13]。經(jīng)過分析發(fā)現(xiàn),該群組密鑰協(xié)商協(xié)議是不安全的。本文指出了該協(xié)議存在的安全問題,并給出了具體的攻擊方法,最后給出了應(yīng)對(duì)該攻擊的改進(jìn)方法。
設(shè)G1為p階加法循環(huán)群且P是它的一個(gè)生成元,G2為p階乘法循環(huán)群,若映射e:G1×G1→G2滿足下面三條性質(zhì),則稱為雙線性對(duì)運(yùn)算。
(2) 非退化性:存在P∈G1,使得e(P,P)≠1G2,其中1G2表示群G2是單位元。
(3) 高效性:對(duì)于任意P,Q∈G,都存在有效的算法計(jì)算e(P,Q)。
表1為本文用到的一些符號(hào)。
表1 符號(hào)說明表
(1) KGC選擇安全參數(shù)k∈Z+并執(zhí)行以下操作:
① 選擇一個(gè)k位素?cái)?shù)p,并確定出{Fp,G,P}。
③ 對(duì)于安全參數(shù)k,KGC會(huì)選擇兩個(gè)安全Hash函數(shù)作為秘密值:
H2:G×G→{0,1}k
④ KGC發(fā)布{Fp,G,P,Ppub,H1,H2}作為系統(tǒng)參數(shù),然后秘密保存主私鑰s。
(2) KGC為用戶頒布部分私鑰Di,具體算法如下:
Ri=riP,hi=H1(IDi‖Ri‖Qi)
Si=(ri+shi)modp
KGC通過安全的信道向用戶Ui頒發(fā)用戶的部分私鑰Di=
在收到KGC的部分私鑰Di后,用戶Ui可以通過下列的等式來驗(yàn)證:
Ri+Hi(IDi‖Ri‖Qi)Ppub=SiP
如果等式成立則部分私鑰有效,反之無效。
(4) 用戶IDi將SKi=
(5) 設(shè)置公鑰,計(jì)算Pi=(xi+Si)P,Qi=xiP,用戶IDi的公鑰為PKi=
(1) 每個(gè)用戶按照下列步驟執(zhí)行:
① 用戶選擇一個(gè)臨時(shí)身份TIDi。
③ 用戶Ui向KGC發(fā)送以下信息:
(2) 在接收到來自每個(gè)用戶Ui的上述消息時(shí),KGC執(zhí)行以下操作:
① 計(jì)算Ki=sTi=(Kix,Kiy),1≤i≤n。
② 使用Kix對(duì)來自Ui的消息進(jìn)行解密得到Ti的值。
③ KGC驗(yàn)證解密的Ti是否與從Ui接收到的Ti相同;如果驗(yàn)證成功,則執(zhí)行后面的操作,否則拒絕。
④ KGC計(jì)算hti=H1(TIDi),Sti=(ri+shti)modp,1≤i≤n。
⑤ KGC向每個(gè)使用Kix加密的用戶發(fā)送以下內(nèi)容:
{Sti‖ht1‖Q1‖ht2‖Q2‖…‖htn‖Qn}_kix
(1)Ui首先解密從KGC收到的消息并獲得它們的臨時(shí)部分密鑰Sti,TIDj的哈希值和其他成員的公開密鑰Qj(1≤j≤n),Ui也可以在列表中找到自己的位置,并根據(jù)列表中的位置設(shè)置下標(biāo)。
(3)Ui將
①Ki,i+1=(xi+Sti)Wi+1+wi(Qi+1+Ri+1+ht(i+1)Ppub);
④Ki,i-1=(xi+Sti)Wi-1+wi(Qi-1+Ri-1+ht(i-1)Ppub);
接著每個(gè)用戶都將它們的Xi傳播給群組中的其他用戶,在得到所有Xj(j≠i)之后,Ui首先驗(yàn)證收到的消息如下:X1⊕X2⊕…⊕Xn=0。
最后每個(gè)用戶的組會(huì)話密鑰計(jì)算為:
假設(shè)新用戶{Un+1,Un+2,…,Um}想要加入現(xiàn)有的組{U1,U2,…,Un},則步驟如下:
(1) 從{U1,U2,…,Un}選擇出兩個(gè)用戶U1和Un,重新選擇秘密值x1和xn,更新它們的公私鑰。此時(shí)的分組情況為{U1,U2,…,Un}與{U1,Un+1,Un+2,…,Um,Un}。
(3) 重復(fù)密鑰協(xié)商階段后與第一組{U1,U2,…,Un}得出密鑰SK1與第二組{U1,Un+1,Un+2,…,Um,Un}得出密鑰SK2。
(4)U1和Un把密鑰SK1發(fā)送給第二組的其余成員{Un+1,Un+2,…,Um},把SK2發(fā)送給第一組的其他成員{U2,…,Un-1}。
(5) 把兩組合并為{U1,U2,…,Un,Un+1,Un+2,…,Um},此時(shí)新的組密鑰為SKnew=H1(SK1‖SK2)。
假設(shè)U={U1,U2,…,Un}是當(dāng)前組,并且L={Ul1,Ul2,…,Uln}是離開成員的集合,其中{l1,l2,…,ln}∈{1,2,…,n},此時(shí)我們將剩下的成員集合表示為:
A={Ua1,Ua2,…,Ua(n-n′)}=U-Ln>n′
令Ua1∈A作為離開管理員,用Ua1的臨時(shí)身份將所有離開成員L的hti傳播給A。該操作步驟如下:
(2) 若成員Uk∈A,且其相鄰的成員沒有改變,就什么都不做,只是簡(jiǎn)單地傳播它們之前已計(jì)算好的Xk作為新的Xnewk即(Xnewk=Xk),然后再傳播給A。
(3) 每個(gè)成員Ui∈A在接收到所有的Xnewj(j≠i)后驗(yàn)證:
Xnewa1⊕Xnewa2⊕…⊕Xnewa(n-n′)=0
本節(jié)對(duì)文獻(xiàn)[13]中的密鑰協(xié)商協(xié)議進(jìn)行分析,指出攻擊者無須知道用戶的私鑰即可以繞過KGC的身份驗(yàn)證,從而假冒用戶參與組密鑰的協(xié)商,盜取組密鑰。
式中:Ppub為群成員Ui的公鑰。
(3) 攻擊者向KGC發(fā)送以下信息:
在接收到來自攻擊者的上述消息時(shí),KGC會(huì)執(zhí)行以下操作:
(2) 使用Kix對(duì)來自Ui的消息進(jìn)行解密得到Ti的值,所以得到的Kix可以成功地解密得到{Ti,TIDi,Qi}。
(4) 現(xiàn)在KGC計(jì)算如下:
hti=H1(TIDi)
Sti=(ri+s.hti)modp1≤i≤n
(5) KGC向每個(gè)使用Kix加密的用戶發(fā)送以下內(nèi)容:{Sti‖ht1‖Q1‖ht2‖Q2‖…‖htn‖Qn}_kix。
(1) 在驗(yàn)證成功之后攻擊者計(jì)算如下:
①Ki,i+1=(xi+Sti)Wi+1+wi(Qi+1+Ri+1+ht(i+1)Ppub);
④Ki,i-1=(xi+Sti)Wi-1+wi(Qi-1+Ri-1+ht(i-1)Ppub);
(2) 由于每個(gè)用戶也會(huì)把它們的Xi傳播給群組中的其他用戶,則攻擊者可以得到所有Xi,接收到消息之后,驗(yàn)證等式是否成立:X1⊕X2⊕…⊕Xn=0。
在成功驗(yàn)證后,攻擊者就可以通過上述數(shù)據(jù)計(jì)算:
通過上述分析可知,攻擊者可以成功繞過KGC的驗(yàn)證,從而偽裝某個(gè)用戶潛入進(jìn)行組密鑰的協(xié)商。因此,文獻(xiàn)[13]中的組密鑰協(xié)商協(xié)議是不安全的。
上述攻擊成功的原因是KGC在用戶匿名身份的注冊(cè)中無法證實(shí)用戶的真實(shí)身份。針對(duì)這個(gè)問題,下面給出兩種改進(jìn)方法,使得KGC可以確信用戶的真實(shí)身份。這里采用和文獻(xiàn)[13]一樣的系統(tǒng)參數(shù)。
(1) 讓用戶選擇一個(gè)臨時(shí)身份TIDi并且隨機(jī)選擇ti∈RZp*,計(jì)算如下:
Ti=tiP,Ki=tiPpub=(Kix,Kiy)
(2) 計(jì)算完成之后Ui向KGC發(fā)送以下信息:
(3) KGC接收到Ui信息后可計(jì)算Ki=sTi=(Kix,Kiy)得到Kix(因?yàn)閠iPpub=tisP=sTi)。
(4) KGC根據(jù)Kix解密得到{Ti,TIDi,Qi,
(6) KGC根據(jù)Kix解密得到的
顯然,由于用戶的部分私鑰是KGC為其生成并且通過安全信道發(fā)送給用戶的,即用戶的部分私鑰只有用戶和KGC擁有。攻擊者若想要替換用戶的公鑰,還需要生成和用戶身份及新公鑰一致的部分私鑰,就必須從Ri=riP,hi=H1(IDi‖Ri‖Qi),Si=(ri+shi)modp中獲得主私鑰s才可以做到,這是求離散對(duì)數(shù)困難問題,所以該改進(jìn)方法是可行的。
改進(jìn)方法一是把用于用戶的部分私鑰直接作為被加密的內(nèi)容進(jìn)行傳送,雖然是用加密的方式傳輸,但若在數(shù)據(jù)的解密過程中使用不當(dāng),容易導(dǎo)致用戶私鑰的泄露。所以這里采用數(shù)字簽名的方法加以改進(jìn),具體如下:
(1)Ti=tiP;
(2)Ki=tiPpub=(Kix,Kiy);
(3) 令v=H1(IDi‖Ri‖Qi‖Ti),計(jì)算u=ti+Siv;
(4) 發(fā)送
(5) KGC驗(yàn)證uP=Ti+vRi+vhiPpub,式中hi=H1(IDi‖Ri‖Qi)。
驗(yàn)證正確性:
uP=(ti+Siv)P=tiP+SivP=Ti+(ri+shi)vP=
Ti+rivP+shivP=Ti+vRi+vhiPpub
由此可知,(u,Ti)事實(shí)上為用戶使用部分私鑰Si對(duì)身份和公鑰消息IDi、Ri、Qi做的數(shù)字簽名。如果攻擊者想要冒充群組里的成員,就必須得到用戶的部分私鑰Si,而用戶的部分私鑰只有用戶和KGC擁有?;蛘吖粽叩脧腞i=riP、Ppub=sP中去計(jì)算得到ri和s,這顯然也是離散對(duì)數(shù)問題,所以該改進(jìn)方法是可行的。因此,通過這個(gè)方式KGC可以確信用戶的真實(shí)身份。
本文對(duì)文獻(xiàn)[13]中的組密鑰的協(xié)商進(jìn)行了分析,指出該協(xié)議是不安全的,給出具體的攻擊方法,并在此基礎(chǔ)上提出了應(yīng)對(duì)該攻擊的兩種改進(jìn)方法。第一種是在發(fā)送給KGC的內(nèi)容中直接添加用戶的部分私鑰去讓KGC驗(yàn)證;第二種是使用用戶的部分私鑰進(jìn)行簽名后再發(fā)送。本文給出的分析方法對(duì)于同類協(xié)議,特別是基于無證書公鑰系統(tǒng)的協(xié)議的設(shè)計(jì)具有借鑒意義。