本發明涉及數據加密與身份認證技術領域,具體地說是一種面向客戶/服務器網絡安全實用的匿名認證方法。
背景技術:
一般的客戶/服務器系統模型主要由兩方構成:客戶端(即用戶)與服務器。用戶向服務器請求服務時,服務器需要先確認用戶的身份,如果用戶身份合法,服務器才會為其提供服務。而在一些客戶/服務器(Client/Server)網絡應用中用戶的身份是私密的,涉及用戶的隱私,所以實現身份認證的同時保護用戶匿名性至關重要。例如在遠程醫療輔助系統或遠程醫療查詢系統中,一些患有敏感疾病的患者希望在查詢或輔助治療的同時能夠保護自身的身份隱私。相關研究中用戶的匿名性可以分為兩個方面:一方面,請求服務的用戶只對網絡中其他用戶匿名,服務器能夠知曉用戶身份;另一方面,不僅網絡中其他用戶不知道請求服務的用戶的身份,并且服務器也不知道該用戶身份。實際上,在現實生活中多數情況下服務器并不關心用戶的身份,而且服務器還存在泄露用戶身份信息和相關隱私數據的風險,所以在這些應用中,用戶需要對服務器完全匿名,即讓服務器不僅無法知道用戶的身份而且無法判斷兩條請求消息是否來自同一用戶,實現用戶身份的匿名性和請求消息的不可鏈接性。
匿名認證能夠在認證用戶身份的同時實現用戶匿名性。目前存在一些匿名認證方法,例如基于假名、群簽名等技術,能夠在認證用戶身份的同時保護用戶的身份隱私,從而達到匿名性。然而這些方案存在以下不足之處:
(1)基于假名的匿名認證方案:客戶端需要存儲和維護一個假名池以及與每個假名相關的參數,增加了客戶端的存儲代價,而客戶端的存儲能力和計算能力往往較低。此外,每次請求服務均需要消耗掉一個假名。而假名的個數有限,所以需要定期更新假名池。但更新假名池需要消耗大量的系統資源,從而導致該類方案很難應用于大規模的客戶/服務器網絡中,尤其是大規模的無線移動客戶/服務器網絡。
(2)基于群簽名的匿名認證方案:此類匿名認證方案的計算與通信開銷通常與客戶/服務器網絡中客戶端的數量有關,其計算與通信開銷隨著客戶端數量呈線性增長,很難應用于大規模客戶/服務器網絡,尤其是大規模的無線移動客戶端-服務器網絡。
技術實現要素:
本發明為了解決上述現有技術存在的不足之處,提供一種高效實用的面向客戶/服務器網絡的匿名認證方法,以期能有效的解決現有客戶/服務器網絡中客戶端匿名認證過程中存儲代價和計算代價高以及認證效率低的問題,同時提高客戶端的隱私性、以及服務器的安全性。
本發明為解決技術問題所采用的技術方案是:
本發明一種面向客戶/服務器網絡的匿名認證方法,所述客戶/服務器網絡包括:一個可信中心KGC、一個服務器以及若干個客戶端,所述可信中心KGC用于生成和管理密鑰;記任意一個客戶端為U;其特點是,在所述服務器S的網關處設置一個安全硬件SH,并基于所述安全硬件SH按如下步驟進行匿名認證:
步驟1、所述可信中心KGC生成并公布系統參數,同時,生成所有客戶端、服務器和安全硬件的私鑰和公鑰,以及為所述安全硬件SH生成n-1個虛擬客戶端的有效簽名;
步驟2、所述任意一個客戶端U根據所述系統參數、自身的私鑰以及所述服務器S的公鑰生成簽名σU;
步驟3、所述客戶端U根據密鑰協商協議和所述系統參數生成與所述安全硬件SH共享的密鑰k,并利用所述密鑰k對驗證所述簽名σU所必需的輔助消息C加密,形成密文Ek(C),并把所述簽名σU及所述密文Ek(C)發送給所述安全硬件SH;
步驟4、所述安全硬件SH根據所述密鑰協商協議和所述系統參數生成與所述客戶端U共享的密鑰k,并利用所述密鑰k對所述密文Ek(C)進行解密,得到所述輔助消息C;
步驟5、所述安全硬件SH將所述簽名σU和n-1個已存儲的有效簽名進行聚合,得到聚合簽名并結合所述輔助消息C生成最終聚合簽名消息M后,發送給所述服務器S;
步驟6、所述服務器S利用自身的私鑰以及所述聚合簽名消息M對所述聚合簽名進行驗證;當驗證通過時,表示所述客戶端U的簽名σU為有效簽名,則所述服務器S根據所述密鑰協商協議得到與所述客戶端U共享的會話密鑰key,并利用所述會話密鑰key生成認證碼MACkey及相關消息后發給所述安全硬件SH;
步驟7、所述安全硬件SH轉發所述認證碼MACkey及相關消息給所述客戶端U;并將所述客戶端U的有效簽名σU覆蓋所述n-1個已存儲的任意一個有效簽名,從而更新所述n-1個已存儲的有效簽名;
步驟8、所述客戶端U根據所述系統參數和所述相關消息得到所述會話密鑰key,并利用所述會話密鑰key對所述認證碼MACkey進行驗證;當驗證通過時,進而能利用所述會話密鑰key得到所述服務器S的后繼服務。
與現有技術相比,本發明具有以下優點:
1.本發明引入了安全硬件,安全硬件將客戶端簽名與其存儲的其他虛擬或已認證過的客戶端的有效簽名聚合,使得服務器只能驗證聚合后的簽名;另外客戶端將驗證其簽名的輔助消息先加密后傳輸,只允許安全硬件SH解密,保證了服務器無法直接驗證客戶端簽名,保護了客戶端的身份隱私,實現了匿名性。
2.本發明通過引入安全硬件,能承擔客戶端的部分運算工作,且客戶端不用維護假名池,從而有效的降低了客戶端的存儲代價和計算開銷,客戶端簽名時只需做少量的加法循環群上的點乘運算,降低了客戶端計算開銷,進而提高了認證效率。
3.本發明客戶端將自身公鑰和固定參數先加密后傳輸,保證客戶端每次生成的簽名和相關消息都是隨機的,無關聯的,實現了消息的不可鏈接性。
4.本發明客戶端利用了自身的私鑰和服務器的公鑰對請求消息進行簽名,使得服務器在驗證簽名的有效性時必須使用相對應的私鑰,也即只有指定服務器能夠驗證簽名,加強了系統的安全性。
5.本發明中每個參與方的計算及通信開銷與客戶端的數量無關,因此特別適宜應用于大規模的客戶/服務器網絡,尤其是大規模的無線移動客戶端-服務器網絡。
附圖說明
圖1為本發明系統模型圖。
具體實施方式
如圖1所示,本實施例是基于一個可信中心KGC、一個服務器S、一個安全硬件SH以及若干個客戶端構成的客戶/服務器網絡。可信中心KGC:對系統進行初始化,并為各參與方生成和管理密鑰;服務器S:為系統中合法用戶提供遠程服務;安全硬件:部署在服務器的網關處,只執行事先燒制的程序,任何人不能對其進行修改;相當于一個黑盒。客戶端一般為終端設備如PC,也可以是移動智能設備如智能手機等,計算和存儲能力有限。一種面向客戶/服務器網絡的匿名認證方法是按如下步驟進行:
步驟1、可信中心KGC生成并公布系統參數,同時,生成所有客戶端、服務器和安全硬件的私鑰和公鑰,以及為安全硬件SH生成n-1個虛擬客戶端的有效簽名;
1.1)KGC生成系統參數;
1.1.1)為了達到與1024比特RSA相同的安全等級,可信中心KGC選取一個512比特的大素數p=12ql-1,其中q=2159+217+1,即160比特的Solinas素數;
1.1.2)選取一個定義在有限域Fp上的超奇異橢圓曲線E/Fp:y2=x3+x,并在此基礎上定義一個Tate配對e:G1×G1→G2。其中G1、G2都為q階的加法循環群;
1.1.3)選擇四個安全單向哈希函數H4:G1→G1;
1.2)KGC選擇秘密值并計算QKGC=sP作為公鑰。服務器S的公鑰為QS=sSP,安全硬件SH的公鑰為QSH=sSHP;
步驟1.2)中密鑰安全性基于離散對數問題(discrete logarithm problem,DLP),即給定aP,P∈G1,計算
1.3)客戶端U將自己的真實身份IDU提交給可信中心KGC,經檢驗合法后,KGC選擇隨機數并計算YU=yUP,hU=H1(IDU,YU),dU=yU+hUs。KGC通過安全信道將(YU,dU,hU)傳輸給客戶端,dU作為部分私鑰,YU作為部分公鑰。安全套接字協議(Secure Sockets Layer,SSL)和傳輸層安全協議(Transport Layer Security,TLS)可以確保消息在網絡中安全的傳送,可以使用其中一個來建立安全信道;
1.4)客戶端U收到(YU,dU)后,選擇隨機數計算XU=xUP,(XU,YU)作為公鑰、(xU,dU)作為私鑰。
1.5)可信中心KGC生成安全硬件SH,KGC使用公開的簽名算法生成n-1個虛擬客戶端的有效簽名(σj,Vj)(j=1,...,n-1)及相關消息(Xj,Yj,hj,mj)(j=1,2,...n-1)交給安全硬件保存,這里n是一個小整數,與客戶端的個數無關,例如n=6。KGC為安全硬件加載聚合客戶端簽名的算法,并且公開系統參數(G1,G2,e,q,P,QKGC,QS,QSH,H1,H2,H3,H4)。
步驟2、任意一個客戶端U根據系統參數、自身的私鑰以及服務器S的公鑰生成簽名σU;
客戶端U生成請求消息mU,選擇隨機數計算Q=H4(QKGC)。利用式(1)、式(2)和式(3)生成對請求消息mU的簽名:
wU=H2(mU,XU,YU,QKGC) (1)
VU=vUQS (2)
σU=(wUxU+dU+vU)Q (3)
(σU,VU)即是客戶端對請求消息mU所做的簽名。
步驟2中簽名的不可偽造性基于計算性Diffie-Hellman問題(computation Diffie-Hellman problem,CDH問題),即給定aP,bP∈G1,計算abP∈G1。在隨機預言模型下,以某種不可忽略的概率,攻擊者偽造兩個有效簽名(mU,σU,wU,VU),(mU',σU',wU',VU),進而可以得到式(4)
所以,使用(TU,dU),挑戰者可以為請求消息mU任意產生有效的簽名(σU,wU,VU),其中wU=H2(mU,XU,YU,QKGC),等同于真實簽名者使用(xU,dU)對mi進行簽名。也即挑戰者可以以式(4)解決CDH問題:
所以該方法中簽名具有不可偽造性。
步驟3、客戶端U根據密鑰協商協議和系統參數生成與安全硬件SH共享的密鑰k,并利用密鑰k對驗證簽名σU所必需的輔助消息C加密,形成密文Ek(C),并把簽名σU及密文Ek(C)發送給安全硬件SH;
3.1)客戶端U選擇隨機數利用式(6)、式(7)和式(8)生成與安全硬件共享密鑰:
E=eUP (6)
E′=eUQSH (7)
k=H3(tc,E,E') (8)
其中tc為時間戳,k為客戶端與安全硬件共享的密鑰;
步驟3.1)中共享密鑰k安全基于計算性Diffie-Hellman問題(computation Diffie-Hellman problem,CDH問題),即給定aP,bP∈G1,計算abP∈G1。
3.2)輔助消息C是客戶端的公鑰和固定參數hU的集合,C=(XU,YU,hU),使用密鑰k加密消息C生成密文Ek(C),其中Ek(·)是常用的對稱加密操作,例如AES。客戶端把簽名及加密后的相關消息(σU,VU,Ek(C),E,tc,mU)發送給安全硬件。
步驟4、安全硬件SH根據密鑰協商協議和系統參數生成與客戶端U共享的密鑰k,并利用密鑰k對密文Ek(C)進行解密,得到輔助消息C;
安全硬件SH收到簽名及其他相關消息(σU,VU,Ek(C),E,tc,mU)后,先檢驗時間戳tc,若tc滿足t-tC≤Δt則通過檢驗。然后安全硬件利用式(9)(10)獲得共享密鑰:
E′=sSH·E (9)
k=H3(tc,E,E') (10)
SH使用密鑰k解密密文Ek(C),獲得輔助信息C=(XU,YU,hU)。
步驟5、安全硬件SH將簽名σU和n-1個已存儲的有效簽名進行聚合,得到聚合簽名結合輔助消息C生成最終聚合簽名消息M,并發送給服務器S;
5.1)安全硬件利用式(11)(12)將客戶端U的簽名(σU,VU)與n-1個已存儲的有效簽名(σj,Vj)(j=1,2,…,n-1)進行聚合:
(σ,V)即為聚合簽名。然后安全硬件計算wU=H2(mU,XU,YU,QKGC)、WU=wUXU+YU+hUQKGC;
5.2)安全硬件SH利用輔助消息C、系統參數以及存儲的有效簽名消息分別計算式(13)(14):
wj=H2(mj,Xj,Yj,QKGC)(j=1,2,…,n-1) (13)
Wj=wjXj+Yj+hjQKGC(j=1,2,…,n-1) (14)
安全硬件將(σ,V,E,WU,W1…Wn-1)發送給服務器。
步驟6、服務器S利用自身的私鑰以及聚合簽名消息M對聚合簽名進行驗證;當驗證通過時,表示客戶端U的簽名σU為有效簽名,則服務器S根據密鑰協商協議得到與客戶端U共享的會話密鑰key,并利用會話密鑰key生成認證碼MACkey及相關消息后發給安全硬件SH;
6.1)服務器S利用式(15)驗證聚合簽名:
若驗證通過,則服務器為客戶端計算會話密鑰key;
步驟6.1)中等式(15)的正確性如式(16)所示:
6.2)服務器選擇隨機數計算R=rP,利用式(17)計算與客戶端U共享的會話密鑰key:
key=rE=eurP (17)
服務器利用key生成消息認證碼MACkey,發送(MACkey,R)給安全硬件。
步驟7、安全硬件SH轉發認證碼MACkey及相關消息給客戶端U;并將客戶端U的有效簽名σU覆蓋n-1個已存儲的任意一個有效簽名,從而更新n-1個已存儲的有效簽名;
安全硬件接受(MACkey,R)后,轉發消息(MACkey,R)給客戶端U,并將客戶端U的有效簽名(σU,VU)覆蓋n-1個已存儲的有效簽名中的任意一個,更新有效簽名池,經過一定次數的更新后,安全硬件中存儲的簽名均為真實用戶的有效簽名。
步驟8、客戶端U根據系統參數和相關消息得到會話密鑰key,并利用會話密鑰key對認證碼MACkey進行驗證;當驗證通過時,進而能利用會話密鑰key得到服務器S的后繼服務。
客戶端U接收消息(MACkey,R)后,根據式(18)計算得到會話密鑰key:
key=eUR=eurP (18)
并利用key驗證MACkey,若驗證通過,客戶端利用key得到服務器S的相關服務。
步驟8中會話密鑰安全性基于離散對數問題(discrete logarithm problem,DLP),即給定aP,P∈G1,計算