專利名稱:一種改進的密鑰交換協(xié)議的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于密碼協(xié)議技術(shù)領(lǐng)域,具體涉及一種改進的密鑰交換協(xié)議。
背景技術(shù):
本發(fā)明協(xié)議基于發(fā)明人在專利申請書200710047344.8中所給出的密鑰交換協(xié)議。為了說明書描述方便,專利申請書200710047344.8中所給出的密鑰交換協(xié)議被稱為YYZ密鑰交換協(xié)議。下面為YYZ協(xié)議的核心運行機制 用戶“A”及“B”相互交換它們各自的DH密鑰成分X=gx和Y=gy以及公鑰證書。假設(shè)用戶“A”為協(xié)議的發(fā)起者,用戶“B”為協(xié)議的響應(yīng)者;即用戶“A”在第一輪發(fā)送X;在收到X后用戶“B”檢查X為Z*p中階為q的非1元素(即檢查X∈Z*p且X≠1且Xq=1 mod p)并在第二輪發(fā)送Y;收到Y(jié)后,用戶“A”檢查Y為Z*p中階為q的非1元素(即檢查Y∈Z*p且Y≠1且Yq=1 modp)。注意,用戶需要檢查DH密鑰成分X和Y是否階為q,即Xq=1 modp和Yq=1 modp。
用戶“A”計算KA=Bea+cxYda+fx,并計算會話密鑰K=HK(KA,IA,A,IB,B,X,Y,c,d,e,f);用戶“B”計算KB=Aeb+dyXcb+fy,并計算會話密鑰K=HK(KB,IA,A,IB,B,X,Y,c,d,e,f)。其中,c=H(IA,A,X,IB,B),d=H(IA,A,IB,B,Y),e=1或0,f=H(c,d)。
為了進一步相互確認(rèn)身份及會話密鑰,協(xié)議響應(yīng)者利用會話密鑰K作為MAC-密鑰在第二輪認(rèn)證(IB,c),即“B”在第二輪發(fā)送MACK(IB,c);協(xié)議初始者“A”在另加的第三輪利用會話密鑰K作為MAC-密鑰認(rèn)證(c,IA),即“A”在第三輪發(fā)送MACK(c,IA)。注意,MAC-密鑰和會話密鑰相同。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種改進的更為高效的YYZ密鑰交換協(xié)議。本發(fā)明協(xié)議也可以視為專利申請200710047344.8的一個改進。
本發(fā)明協(xié)議具有如下特點 與專利申請書200710047344.8中所給出的YYZ密鑰交換協(xié)議相比較,本發(fā)明協(xié)議有如下2個主要不同 (1).本發(fā)明協(xié)議的關(guān)鍵之處為利用對BcxYda+fx及AdyXcb+fy進行t=(p-1)/q次冪運算從而保證Y(da+fx)t及X(cb+fy)t為Z*p中階為q的元素,并進而保證KA=Bea+tcxY(da+fx)t和KB=Aeb+tdyX(cb+fy)t為Z*p中階為q的元素。與專利申請書200710047344.8中所給出的YYZ協(xié)議相比,對BcxYda+fx及AdyXcb+fy進行t次冪運算的好處為可以省去對DH密鑰成分X和Y的階q檢查,減少低效的指數(shù)運算,提高計算效率; (2).在本發(fā)明協(xié)議中,會話密鑰K=HK(f,KA)=HK(f,KB),而MAC-密鑰Km=HK(KA,f)=HK(KB,f)。而在原YYZ協(xié)議中,MAC-密鑰與會話密鑰相同。
本發(fā)明協(xié)議的系統(tǒng)工作環(huán)境為 (1).系統(tǒng)參數(shù)系統(tǒng)參數(shù)(p,q,g,H,HK MAC),其中p和q為大素數(shù),并且q能整除p-1,g是一個Z*p中階(order)為q的元素,使得在Z*p中由g定義的子群上離散對數(shù)(discrete logarithm DL)及計算Diffie-Hellman(computational Diffie-Hellman CDH)問題是難的。一般而言,p的長度為1024位或2048位,q的長度為160或1024。所有的指數(shù)運算及(不在指數(shù)上的)乘法運算是模(mod)p運算,加法及指數(shù)上的乘法為模(mod)q運算(比如gda表示gda mod q mod p)。這里,Z*p指的是所有比p小并與p互素的正整數(shù)的集合,即Z*p={1,2,…,p-1}。定義函數(shù)DLZq→Z*p,使得h=DL(w)=gw mod p。w稱為h的離散對數(shù)。我們要求給定隨機計算出的h,沒有多項式時間算法計算出h的離散對數(shù)w,這稱為離散對數(shù)問題。計算Diffie-Hellman問題指的是給定隨機的gx與gy,沒有多項式時間算法計算出gxy。一般而言,對于熟悉本領(lǐng)域的人而言,離散對數(shù)問題及計算Diffie-Hellman問題也可以定義在由橢圓曲線或雙線性對(bilineartity)定義的群上。H是從{0,1}*→{0,1,2,…,q-1}的哈西函數(shù)。為增加計算速度,H的輸出長度可以為l=(log2 q+1)/2。HK是從{0,1}*→{0,1}k的哈西函數(shù),k是會話密鑰的長度,比如k=128或160;對于字符串s1,…,sm,m>1,H(s1,s2,…,sm)表示的是將s1,…,sm用二進制0-1串來表示,然后將所有的0-1串連接(即,串聯(lián))起來,最后將串聯(lián)后得到的串作為H的輸入(元素的串聯(lián)順序可以變化)。MAC是一個消息認(rèn)證碼算法。(p,q,g,H,HK MAC)既可以是全局或部分全局性的公共參數(shù),亦可以由任意一對執(zhí)行該協(xié)議的用戶進行協(xié)商。
(2).除非有特別說明,具有身份ID IA的用戶“A”有一個公鑰A=ga,其中a由用戶“A”在Zq中隨機選取。相應(yīng)地,具有ID IB的用戶“B”的公鑰記為B=gb,以此類推;這里,Zq={0,1,2,…,q-1}。
(3).協(xié)議基于Diffie-Hellman密鑰交換協(xié)議;記X=gx mod p為用戶“A”的DH密鑰成分,x為DH密鑰成分X的離散對數(shù),x由用戶“A”從Zq={0,1,…,q-1}中隨機選取。記Y=gy mod p為用戶“B”的DH密鑰成分,y為DH密鑰成分Y的離散對數(shù),y由用戶“B”從Zq={0,1,…,q-1}中隨機選取。
(4).有一個可信的證書權(quán)威機構(gòu)CA,頒發(fā)證書CERT,用于將用戶的身份及其相應(yīng)公鑰,比如(IA,A=ga),進行可公開驗證的綁定。綁定用CA的電子簽名實現(xiàn)。綁定時CA驗證公鑰為Z*p中階為q且非1的元素。用戶“A”的證書記為CERTA,包括用戶“A”的公鑰及CA對(IA,A=ga)的電子簽名。
(5).協(xié)議的每一次執(zhí)行稱為一個會話(session)。我們假定協(xié)議的每一次執(zhí)行(即,每一次會話)有一個標(biāo)示號(session-identifier)sid,用于標(biāo)記并發(fā)運行的協(xié)議執(zhí)行。sid的制定和協(xié)商可隨協(xié)議的運行環(huán)境不同而有所變化比如sid可以是協(xié)議運行兩方發(fā)送的兩個隨機串的合并連接。一般而言,sid包含在協(xié)議運行之前用戶交換的信息或交換信息的哈西值。在某些環(huán)境中sid可在協(xié)議運行過程中產(chǎn)生;在某些環(huán)境中當(dāng)會話可由語境自動標(biāo)示時sid亦可省略,例如在某些密鑰交換應(yīng)用中(x=gx,Y=gy)可兼當(dāng)會話標(biāo)示號。
(6).與協(xié)議執(zhí)行相關(guān)的其它信息pub除了(sid,IA,A=ga,IB,B=gb,X=gx,Y=gy)外,其它與協(xié)議執(zhí)行相關(guān)的信息用pub來表示。pub是一個字符串,一般是用戶的IP地址,公鑰證書,其它需要認(rèn)證的信息,時間戳等的串聯(lián)。pub可以為空。在所有具有MAC的協(xié)議實現(xiàn)中,為了提高計算效率,可僅僅將pub作為MAC的輸入一部分,而不作為H,HK的輸入。
協(xié)議實現(xiàn)方法 用戶“A”及“B”相互交換它們各自的DH密鑰成分X=gx和Y=gy以及公鑰證書。假設(shè)用戶“A”為協(xié)議的發(fā)起者,用戶“B”為協(xié)議的響應(yīng)者。即用戶“A”在第一輪發(fā)送X;在收到X后用戶“B”檢查X為Z*p中的非1元素并在第二輪發(fā)送Y;收到Y(jié)后,用戶“A”檢查Y為Z*p中的非1元素。
用戶“A”計算KA=Bea+tcxY(da+fx)t,檢查KA≠1并計算會話密鑰K=HK(f,KA);用戶“B”計算KB=Aeb+tdyX(cb+fy)t,檢查KB≠1并計算會話密鑰K=HK(f,KB);其中,t=(p-1)/q,c=H(X,IA,A,IB,B),d=H(IA,A,IB,B,Y),e=0或1,f=H(IA,A,IB,B,X,Y)或H(c,d)或H(c,d,e)。函數(shù)c、d、e、f設(shè)置的關(guān)鍵之處為c和e的輸入不包含Y,d和e的輸入不包含X。
用戶“A”事先離線計算X、c和Bea+tcx,用戶“B”事先離線計算Y、d和Aeb+tdy,從而提高在線計算的效率。KA與KB計算的關(guān)鍵之處為利用對BcxYda+fx及AdyXcb+fy進行t=(p-1)/q次冪運算從而保證Y(da+fx)t及X(cb+fy)t為Z*p中階為q的元素,并進而保證KA和KB為Z*p中階為q的元素。對BcxYda+fx及AdyXcb+fy進行t次冪運算的好處為可以省去對DH密鑰成分X和Y的階q檢查,提高計算效率。
為了進一步相互確認(rèn)身份及會話密鑰,用戶“A”計算MAC-密鑰Km=HK(KA,f),“B”計算Km=HK(KB,f)。協(xié)議響應(yīng)者“B”在第二輪發(fā)送MACKm(d),協(xié)議初始者“A”在另加的第三輪發(fā)送MACKm(c)。
本發(fā)明協(xié)議的具體實現(xiàn)步驟 在下述協(xié)議描述中,大括號內(nèi)的值表示發(fā)送的信息。注意用戶“A”的公鑰是A=ga并具有CA頒發(fā)的證書CERTA;用戶“B”的公鑰是B=gb并具有CA頒發(fā)的證書CERTB。假設(shè)用戶“A”為協(xié)議運行初始者,用戶“B”為協(xié)議運行響應(yīng)者。
協(xié)議-1無身份及密鑰確認(rèn)功能的協(xié)議實現(xiàn)步驟 事先計算用戶“A”事先計算X=gx mod p、c=H(X,IA,A,IB,B)、e=0或1、和B(ea+tcx)mod q mod p,刪除掉c與ea+tcx,但保留x和Bea+tcx;其中,x從Zq中隨機選取,X稱為“A”的DH密鑰成分。
用戶“B”事先計算Y=gy mod p、d=H(IA,A,IB,B,Y)、e=0或1和A(eb+tdy)mod q mod p,刪除掉d與eb+tdy,但保留y和Aeb+tdy。其中,y從Zq中隨機選取且Y稱為“B”的DH密鑰成分。
第-輪,從“A”到“B”{sid,IA,A,CERTA,X=gx(mod p)}。
收到“A”發(fā)送的信息后,“B”驗證“A”的身份、公鑰及證書,X為Z*p中的非1元素。驗證不成功,“B”拒絕繼續(xù)執(zhí)行協(xié)議;驗證成功,用戶“B”計算KB=Aeb+tdyX(cb+fy)t,檢查KB≠1并計算會話密鑰K=HK(f,KB),其中,t=(p-1)/q,f=H(IA,A,IB,B,X,Y)。用戶“B”刪除掉除用戶私鑰和會話密鑰之外的所有在本次協(xié)議執(zhí)行中所生成的內(nèi)部狀態(tài)數(shù)據(jù),包括y、Aeb+tdy、(cb+fy)t、X(cb+fy)t、KB、c、f。
第二輪,從“B”到“A”{sid,IB,B,CERTB,Y=gy}。
收到“B”發(fā)送的信息后,“A”驗證“B”的身份、公鑰及證書,Y為Z*p中的非1元素。驗證不成功,“A”中止協(xié)議;驗證成功,用戶“A”計算KA=Bea+tcxY(da+fx)t,檢查KA≠1并計算會話密鑰K=HK(f,KA)。用戶“A”刪除掉除用戶私鑰和會話密鑰之外的所有在本次協(xié)議執(zhí)行中所生成的內(nèi)部狀態(tài)數(shù)據(jù),包括x、Bea+tcx、(da+fx)t、Y(da+fx)t、KA、d、f。
協(xié)議-2具有身份及密鑰確認(rèn)功能的協(xié)議實現(xiàn)步驟 事先計算用戶“A”事先計算X=gx mod p、c、e、和Bea+tcx;刪除掉ea+tcx,但保留x、Bea+tcx和c。其中,x從Zq中隨機選取,X稱為“A”的DH密鑰成分,c=H(X,IA,A,IB,B),e=0或1。
用戶“B”事先計算Y=gy mod p、d、e和Aeb+tdy;刪除掉eb+tdy,但保留y、Aeb+tdy和d。其中,y從Zq中隨機選取且Y稱為“B”的DH密鑰成分,d=H(IA,A,IB,B,Y)。
第一輪,從“A”到“B”{sid,IA,A,CERTA,X=gx(mod p)}。
收到“A”發(fā)送的信息后,“B”驗證“A”的身份、公鑰及證書,X為Z*p中的非1元素。驗證不成功,“B”拒絕繼續(xù)執(zhí)行協(xié)議;驗證成功,進入下一輪。
第二輪,從“B”到“A”{sid,IB,B,CERTB,Y=gy,MACKm(d)}。
用戶“B”計算KB=Aeb+tdyX(cb+fy)t,檢查KB≠1,計算MAC-密鑰Km=HK(KB,f),計算并發(fā)送MACKm(d)其中,t=(p-1)/q,f=H(IA,A,IB,B,X,Y)。用戶“B”計算會話密鑰K=HB(f,KB);刪除掉y、Aeb+tdy、(cb+fy)t、X(eb+fy)t、KB、d、f,但保留c、會話密鑰K和MAC-密鑰Km。
收到“B”發(fā)送的信息后,“A”驗證“B”的身份、公鑰及證書,Y為Z*p中的非1元素。驗證不成功,“A”終止協(xié)議;驗證成功,用戶“A”計算KA=Bea+tcxY(da+fx)t,檢查KA≠1,計算MAC-密鑰Km=HK(KA,f)并驗證MACKm(d)的正確性。驗證不成功,用戶“A”中止協(xié)議執(zhí)行;驗證成功,用戶“A”計算并發(fā)送MACKm(c);然后,用戶“A”計算會話密鑰K=HK(f,KA),刪除掉x、Bea+tcx,(da+fx)t、Y(da+fx)t、KB、c、d、f以及MAC-密鑰Km,但保留會話密鑰K。
第三輪,從“A”到“B”{sid,MACKm(c)}。收到“A”發(fā)送的信息后,“B”驗證MACKm(c)的正確性。驗證不成功,用戶“A”中止協(xié)議執(zhí)行;驗證成功,用戶“B”刪除掉Km和c,但保留會話密鑰K,并結(jié)束協(xié)議執(zhí)行。
本發(fā)明中,協(xié)議-1及協(xié)議-2有如下變體 (1).KA=(Bea+cxYda+fx)t,KB=(Aeb+dyXcb+fy)t。
(2).函數(shù)c、d、e、f的其它計算方法c=H(IA,A,X,IB,B),d=H(IA,A,IB,B,Y),e=0或1,f=H(IA,A,IB,B,X,Y)或H(c,d)或H(c,d,e)。
或者,c=H(IA,ga,IB,gb,X,Y),d=H(c),e=0或H(d),f=H(d,e)或H(c,d)或H(c,d,e)或H(d)(當(dāng)e=0)。
(3).在實際應(yīng)用中,將函數(shù)c、d、e、f輸入中的(IA,A)換為用戶“A”的公鑰證書CertA的哈西值,將(IB,B)換為用戶“B”的公鑰證書CertB的哈西值?;蛘?,將(IA,A,IB,B)換為CertA、CertB以及其它在協(xié)議運行之前所交換的cookie、隨機數(shù)和IP地址信息的串聯(lián)或串聯(lián)信息的哈西值。將sid作為函數(shù)c、d、e、f以及HK輸入的一部分。
(4).KA和KB的其它計算形式KA=Ba+tcxY(da+x)t,KB=Ab+tdyX(cb+y)t;或KA=Bca+txY(a+dx)t,KB=Acb+tyX(b+dy)t;或KA=BtxY(a+cx)t,KB=AtyX(b+cy)t,其中c=H(IA,ga,IB,gb,X,Y),d=H(c)。
或者,KA=Btcx+eaYtda,KB=Atdy+ebXtcb,其中c=H(X,IA,A,IB,B),d=H(IA,A,IB,B,Y),e=1或H(IA,A,IB,B)。
(5).會話密鑰與MAC-密鑰的其它計算形式K=HK(KA)=HK(KB)或K=HK(KA,1)=HK(KB,1);Km=HK(KA,0)=HK(KB,0)?;蛘?,Km=K,即會話密鑰同時充當(dāng)MAC-密鑰。將c、d、e、f以及sid的部分或全部作為HK輸入的一部分。會話密鑰與MAC-密鑰由不同的哈西函數(shù)來實現(xiàn),比如MAC-密鑰使用MD5哈西函數(shù)生成,會話密鑰由SHA-1哈西函數(shù)生成。
(6).在協(xié)議-2中,將MACKm(d)換為MACKm(0);將MACKm(c)換為MACKm(1)。
(7).用戶“A”或“B”不進行事先計算;此時,在會話密鑰和MAC密鑰計算之前所保留的內(nèi)部狀態(tài)僅包括x或y,并且一旦會話密鑰計算完畢,除用戶私鑰和會話密鑰之外的所有在本次協(xié)議執(zhí)行中所生成的內(nèi)部狀態(tài)數(shù)據(jù)立即被刪除。
(8).將哈西函數(shù)H和HK的輸入中的元素的順序進行變化。
(9).為了更強的安全性,用戶在向CA注冊公鑰時候,向CA證明其的確知道與其注冊公鑰相對應(yīng)的私鑰。
(10).在協(xié)議-2中,在將MAC的輸入同時放入HK的輸入的前提下,將部分或全部MAC去掉,只用哈西函數(shù)HK進行綁定。比如將MACKm(d)換為HK(KB,f,d)或HK(KB,f,0),等;將MACKm(c)換為HK(KB,f,c)或HK(KB,f,1)或HK(f,d,Km),等。
具體實施例方式 假設(shè),具有身份IA的用戶“A”的公鑰是A=ga并具有證書CERTA,具有身份IB的用戶“B”的公鑰是B=gb并具有證書CERTB。證書CERTA指的是CA對A的身份IA及其公鑰A=ga的一個電子簽名,其余同。我們假設(shè)A為協(xié)議運行初始者(initiator),B為協(xié)議運行響應(yīng)者(responder)。
在下述協(xié)議具體實施中,消息認(rèn)證碼MAC采用由IETF(Internet Engineering TaskForce)所公布的第2104號互聯(lián)網(wǎng)意見征求文檔(Internet RFC 2104)中所描述的HMAC認(rèn)證碼。HMAC只需作兩個哈西運算,并被證明既是消息認(rèn)證碼又是偽隨機函數(shù)。在協(xié)議具體實施中,HMAC以及哈西函數(shù)H,HK由SHA-1哈西函數(shù)來實現(xiàn)。在下述協(xié)議具體實施中,會話標(biāo)示符sid省去。
協(xié)議-1無身份及密鑰確認(rèn)功能的協(xié)議
具體實施例方式 事先計算用戶“A”事先計算X=gx mod p、c=H(X‖IA‖A‖IB‖B)、e=0或1、和B(ea+tcx)modq mod p;刪除掉c與ea+tcx,但保留x和Bea+tcx。x與Bea+tcx應(yīng)該分別保存在不同的存儲模塊中;一般而言,x可保存在更為安全的存儲模塊中。其中,x從Zq中隨機選取,X稱為“A”的DH密鑰成分。這里,“‖”表示的是字符串的順序連接。
用戶“B”事先計算Y=gy mod p、d=H(IA‖A‖IB‖B‖Y)、e=0或1和A(eb+tdy)mod q mod p;刪除掉d與eb+tdy,但保留y和Aeb+tdy。y與Aeb+tdy應(yīng)該分別保存在不同的存儲模塊中;一般而言,y可保存在更為安全的存儲模塊中。其中,y從Zq中隨機選取且Y稱為“B”的DH密鑰成分。
第一輪,從“A”到“B”{IA,A,CERTA,X=gx(mod p)}。
收到“A”發(fā)送的信息后,“B”驗證“A”的身份、公鑰及證書(即驗證證書頒發(fā)機構(gòu)CA對(IA,A)簽名的有效性),X為Z*p中的非1元素(即2≤X≤p-1)。驗證不成功,“B”拒絕繼續(xù)執(zhí)行協(xié)議;驗證成功,用戶“B”計算KB=A(eb+tdy)mod q X(cb+fy)t mod q mod p,檢查KB≠1并計算會話密鑰K=HK(f‖KB),其中,t=(p-1)/q,f=H(IA‖A‖IB‖B‖X‖Y)。用戶“B”刪除掉除用戶私鑰和會話密鑰之外的所有在本次協(xié)議執(zhí)行中所生成的內(nèi)部狀態(tài)數(shù)據(jù),包括y、Aeb+tdy、(cb+fy)t、X(cb+fy)t、KB、c、f。這里,“‖”表示的是字符串的順序連接。
第二輪,從“B”到“A”{IB,CERTB,Y=gy}。
收到“B”發(fā)送的信息后,“A”驗證“B”的身份、公鑰及證書,Y為Z*p中的非1元素。驗證不成功,“A”中止協(xié)議;驗證成功,用戶“A”計算KA=B(ea+tcx)mod qY(da+fx)t mod q mod p,檢查KA≠1并計算會話密鑰K=HK(f‖KA)。用戶“A”刪除掉除用戶私鑰和會話密鑰之外的所有在本次協(xié)議執(zhí)行中所生成的內(nèi)部狀態(tài)數(shù)據(jù),包括x、Bea+tcx、(da+fx)t、Y(da+fx)t、KA、d、f。
協(xié)議-2具有身份及密鑰確認(rèn)功能的協(xié)議
具體實施例方式 事先計算用戶“A”事先計算X=gx mod p、c=H(X‖IA‖A‖IB‖B)、e=0或1、和B(ea+tcx)mod q mod p;刪除掉ea+tcx,但保留x、Bea+tcx和c。x與Bea+tcx應(yīng)該分別保存在不同的存儲模塊中;一般而言,x可保存在更為安全的存儲模塊中。其中,x從Zq中隨機選取,X稱為“A”的DH密鑰成分。這里,“‖”表示的是字符串的順序連接。
用戶“B”事先計算Y=gy mod p、d=H(IA‖A‖IB‖B‖Y)、e=0或1和A(eb+tdy)modq mod p;刪除掉eb+tdy,但保留y、Aeb+tdy和d。y與Aeb+tdy應(yīng)該分別保存在不同的存儲模塊中;一般而言,y可保存在更為安全的存儲模塊中。其中,y從Zq中隨機選取且Y稱為“B”的DH密鑰成分。
第一輪,從“A”到“B”{IA,A,CERTA,X=gx(mod p)}。
收到“A”發(fā)送的信息后,“B”驗證“A”的身份、公鑰及證書,X為Z*p中的非1元素。驗證不成功,“B”拒絕繼續(xù)執(zhí)行協(xié)議;驗證成功,進入下一輪。
第二輪,從“B”到“A”{IB,B,CERTB,Y=gy,HMACKm(d)}。
用戶“B”計算KB=A(eb+tdy)mod qX(cb+fy)t mod q mod p,檢查KB≠1,計算MAC-密鑰Km=HK(KB‖f),計算并發(fā)送HMACKm(d);其中,t=(p-1)/q,f=H(IA‖A‖IB‖B‖X‖Y)。用戶“B”計算會話密鑰K=HK(f‖KB);刪除掉y、Aeb+tdy、(cb+fy)t、X(cb+fy)t、KB、d、f,但保留c、會話密鑰K和MAC-密鑰Km。
收到“B”發(fā)送的信息后,“A”驗證“B”的身份、公鑰及證書,Y為Z*p中的非1元素。驗證不成功,“A”終止協(xié)議;驗證成功,用戶“A”計算KA=B(ea+tcx)mod q Y(da+fx)tmod q mod p,檢查KA≠1,計算MAC-密鑰Km=HK(KA‖f)并驗證HMACKm(d)的正確性。驗證不成功,用戶“A”中止協(xié)議執(zhí)行;驗證成功,用戶“A”計算并發(fā)送HMACKm(c);然后,用戶“A”計算會話密鑰K=HK(f‖KA);刪除掉x、Bea+tcx,(da+fx)t、Y(da+fx)t、KB、c、d、f以及MAC-密鑰Km,但保留會話密鑰K。
第三輪,從“A”到“B”{HMACKm(c)}。收到“A”發(fā)送的信息后,“B”驗證HMACKm(c)的正確性。驗證不成功,用戶“A”中止協(xié)議執(zhí)行;驗證成功,用戶“B”刪除掉Km和c,但保留會話密鑰K,并結(jié)束協(xié)議執(zhí)行。
協(xié)議變體的
具體實施例方式 (1).KA=B(ea+cx)tmodqY(da+fx)tmod qmod p,KB=A(eb+dy)tmodqX(cb+fy)tmodq modp。
(2).函數(shù)c、d、e、f的其它計算方法c=H(IA‖A‖X‖IB‖B),d=H(IA‖A‖IB‖B‖Y),e=0或1,f=H(IA‖A‖IB‖B‖X‖Y)或H(c‖d)或H(c‖d‖e)。
或者,c=H(IA‖ga‖IB‖gb‖X‖Y),d=H(c),e=0或H(d),f=H(d‖e)或H(c‖d)或H(c‖d‖e)或H(d)(當(dāng)e=0); (3).在具體實施中,可將函數(shù)c、d、e、f輸入中的(IA‖A)換為用戶“A”的公鑰證書CertA的哈西值,將(IB‖B)換為用戶“B”的公鑰證書CertB的哈西值。另一個推薦的實施方式為將(IA‖A‖IB‖B)換為CertA、CertB以及其它在協(xié)議運行之前所交換的cookie、隨機數(shù)和IP地址等信息的串聯(lián)(即pub)或串聯(lián)信息的哈西值(即pub的哈希值)。將sid作為函數(shù)c、d、e、f以及HK輸入的一部分。
(4).KA和KB的其它計算形式KA=B(a+tcx)modqY(da+x)tmodq modp,KB=A(b+tdy)mod qX(cb+y)tmod q mod p; 或者,KA=B(ca+tx)modqY(a+dx)tmod q mod p,KB=A(cb+ty)modqX(b+dy)t mod qmod p; 或者,KA=Btx mod qY(a+cx)t mod qmod p,KB=Aty mod qX(b+cy)tmodqmodp,其中c=H(IA‖ga‖IB‖gb‖X‖Y),d=H(c); 或者,KA=B(tcx+ea)modqYtdamodq modp,KB=A(tdy+eb)modqXtcb modq modp,其中c=H(X‖IA‖A‖IB‖B),d=H(IA‖A‖IB‖B‖Y),e=1或H(IA‖A‖IB‖B)。
(5).會話密鑰與MAC-密鑰的其它計算形式K=HK(KA)=HK(KB)或K=HK(KA‖1)=HK(KB‖1);Km=HK(KA‖0)=HK(KB‖0);或者,Km=K,即會話密鑰同時充當(dāng)MAC-密鑰。會話密鑰與MAC-密鑰由不同的哈西函數(shù)來實現(xiàn),比如MAC-密鑰使用MD5哈西函數(shù)生成,會話密鑰由SHA-1哈西函數(shù)生成;此時,在MD5和SHA-1哈西函數(shù)輸入中的元素順序可以一致。
(6).在協(xié)議-2中,將HMACKm(d)換為HMACKm(0);將HMACKm(c)換為HMACKm(1)。
(7).用戶“A”或“B”不進行事先計算。此時,在會話密鑰和MAC密鑰計算之前所保留的內(nèi)部狀態(tài)僅包括x或y,并且一旦會話密鑰計算完畢,除用戶私鑰和會話密鑰之外的所有在本次協(xié)議執(zhí)行中所生成的內(nèi)部狀態(tài)數(shù)據(jù)立即被刪除。
(8).將哈西函數(shù)H和HK的輸入中的元素的順序進行變化。比如c=H(IB‖B‖IA‖A‖X),d=H(IB‖B‖Y‖IA,A),f=H(X‖Y‖IA‖A‖IB‖B),等。
(9).為了更強的安全性,用戶在向CA注冊公鑰時候,向CA證明其的確知道與其注冊公鑰相對應(yīng)的私鑰。比如,用戶用相應(yīng)的私鑰對其ID及公鑰進行簽名,等。
(10).在協(xié)議-2中,在將MAC的輸入同時放入HK的輸入的前提下,將部分或全部MAC去掉,只用哈西函數(shù)HK進行綁定。比如將MACKm(d)換為HK(KB‖f‖d)或HK(KB‖f0),等;將MACKm(c)換為HK(KB‖f‖c)或HK(KB‖f‖1)或HK(f‖d‖Km),等。
權(quán)利要求
1.一種改進的密鑰交換協(xié)議,其特征在于
系統(tǒng)工作環(huán)境為
(1).系統(tǒng)參數(shù)(p,q,H,HK,MAC),其中p和q為大素數(shù),并且q能整除p-1,g是一個Z*p中階為q的元素,使得在Z*p中由g定義的子群上離散對數(shù)DL及計算Diffie-Hellman CDH問題是難的;MAC是一個消息認(rèn)證碼算法;所有的指數(shù)運算及不在指數(shù)上的乘法運算是mod p運算,加法及指數(shù)上的乘法為mod q運算;這里,Z*p={1,2,…,p-1};H是從{0,1}*→{0,1,2,…,(q-1)/2}的哈西函數(shù),HK是從{0,1}*→{0,1}k的哈西函數(shù),k是會話密鑰的長度;對于字符串s1,…,sm,m>1,(s1,s2,…,sm)表示的是將s1,…,sm用二進制0-1串來表示,然后將所有的0-1串順序連接串聯(lián)起來,最后將串聯(lián)后得到的0-1串作為H的輸入;
(2).除非有特別說明,具有身份ID IA的用戶“A”有一個公鑰A=ga,其中a由用戶“A”在Zq中隨機選取;相應(yīng)地,具有ID IB的用戶“B”的公鑰記為B=gb,以此類推;這里,Zq={0,1,2,…,q-1};
(3).協(xié)議基于Diffie-Hellman密鑰交換協(xié)議;記X=gx mod p為用戶“A”的DH密鑰成分,x為DH密鑰成分X的離散對數(shù),x由用戶“A”從Zq={0,1,…,q-1}中隨機選??;記Y=gy mod p為用戶“B”的DH密鑰成分,y為DH密鑰成分Y的離散對數(shù),y由用戶“B”從Zq={0,1,…,q-1}中隨機選??;
(4).有一個可信的證書權(quán)威機構(gòu)CA,頒發(fā)證書CERT,用于將用戶的身份及其相應(yīng)公鑰進行可公開驗證的綁定;綁定用CA的電子簽名實現(xiàn);綁定時CA驗證公鑰為Z*p中階為q且非1的元素;用戶“A”的證書記為CERTA;
(5).假定協(xié)議的每一次執(zhí)行有一個標(biāo)示號sid;sid是一個字符串,用于標(biāo)記并發(fā)運行的協(xié)議執(zhí)行;sid的制定和協(xié)商可隨協(xié)議的運行環(huán)境不同而有所變化;一般而言,sid包含在協(xié)議運行之前用戶交換的信息或交換信息的哈西值;
(6).與協(xié)議執(zhí)行相關(guān)的其它信息pub除了sid,IA,A=ga,IB,B=gb,X=gx,Y=gy外,其它與協(xié)議執(zhí)行相關(guān)的信息用pub來表示;pub是一個字符串,是用戶的IP地址、公鑰證書、其它需要認(rèn)證的信息、時間戳的串聯(lián);
協(xié)議實現(xiàn)方法為用戶“A”及“B”相互交換它們各自的DH密鑰成分X=gx和Y=gy以及公鑰證書;假設(shè)用戶“A”為協(xié)議的發(fā)起者,用戶“B”為協(xié)議的響應(yīng)者;即用戶“A”在第一輪發(fā)送X;在收到X后用戶“B”檢查X為Z*p中的非1元素并在第二輪發(fā)送Y;收到Y(jié)后,用戶“A”檢查Y為Z*p中的非1元素;
用戶“A”計算KA=Bea+tcxY(da+fx)t,檢查KA≠1并計算會話密鑰K=HK(f,KA);用戶“B”計算KB=Aeb+tdyX(cb+fy)t,檢查KB≠1并計算會話密鑰K=HK(f,KB);其中,t=(p-1)/q,c=H(X,IA,A,IB,B),d=H(IA,A,IB,B,Y),e=0或1,f=H(IA,A,IB,B,X,Y)或H(c,d)或H(c,d,e);函數(shù)c、d、e、f設(shè)置的關(guān)鍵之處為c和e的輸入不包含Y,d和e的輸入不包含X;用戶“A”事先離線計算X、c和Bea+tcx,用戶“B”事先離線計算Y、d和Aeb+tdy,從而提高在線計算的效率;KA與KB計算的關(guān)鍵之處為利用對BcxYda+fx及AdyXcb+fy進行t=(p-1)/q次冪運算從而保證Y(da+fx)t及X(cb+fy)t為Z*p中階為q的元素,并進而保證KA和KB為Z*p中階為q的元素;對BcxYda+fx及AdyXcb+fy進行t次冪運算的好處為可以省去對DH密鑰成分X和Y的階q檢查,提高計算效率;
為了進一步相互確認(rèn)身份及會話密鑰,用戶“A”計算MAC-密鑰Km=HK(KA,f),“B”計算Km=HK(KB,f);協(xié)議響應(yīng)者“B”在第二輪發(fā)送MACKm(d),協(xié)議初始者“A”在另加的第三輪發(fā)送MACK(c)。
2.根據(jù)權(quán)利要求1所述的改進的密鑰交換協(xié)議,其特征在于協(xié)議的實現(xiàn)步驟為
在下述協(xié)議描述中,大括號內(nèi)的值表示發(fā)送的信息;注意用戶“A”的公鑰是A=ga并具有CA頒發(fā)的證書CERTA,用戶“B”的公鑰是B=gb并具有CA頒發(fā)的證書CERTB;假設(shè)用戶“A”為協(xié)議運行初始者,用戶“B”為協(xié)議運行響應(yīng)者;
協(xié)議-1無身份及密鑰確認(rèn)功能的協(xié)議實現(xiàn)步驟
事先計算用戶“A”事先計算X=gx mod p、c、e、和Bea+tcx,刪除掉c與ea+tcx,但保留x和Bea+tcx;其中,t=(p-1)/q,x從Zq中隨機選取,X稱為“A”的DH密鑰成分,c=H(X,IA,A,IB,B),e=0或1;
用戶“B”事先計算Y=gy mod p、d、e和Aeb+tdy,刪除掉d與eb+tdy,但保留y和Aeb+tdy;其中,y從Zq中隨機選取且Y稱為“B”的DH密鑰成分,d=H(IA,A,IB,B,Y);
第一輪,從“A”到“B”{sid,IA,A,CERTA,X=gx(mod p)};
收到“A”發(fā)送的信息后,“B”驗證“A”的身份、公鑰及證書,X為Z*p中的非1元素;驗證不成功,“B”拒絕繼續(xù)執(zhí)行協(xié)議;驗證成功,用戶“B”計算KB=Aeb+tdyX(cb+fy)t,檢查KB≠1并計算會話密鑰K=HK(f,KB),其中,t=(p-1)/q,f=H(IA,A,IB,B,X,Y);用戶“B”刪除掉除用戶私鑰和會話密鑰之外的所有在本次協(xié)議執(zhí)行中所生成的內(nèi)部狀態(tài)數(shù)據(jù),包括y、Aeb+tdy、(cb+fy)t、X(cb+fy)t、KB、c、f;
第二輪,從“B”到“A”{sid,IB,B,CERTB,Y=gy};
收到“B”發(fā)送的信息后,“A”驗證“B”的身份、公鑰及證書,Y為Z*p中的非1元素;驗證不成功,“A”中止協(xié)議;驗證成功,用戶“A”計算KA=Bea+tcxY(da+fx)t,檢查KA≠1并計算會話密鑰K=HK(f,KA);用戶“A”刪除掉除用戶私鑰和會話密鑰之外的所有在本次協(xié)議執(zhí)行中所生成的內(nèi)部狀態(tài)數(shù)據(jù),包括x、Bea+tcx、(da+fx)t、Y(da+fx)t、KA、d、f;
協(xié)議-2具有身份及密鑰確認(rèn)功能的協(xié)議實現(xiàn)步驟
事先計算用戶“A”事先計算X=gx mod p、c、e、和Bea+tcx,刪除掉ea+tcx,但保留x、Bea+tcx和c;其中,x從Zq中隨機選取,X稱為“A”的DH密鑰成分,c=H(X,IA,A,IB,B),e=0或1;
用戶“B”事先計算Y=gymodp、d、e和Aeb+tdy,刪除掉eb+tdy,但保留y、Aeb+tdy和d;其中,y從Zq中隨機選取且Y稱為“B”的DH密鑰成分,d=H(IA,A,IB,B,Y);
第一輪,從“A”到“B”{sid,IA,A,CERTA,X=gx(mod p)};
收到“A”發(fā)送的信息后,“B”驗證“A”的身份、公鑰及證書,X為Z*p中的非1元素;驗證不成功,“B”拒絕繼續(xù)執(zhí)行協(xié)議;驗證成功,進入下一輪;
第二輪,從“B”到“A”{sid,IB,B,CERTB,Y=gy,MACKm(d)};
用戶“B”計算KB=Aeb+tdyX(cb+fy)t,檢查KB≠1,計算MAC-密鑰Km=HK(KB,f),計算并發(fā)送MACKm(d);其中,t=(p-1)/q,f=H(IA,A,IB,B,X,Y);用戶“B”計算會話密鑰K=HK(f,KB),刪除掉y、Aeb+tdy、(cb+fy)t、X(cb+fy)t、KB、d、f,但保留c、會話密鑰K和MAC-密鑰Km;
收到“B”發(fā)送的信息后,“A”驗證“B”的身份、公鑰及證書,Y為Z*p中的非1元素;驗證不成功,“A”終止協(xié)議;驗證成功,用戶“A”計算KA=Bea+tcxY(da+fx)t,檢查KA≠1,計算MAC-密鑰Km=HK(KA,f)并驗證MACKm(d)的正確性;驗證不成功,用戶“A”中止協(xié)議執(zhí)行;驗證成功,用戶“A”計算并發(fā)送MACKm(c);然后,用戶“A”計算會話密鑰K=HK(f,KA),刪除掉x、Bea+tcx,(da+fx)t、Y(da+fx)t、KB、c、d、f以及MAC-密鑰Km,但保留會話密鑰K;
第三輪,從“A”到“B”{sid,MACKm(c)};收到“A”發(fā)送的信息后,“B”驗證MACKm(c)的正確性;驗證不成功,用戶“A”中止協(xié)議執(zhí)行;驗證成功,用戶“B”刪除掉Km和c,但保留會話密鑰K,并結(jié)束協(xié)議執(zhí)行。
3.根據(jù)權(quán)利要求2所述的改進的密鑰交換協(xié)議,其特征在于協(xié)議-1及協(xié)議-2有如下的變體
(1).KA=(Bea+cxYda+fx)t,KB=(Aeb+dyXcb+fy)t;
(2).函數(shù)c、d、e、f的其它計算方法c=H(IA,A,X,IB,B),d=H(IA,A,IB,B,Y),e=0或1或H(IA,A,IB,B),f=H(IA,A,IB,B,X,Y)或H(c,d)或H(c,d,e);
或者,c=H(IA,ga,IB,gb,X,Y),d=H(c),e=0或H(d),f=H(d,e)或H(c,d)或H(c,d,e);
(3).將函數(shù)c、d、e、f輸入中的(IA,A)換為用戶“A”的公鑰證書CertA的哈西值,將(IB,B)換為用戶“B”的公鑰證書CertB的哈西值;或者,將(IA,A,IB,B)換為CertA、CertB以及其它在協(xié)議運行之前所交換的cookie、隨機數(shù)和IP地址信息的串聯(lián)或串聯(lián)信息的哈西值;將sid作為函數(shù)c、d、e、f以及HK輸入的一部分;
(4).KA和KB的其它計算形式KA=Ba+tcxY(da+x)t,KB=Ab+tdyX(cb+y)t,或KA=Bca+txY(a+dx)t,KB=Acb+tyX(b+dy)t,或KA=BtxY(a+cx)t,KB=AtyX(b+cy)t,其中c=H(IA,ga,IB,gb,X,Y),d=H(c);或者,KA=Btcx+eaYtda,KB=Atdy+ebXtcb,其中c=H(X,IA,A,IB,B),d=H(IA,A,IB,B,Y),e=1或H(IA,A,IB,B);
(5).會話密鑰與MAC-密鑰的其它計算形式K=HK(KA)=HK(KB)或K=HK(KA,1)=HK(KB,1);Km=HK(KA,0)=HK(KB,0);或者,Km=K;將c、d、e、f以及sid的部分或全部作為HK輸入的一部分;會話密鑰與MAC-密鑰由不同的哈西函數(shù)來實現(xiàn),此時,不同哈西函數(shù)的輸入中的元素順序可以一致;將K作為一個偽隨機函數(shù)的密鑰,將0、1、IA、IB、A、B、X、Y、c、d、e、f以及sid的部分或全部作為偽隨機函數(shù)的輸入來導(dǎo)出會話密鑰和MAC密鑰;將哈西函數(shù)HK的輸入中的元素的順序進行變化;
(6).在協(xié)議-2中,將MACKm(d)換為MACKm(0);將MACKm(c)換為MACKm(1);
(7).用戶“A”或“B”不進行事先計算;此時,在會話密鑰和MAC密鑰計算之前所保留的內(nèi)部狀態(tài)僅包括x或y,并且一旦會話密鑰計算完畢,除用戶私鑰和會話密鑰之外的所有在本次協(xié)議執(zhí)行中所生成的內(nèi)部狀態(tài)數(shù)據(jù)立即被刪除;
(8).將哈西函數(shù)H和HK的輸入中的元素的順序進行變化;
(9).為了更強的安全性,用戶在向CA注冊公鑰時候,向CA證明其的確知道與其注冊公鑰相對應(yīng)的私鑰;
(10).在協(xié)議-2中,在將MAC的輸入同時放入HK的輸入的前提下,將部分或全部MAC去掉,只用哈西函數(shù)HK進行綁定;將MACKm(d)換為HK(KB,f,d)或HK(KB,f,0);將MACKm(c)換為HK(KB,f,c)或HK(KB,f,1)或HK(f,d,Km)。
全文摘要
本發(fā)明屬于密碼協(xié)議技術(shù)領(lǐng)域,具體為一種改進的密鑰交換協(xié)議。本發(fā)明協(xié)議基于發(fā)明人在專利申請200710047344.8中所給出的YYZ密鑰計算公式KA=Bea+cxYda+fx=Aeb+dyXcb+fy=KB。本發(fā)明協(xié)議的關(guān)鍵之處為利用對BcxYda+fx及AdyXcb+fy進行t=(p-1)/q次冪運算從而保證Y(da+fx)t及X(cb+fy)t為Z*p中階為q的元素,并進而保證KA=Bea+tcxY(da+fx)t=Aeb+tdyX(cb+fy)t=KB為Z*p中階為q的元素。這可以省去原YYZ協(xié)議中對DH密鑰成分X和Y的階q檢查,從而提高計算效率。另外,在本發(fā)明協(xié)議中,會話密鑰和MAC-密鑰不同會話密鑰K=HK(f,KA)=HK(f,KB),而MAC-密鑰Km=HK(KA,f)=HK(KB,f)。
文檔編號H04L9/30GK101247394SQ200810032508
公開日2008年8月20日 申請日期2008年1月10日 優(yōu)先權(quán)日2008年1月10日
發(fā)明者趙運磊, 姚期智, 楓 儲 申請人:趙運磊, 姚期智, 楓 儲