張金輝 黃加成 梁紅梅 李慧敏
1(應用數學福建省高校重點實驗室 福建 莆田 351100)2(莆田學院數學與金融學院 福建 莆田 351100)3(閩南師范大學數學與統計學院 福建 漳州 363000)
在傳統的公鑰密碼系統中,用戶的公鑰是通過公鑰基礎設施PKI頒發證書來認證的,由此出現了公鑰證書的管理、存儲、發布、驗證等問題[1]。為了簡化證書的管理等問題,1984年,Shamir[2]首次提出了基于身份的公鑰密碼體制,在該體制中使用能夠唯一識別該用戶身份的公開信息來作為用戶的公鑰,這樣用戶的公鑰就不再需要PKI頒發證書認證,從而降低了PKI的證書管理等問題的復雜性。但是,在基于身份的公鑰密碼體制中,用戶的私鑰完全由KGC產生,使得基于身份的公鑰密碼體制存在密鑰托管這一新問題。為了解決該問題,Al-Riyami等[3]在2003年的亞洲密碼學會議上首次引入了無證書公鑰密碼學概念,解決了基于身份公鑰密碼學中存在的用戶密鑰托管問題,也解決了PKI中存在的證書管理問題。
在無證書認證動態群組密鑰協商協議中,對于動態群組中人員的變動后組密鑰的更新總是困難的。伍前紅等[4]提出針對基于ASGKA(Asymmetric Group Key Agreement)協議,允許成員的離開和加入,且高效地完成了密鑰的及時更新。但是由于群成員可能來自不同的時區、領域、網絡類型,而ASGKA不能滿足該需求。張啟坤等[5]提出基于身份的可認證非對稱群群組密鑰協商協議(Identity-Base authenticated Asymmetric Group Key Agreement,IB-AAGKA)解決了群成員因各種差異不能保持多輪在線密鑰協商問題和實現匿名與可認證性并且支持節點的動態群組密鑰更新的問題。由于是基于身份的公鑰密碼體制,存在密鑰的托管問題,陳若昕等[6]提出無證書非對稱群密鑰協商協議,實現了對于群成員公開信息認證的同時又認證了其身份,保證了成員的安全通信,提高了效率。現今隨著網絡計算、即時通信、對等網絡數據共享愈加重要,在這類通信中兩方密鑰協商協議顯得非常重要[7-11]。但是,對于三方以上的秘密通信問題,學者們提出了組密鑰協商協議[12-15]。最近,Kumar A和Tripathi S提出了一個無雙線性對的匿名無證書動態群組密鑰協商協議[13]。經過分析發現,該群組密鑰協商協議是不安全的。本文指出了該協議存在的安全問題,并給出了具體的攻擊方法,最后給出了應對該攻擊的改進方法。
設G1為p階加法循環群且P是它的一個生成元,G2為p階乘法循環群,若映射e:G1×G1→G2滿足下面三條性質,則稱為雙線性對運算。
(2) 非退化性:存在P∈G1,使得e(P,P)≠1G2,其中1G2表示群G2是單位元。
(3) 高效性:對于任意P,Q∈G,都存在有效的算法計算e(P,Q)。



表1為本文用到的一些符號。

表1 符號說明表
(1) KGC選擇安全參數k∈Z+并執行以下操作:
① 選擇一個k位素數p,并確定出{Fp,G,P}。

③ 對于安全參數k,KGC會選擇兩個安全Hash函數作為秘密值:
H2:G×G→{0,1}k
④ KGC發布{Fp,G,P,Ppub,H1,H2}作為系統參數,然后秘密保存主私鑰s。
(2) KGC為用戶頒布部分私鑰Di,具體算法如下:

Ri=riP,hi=H1(IDi‖Ri‖Qi)
Si=(ri+shi)modp
KGC通過安全的信道向用戶Ui頒發用戶的部分私鑰Di=
在收到KGC的部分私鑰Di后,用戶Ui可以通過下列的等式來驗證:
Ri+Hi(IDi‖Ri‖Qi)Ppub=SiP
如果等式成立則部分私鑰有效,反之無效。

(4) 用戶IDi將SKi=
(5) 設置公鑰,計算Pi=(xi+Si)P,Qi=xiP,用戶IDi的公鑰為PKi=
(1) 每個用戶按照下列步驟執行:
① 用戶選擇一個臨時身份TIDi。
③ 用戶Ui向KGC發送以下信息:
(2) 在接收到來自每個用戶Ui的上述消息時,KGC執行以下操作:
① 計算Ki=sTi=(Kix,Kiy),1≤i≤n。
② 使用Kix對來自Ui的消息進行解密得到Ti的值。
③ KGC驗證解密的Ti是否與從Ui接收到的Ti相同;如果驗證成功,則執行后面的操作,否則拒絕。
④ KGC計算hti=H1(TIDi),Sti=(ri+shti)modp,1≤i≤n。
⑤ KGC向每個使用Kix加密的用戶發送以下內容:
{Sti‖ht1‖Q1‖ht2‖Q2‖…‖htn‖Qn}_kix
(1)Ui首先解密從KGC收到的消息并獲得它們的臨時部分密鑰Sti,TIDj的哈希值和其他成員的公開密鑰Qj(1≤j≤n),Ui也可以在列表中找到自己的位置,并根據列表中的位置設置下標。

(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);



接著每個用戶都將它們的Xi傳播給群組中的其他用戶,在得到所有Xj(j≠i)之后,Ui首先驗證收到的消息如下:X1⊕X2⊕…⊕Xn=0。


最后每個用戶的組會話密鑰計算為:
假設新用戶{Un+1,Un+2,…,Um}想要加入現有的組{U1,U2,…,Un},則步驟如下:
(1) 從{U1,U2,…,Un}選擇出兩個用戶U1和Un,重新選擇秘密值x1和xn,更新它們的公私鑰。此時的分組情況為{U1,U2,…,Un}與{U1,Un+1,Un+2,…,Um,Un}。

(3) 重復密鑰協商階段后與第一組{U1,U2,…,Un}得出密鑰SK1與第二組{U1,Un+1,Un+2,…,Um,Un}得出密鑰SK2。
(4)U1和Un把密鑰SK1發送給第二組的其余成員{Un+1,Un+2,…,Um},把SK2發送給第一組的其他成員{U2,…,Un-1}。
(5) 把兩組合并為{U1,U2,…,Un,Un+1,Un+2,…,Um},此時新的組密鑰為SKnew=H1(SK1‖SK2)。
假設U={U1,U2,…,Un}是當前組,并且L={Ul1,Ul2,…,Uln}是離開成員的集合,其中{l1,l2,…,ln}∈{1,2,…,n},此時我們將剩下的成員集合表示為:
A={Ua1,Ua2,…,Ua(n-n′)}=U-Ln>n′
令Ua1∈A作為離開管理員,用Ua1的臨時身份將所有離開成員L的hti傳播給A。該操作步驟如下:

(2) 若成員Uk∈A,且其相鄰的成員沒有改變,就什么都不做,只是簡單地傳播它們之前已計算好的Xk作為新的Xnewk即(Xnewk=Xk),然后再傳播給A。
(3) 每個成員Ui∈A在接收到所有的Xnewj(j≠i)后驗證:
Xnewa1⊕Xnewa2⊕…⊕Xnewa(n-n′)=0
本節對文獻[13]中的密鑰協商協議進行分析,指出攻擊者無須知道用戶的私鑰即可以繞過KGC的身份驗證,從而假冒用戶參與組密鑰的協商,盜取組密鑰。
式中:Ppub為群成員Ui的公鑰。
(3) 攻擊者向KGC發送以下信息:
在接收到來自攻擊者的上述消息時,KGC會執行以下操作:

(2) 使用Kix對來自Ui的消息進行解密得到Ti的值,所以得到的Kix可以成功地解密得到{Ti,TIDi,Qi}。

(4) 現在KGC計算如下:
hti=H1(TIDi)
Sti=(ri+s.hti)modp1≤i≤n
(5) KGC向每個使用Kix加密的用戶發送以下內容:{Sti‖ht1‖Q1‖ht2‖Q2‖…‖htn‖Qn}_kix。

(1) 在驗證成功之后攻擊者計算如下:
①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) 由于每個用戶也會把它們的Xi傳播給群組中的其他用戶,則攻擊者可以得到所有Xi,接收到消息之后,驗證等式是否成立:X1⊕X2⊕…⊕Xn=0。
在成功驗證后,攻擊者就可以通過上述數據計算:

通過上述分析可知,攻擊者可以成功繞過KGC的驗證,從而偽裝某個用戶潛入進行組密鑰的協商。因此,文獻[13]中的組密鑰協商協議是不安全的。
上述攻擊成功的原因是KGC在用戶匿名身份的注冊中無法證實用戶的真實身份。針對這個問題,下面給出兩種改進方法,使得KGC可以確信用戶的真實身份。這里采用和文獻[13]一樣的系統參數。
(1) 讓用戶選擇一個臨時身份TIDi并且隨機選擇ti∈RZp*,計算如下:
Ti=tiP,Ki=tiPpub=(Kix,Kiy)
(2) 計算完成之后Ui向KGC發送以下信息:
(3) KGC接收到Ui信息后可計算Ki=sTi=(Kix,Kiy)得到Kix(因為tiPpub=tisP=sTi)。
(4) KGC根據Kix解密得到{Ti,TIDi,Qi,

(6) KGC根據Kix解密得到的
顯然,由于用戶的部分私鑰是KGC為其生成并且通過安全信道發送給用戶的,即用戶的部分私鑰只有用戶和KGC擁有。攻擊者若想要替換用戶的公鑰,還需要生成和用戶身份及新公鑰一致的部分私鑰,就必須從Ri=riP,hi=H1(IDi‖Ri‖Qi),Si=(ri+shi)modp中獲得主私鑰s才可以做到,這是求離散對數困難問題,所以該改進方法是可行的。
改進方法一是把用于用戶的部分私鑰直接作為被加密的內容進行傳送,雖然是用加密的方式傳輸,但若在數據的解密過程中使用不當,容易導致用戶私鑰的泄露。所以這里采用數字簽名的方法加以改進,具體如下:

(1)Ti=tiP;
(2)Ki=tiPpub=(Kix,Kiy);
(3) 令v=H1(IDi‖Ri‖Qi‖Ti),計算u=ti+Siv;
(4) 發送
(5) KGC驗證uP=Ti+vRi+vhiPpub,式中hi=H1(IDi‖Ri‖Qi)。
驗證正確性:
uP=(ti+Siv)P=tiP+SivP=Ti+(ri+shi)vP=
Ti+rivP+shivP=Ti+vRi+vhiPpub
由此可知,(u,Ti)事實上為用戶使用部分私鑰Si對身份和公鑰消息IDi、Ri、Qi做的數字簽名。如果攻擊者想要冒充群組里的成員,就必須得到用戶的部分私鑰Si,而用戶的部分私鑰只有用戶和KGC擁有。或者攻擊者得從Ri=riP、Ppub=sP中去計算得到ri和s,這顯然也是離散對數問題,所以該改進方法是可行的。因此,通過這個方式KGC可以確信用戶的真實身份。
本文對文獻[13]中的組密鑰的協商進行了分析,指出該協議是不安全的,給出具體的攻擊方法,并在此基礎上提出了應對該攻擊的兩種改進方法。第一種是在發送給KGC的內容中直接添加用戶的部分私鑰去讓KGC驗證;第二種是使用用戶的部分私鑰進行簽名后再發送。本文給出的分析方法對于同類協議,特別是基于無證書公鑰系統的協議的設計具有借鑒意義。