本發明屬于通信
技術領域:
:,特別是一種基于身份的密鑰協商構建方法與網絡平臺。
背景技術:
::密鑰建立(keyestablishment)是指通信雙方或者多方建立一個共享的會話密鑰的過程。目前流行的有兩種方法可以在雙方之間建立一個會話密鑰,一種方法為通信的一方自己生成一個會話密鑰并將這個會話密鑰安全地傳遞給另一方,這樣的方法稱之為密鑰傳輸。第二種方法為通信雙方都貢獻一部分信息,這些信息共同推出了一個會話密鑰,這樣的方法稱之為密鑰協商,如果alice確信只有bob能夠(其它人不能夠)確定會話密鑰的值,那么稱這個密鑰協商協議提供了bob到alice的密鑰認證性。如果一個密鑰協商協議提供了相互的密鑰確認性,那么稱這個密鑰協商協議為認證密鑰協商協議。一個認證的密鑰協商協議應該滿足以下兩個基本的安全屬性(這里以alice和bob為通信雙方來說明):(1)含蓄密鑰認證(implicitkeyauthentication):如果alice確信只有特定的通信方bob(不會有其他人)可能知道會話密鑰,那么稱這個密鑰協商協議提供了bob到alice的含蓄密鑰認證。需要注意的是,含蓄密鑰認證并不一定說明alice相信bob已經得到了會話密鑰。(2)明確密鑰認證(explicitkeyauthentication):如果alice確信另一通信方bob已經得到了會話密鑰,那么稱這個密鑰協商協議提供了bob到alice的明確密鑰認證或者是明確密鑰確認。從表面上看,明確密鑰認證好像比含蓄密鑰認證要強。但對于很多實際應用來說,這兩者是相同的。此外,某些時候,還需要密鑰協商協議滿足以下安全屬性。(1)已知密鑰安全(knownkeysecurity):每次運行密鑰協商協議都應該生成唯一的會話密鑰。即使知道了過去的一些會話密鑰,敵手也不能憑此推算出現在的或者將來的會話密鑰。(2)前向安全性(forwardsecurity):如果alice和bob的私鑰泄露了,那么過去產生的會話密鑰就無法恢復出來。有時候前向安全性又分為半前向安全性(halfforwardsecurity)和完全前向安全性(fullforwardsecurity)。半前向安全性指的是只有一方泄露了自己的私鑰,過去產生的會話密鑰不能被恢復出來。完全前向安全性指的是雙方的私鑰都泄露了,過去產生的會話密鑰也不能被敵手恢復出來。(3)密鑰妥協假冒(key-compromiseimpersonation):如果alice的私鑰sa被敵手知道了。明顯地,敵手可以偽裝成alice。但在某些情況下,要求敵手不能在alice面前偽裝成bob。同樣地,如果bob的私鑰sb泄露了,那么敵手不能在bob面前偽裝成alice。(4)未知密鑰共享(unknownkey-share):bob不能在不知情的情況下被強迫與alice共享一個會話密鑰,也就是說,bob認為他與carol共享了一個會話密鑰,但是alice卻認為他與bob共享了這個會話密鑰。(5)密鑰控制(keycontrol):alice和bob都不能控制會話密鑰的結構,也就是說他們不能設定會話密鑰等于他們事先設置的值,也不能夠預測會話密鑰的值。傳統的基于證書的公鑰密碼體制每一個用戶的公鑰都伴隨一個公鑰證書,這個公鑰證書由ca(權威中心)簽發。公鑰證書是一個結構化的數據記錄,它包含了用戶的身份信息、公鑰參數和ca的簽名等。任何人都可以通過驗證證書的合法性(ca的簽名)來認證公鑰。如果一個用戶信任ca,那么在他驗證了另一個用戶證書的有效性之后,他就應該相信公鑰的真實性。這就是人們常說的pki(公鑰基礎設施)。但是這種方式相比于基于身份的密碼體制有兩個明顯的缺點:(1)使用任何公鑰之前都需要先驗證公鑰證書的合法性,這就增加了用戶的計算量。(2)ca需要管理大量的證書,包括證書的頒發,存儲與撤銷等。技術實現要素:本發明的目的在于提供一種基于身份的密鑰協商構建方法與網絡平臺,使得生成的雙方基于身份的會話密鑰具有更高的效率與安全性。實現本發明目的的技術解決方案為:一種基于身份的密鑰協商構建方法,構造基于身份的密鑰交換協議并將其以網站的形式實現,網站采用mvc架構模型,其中model層中service層與dao層實現了該基于身份的密鑰協商協議,具體如下:(1)系統建立:公開系統參數:{g1,gt,p,e,p,ppub,h1,h2},保密主私鑰s;其中,g1:為由p生成的p階加法循環群;gt:與g1同階的乘法循環群;e:g1×g1→gt為雙線性映射;h1:{0,1}*→g1為一個安全的hash函數;h2:為密鑰提取函數;為pkg隨機選取的系統主私鑰;ppub=sp:為系統主公鑰;(2)密鑰提取:給定一個用戶u的身份idu,pkg計算該用戶的私鑰su=squ,其中qu=h1(idu)是該用戶的公鑰,分別計算此處密鑰協商雙方a、b的公、私鑰;其中,idu:代表用于u的身份;su:代表用戶u的私鑰,su=squ;qu:代表用戶u的公鑰,qu=h1(idu);(3)密鑰協商:a、b分別隨機選取計算各自的臨時會話密鑰ta=ap,tb=bp,并將各自生成的值發送給對方;a計算h=atb,kab=e(appub+sa,tb+qb),類似地,b計算h=bta,kba=e(bppub+sb,ta+qa),最終的共享密鑰為h2(h,kab);其中,ta:為alice的臨時會話密鑰,ta=ap,其中tb:為bob的臨時會話密鑰,tb=bp,其中kab:為alice計算出的未經過哈希的會話密鑰,kab=e(appub+sa,tb+qb);kba:為bob計算出的未經過哈希的會話密鑰,kba=e(bppub+sb,ta+qa);h:防止已知密鑰攻擊的臨時會話因子,h=atb,h=bta。進一步地,所述密鑰協商過程中,涉及三個參與者,包括系統管理員admin,協商密鑰雙方a、b,具體步驟如下:第一步:系統管理員admin登錄,進行系統初始化;第二步:將要進行密鑰協商的兩方用戶分別在自己的設備上登錄,并在用戶列表中分別選擇將要共享密鑰的人員;第三步:密鑰協商,(1)由一方作為發起密鑰協商方a向服務器發起請求,獲得基于自己身份的私鑰,用戶b操作同a一致;(2)a向系統發出計算臨時密鑰的請求,計算臨時會話密鑰ta,b操作同a,生成臨時密鑰tb;(3)系統根據臨時密鑰計算出最終a、b共同協商的會話密鑰。一種基于身份的密鑰協商網絡平臺,包括以下部分:controller層:負責轉發請求,以及對請求進行處理;view層:與用戶進行交互;model層:實現程序算法功能,與數據庫進行交互,model層包含了進行業務邏輯處理的service層,以及與數據庫操作系統進行交互的dao層。進一步地,所述service層與dao層實現下述的密鑰協商算法:密鑰協商過程中,涉及三個參與者,包括系統管理員admin,協商密鑰雙方a、b,具體步驟如下:第一步:系統管理員admin登錄,進行系統初始化;第二步:將要進行密鑰協商的兩方用戶分別在自己的設備上登錄,并在用戶列表中分別選擇將要共享密鑰的人員;第三步:密鑰協商,(1)由一方作為發起密鑰協商方a向服務器發起請求,獲得基于自己身份的私鑰,用戶b操作同a一致;(2)a向系統發出計算臨時密鑰的請求,計算臨時會話密鑰ta,b操作同a,生成臨時密鑰tb;(3)系統根據臨時密鑰計算出最終a、b共同協商的會話密鑰。本發明與現有技術相比,其顯著優點為:(1)基于身份兩方的密鑰協商協議,將上述協議使用網站的形式實現,在網站上對該協議的安全性進行攻擊演示,安全性較好,可以抵抗多種攻擊,包括前向安全性攻擊、已知密鑰攻擊、密鑰妥協假冒攻擊;(2)基于身份的公鑰密碼體制直接以用戶的身份標識作為公鑰,不需要證書和相關操作,簡化了公鑰的使用與管理。附圖說明圖1是基于身份的密鑰協商體系示意圖。圖2是攻擊演示流程圖。圖3是基于身份的公鑰密碼體制示意圖。圖4是密鑰協商流程圖。圖5是密鑰協商階段流程圖,其中(a)是清除歷史數據階段界面圖,(b)是用戶成功登陸后的協商密鑰界面中alice的界面圖,(c)是用戶成功登陸后的協商密鑰界面中bob的界面圖。圖6是一次密鑰協商中生成用戶的私鑰界面圖,其中(a)是一次密鑰協商中生成用戶alice的私鑰截面圖,(b)是一次密鑰協商中生成用戶bob的私鑰界面圖。圖7是臨時會話密鑰生成界面圖,其中(a)是alice臨時會話密鑰生成界面圖,(b)是bob臨時會話密鑰生成界面圖。圖8是協商密鑰生成界面圖,其中(a)是alice協商密鑰生成界面圖,(b)是bob協商密鑰生成界面圖。圖9是管理員界面圖。圖10是用戶alice密鑰協商界面圖。圖11是前向安全性攻擊演示結果圖,其中(a)是alice的共享密鑰結果圖,(b)是bob的共享密鑰結果圖,(c)是敵手的結果示意圖。圖12是已知密鑰攻擊演示結果圖,其中(a)是已知密鑰攻擊下首次協商密鑰結果圖,(b)是已知密鑰攻擊下二次協商的密鑰結果圖。圖13是密鑰妥協假冒攻擊演示結果圖,其中(a)是密鑰妥協假冒攻擊下alice的結果頁面圖,(b)是密鑰妥協假冒敵手結果頁面圖。具體實施方式本發明提出了一種基于身份的密鑰協商構建方法,構造基于身份的密鑰交換協議并將其以網站的形式實現,網站采用mvc架構模型,其中model層中service層與dao層實現了該基于身份的密鑰協商協議,具體如下:(1)系統建立:公開系統參數:{g1,gt,p,e,p,ppub,h1,h2},保密主私鑰s;其中,g1:為由p生成的p階加法循環群;gt:與g1同階的乘法循環群;e:g1×g1→gt為雙線性映射;h1:{0,1}*→g1為一個安全的hash函數;h2:為密鑰提取函數;為pkg隨機選取的系統主私鑰;ppub=sp:為系統主公鑰;(2)密鑰提取:給定一個用戶u的身份idu,pkg計算該用戶的私鑰su=squ,其中qu=h1(idu)是該用戶的公鑰,分別計算此處密鑰協商雙方a、b的公、私鑰;其中,idu:代表用于u的身份;su:代表用戶u的私鑰,su=squ;qu:代表用戶u的公鑰,qu=h1(idu);(3)密鑰協商:a、b分別隨機選取計算各自的臨時會話密鑰ta=ap,tb=bp,并將各自生成的值發送給對方;a計算h=atb,kab=e(appub+sa,tb+qb),類似地,b計算h=bta,kba=e(bppub+sb,ta+qa),最終的共享密鑰為h2(h,kab);其中,ta:為alice的臨時會話密鑰,ta=ap,其中tb:為bob的臨時會話密鑰,tb=bp,其中kab:為alice計算出的未經過哈希的會話密鑰,kab=e(appub+sa,tb+qb);kba:為bob計算出的未經過哈希的會話密鑰,kba=e(bppub+sb,ta+qa);h:防止已知密鑰攻擊的臨時會話因子,h=atb,h=bta。上述述密鑰協商過程中,涉及三個參與者,包括系統管理員admin,協商密鑰雙方a、b,具體步驟如下:第一步:系統管理員admin登錄,進行系統初始化;第二步:將要進行密鑰協商的兩方用戶分別在自己的設備上登錄,并在用戶列表中分別選擇將要共享密鑰的人員;第三步:密鑰協商,(1)由一方作為發起密鑰協商方a向服務器發起請求,獲得基于自己身份的私鑰,用戶b操作同a一致;(2)a向系統發出計算臨時密鑰的請求,計算臨時會話密鑰ta,b操作同a,生成臨時密鑰tb;(3)系統根據臨時密鑰計算出最終a、b共同協商的會話密鑰。本發明利用java語言編寫開發了一個基于身份的密鑰協商網絡平臺,包括以下部分:負責轉發請求,以及對請求進行處理的controller層;與用戶進行交互的view層;實現程序算法功能,與數據庫進行交互的model層,而model層又主要包含了進行業務邏輯處理的service層,以及與數據庫操作系統進行交互的dao層。本發明采用一種新的雙線性對的基于身份的密鑰協商方案的算法進行密鑰交換,網站的service層與dao層完全的實現了上述的密鑰協商算法,使用這種新型算法編寫的service層與dao層,使得網站可以提供前向安全性攻擊、已知密鑰攻擊、密鑰妥協假冒攻擊的三種攻擊演示。所述service層與dao層實現下述的密鑰協商算法:密鑰協商過程中,涉及三個參與者,包括系統管理員admin,協商密鑰雙方a、b,具體步驟如下:第一步:系統管理員admin登錄,進行系統初始化;第二步:將要進行密鑰協商的兩方用戶分別在自己的設備上登錄,并在用戶列表中分別選擇將要共享密鑰的人員;第三步:密鑰協商,(1)由一方作為發起密鑰協商方a向服務器發起請求,獲得基于自己身份的私鑰,用戶b操作同a一致;(2)a向系統發出計算臨時密鑰的請求,計算臨時會話密鑰ta,b操作同a,生成臨時密鑰tb;(3)系統根據臨時密鑰計算出最終a、b共同協商的會話密鑰。另一方面,在滿足上述安全性的前提下,該網站還可以給一定數量的合法用戶提供在線密鑰協商服務。與傳統的基于證書的公鑰密碼體制相比,基于身份的公鑰密碼體制直接以用戶的身份標識作為公鑰,不需要證書和相關操作,簡化了公鑰的使用與管理,在實際應用中,具有廣闊的應用前景。下面結合附圖和實施例對本發明做進一步詳細說明。實施例1本實施例中基于身份的兩方的密鑰協商協議,將上述該協議使用網站的形式實現,在該網站上對該協議的安全性進行攻擊演示,具體如下:(1)一種新的基于身份的兩方的密鑰協商協議。該協議主要涉及的算法有基于身份的密鑰協商方案。基于身份的密鑰協商方案,是由三個階段組成的:系統建立、密鑰提取(用戶的公私鑰)、密鑰協商,本系統是對shim(shimk.efficientid-basedauthenticatedkeyagreementprotocolbasedonweilpairing.electronicsletters,2003,39(8):653-654.)提出的基于身份的密鑰協商方案的改進,基于身份的密鑰協商體系示意圖如圖1,整個過程的具體步驟如下:(1)系統建立:公開系統參數:{g1,gt,p,e,p,ppub,h1,h2},保密主私鑰s;其中,g1:為由p生成的加法循環群;gt:為與g1同階的乘法循環群;e:g1×g1→gt為雙線性映射;h1:{0,1}*→g1為一個安全的hash函數;h2:為密鑰提取函數;為pkg隨機選取的系統主私鑰;ppub=sp:為系統主公鑰;(2)密鑰提取:給定一個用戶u的身份idu,pkg計算該用戶的私鑰su=squ,其中qu=h1(idu)是該用戶的公鑰,分別計算此處密鑰協商雙方a、b的公、私鑰;其中,idu:代表用于u的身份;su:代表用戶u的私鑰,su=squ;qu:代表用戶u的公鑰,qu=h1(idu);(3)密鑰協商:a、b分別隨機選取計算各自的臨時會話密鑰ta=ap,tb=bp,并將各自生成的值發送給對方;a計算h=atb,kab=e(appub+sa,tb+qb),類似地,b計算h=bta,kba=e(bppub+sb,ta+qa),最終的共享密鑰為h2(h,kab);其中,ta:為alice的臨時會話密鑰,ta=ap,其中tb:為bob的臨時會話密鑰,tb=bp,其中kab:為alice計算出的未經過哈希的會話密鑰,kab=e(appub+sa,tb+qb);kba:為bob計算出的未經過哈希的會話密鑰,kba=e(bppub+sb,ta+qa);h:防止已知密鑰攻擊的臨時會話因子,h=atb,h=bta。(2)將上述協議完全嫁接到以java語言為基礎springmvc為框架的網絡平臺上面,實現該協議的主要實現代碼如下:系統建立階段代碼如下:protectedelements,a,b,p,ppub,sa,qa,sb,qb,ta,tb,ka,kb,ha,hb,k;protectedfieldg1,zr;protectedpairingpairing;@requestmapping("users/keys/buildsystem.json")publicvoidbuildsystem(){system.out.println("開始buildsystem");init();s=zr.newrandomelement().getimmutable();//隨機生成主私鑰sp=g1.newrandomelement().getimmutable();//生成g1的生成元pppub=p.mulzn(s);//計算ppub=sp,注意順序,生成主公鑰ppub。}密鑰提取階段代碼如下:@requestmapping(value="users/keys/extractsecretkeyof{username}",method={requestmethod.get,requestmethod.post})public@responsebodylist<hashmap>getsecretkey(@pathvariable("username")stringusername){qa=pairing.getg1().newelement().setfromhash(username.getbytes(),0,username.length()).getimmutable();//從長度為3的hash值idu確定用戶u產生的公鑰qa,生成用戶u的公鑰。sa=qa.mulzn(s).getimmutable();//生成用戶u的私鑰。list<hashmap>listone=newarraylist();hashmap<string,string>newsmap=newhashmap<string,string>();newsmap.put("p",sa.tostring());listone.add(newsmap);returnlistone;}計算最終會話密鑰代碼如下:public@responsebodylist<hashmap>createka(){ha=tb.mulzn(a);ka=pairing.pairing((ppub.mulzn(a)).mul(sa),tb.mul(qb))list<hashmap>listone=newarraylist();hashmap<string,string>newsmap=newhashmap<string,string>();newsmap.put("p",sha((ka.tostring()+ha.tostring()),"sha-256"));listone.add(newsmap);returnlistone;}(3)網絡平臺上提供該方案的攻擊演示系統:在初始界面,通過點擊不同攻擊類型的按鈕,演示不同攻擊,具體步驟如下:第一步:點擊相應攻擊演示按鈕(以前向安全性為例);第二步:進行協商密鑰的兩方用戶登錄;第三步:根據相應的攻擊類型,在密鑰協商的不同階段,敵手開始干預攻擊,并生成一個敵手的“會話密鑰”;第四步:比對用戶生成的會話密鑰及敵手的“會話密鑰”是否相同,判斷攻擊是否成功;最后退出系統。具體的攻擊演示流程圖如圖2,該方案安全性較好,可以抵抗多種攻擊,包括本作品中演示的前向安全性、已知密鑰攻擊、密鑰妥協假冒三種攻擊。與傳統的基于證書的公鑰密碼體制相比,基于身份的公鑰密碼體制直接以用戶的身份標識作為公鑰如圖3所示,不需要證書和相關操作,簡化了公鑰的使用與管理。在密鑰協商過程,涉及三個參與者,包括系統管理員admin,協商密鑰雙方(為方便敘述,在此分別記a,b)承接上述登錄成功后,跳轉到用戶協商頁面,兩方開始進行密鑰協商,結合圖4,具體步驟如下:第一步:系統管理員admin登錄,點擊buildsystem按鈕以清空java容器中的歷史數據;第二步:將要進行密鑰協商的兩方用戶分別在自己的設備上登錄,并在用戶列表中分別選擇將要共享密鑰的人員;第三步:密鑰協商,(1)由一方作為發起密鑰協商方(a)向服務器發起請求,點擊extractsecretkey按鈕生成自身的私鑰,b操作同a;(2)a點擊computet按鈕,計算臨時會話密鑰ta,b操作同a,生成tb;(3)a點擊createk按鈕,產生最終a、b共同協商的會話密鑰,b進行相同操作;第四步:檢驗生成相同的會話密鑰,安全退出。1系統實施步驟過程運行各功能模塊,得出如下效果圖:密鑰協商階段:以alice與bob協商為例,圖5是密鑰協商階段流程圖,其中(a)是清除歷史數據階段界面圖,(b)是用戶成功登陸后的協商密鑰界面中alice的界面圖,(c)是用戶成功登陸后的協商密鑰界面中bob的界面圖。圖6是一次協商中生成用戶的私鑰界面圖,其中(a)是一次協商中生成用戶alice的私鑰界面圖,(b)是一次協商中生成用戶bob的私鑰界面圖。圖7是臨時會話密鑰生成界面圖,其中(a)是alice臨時會話密鑰生成界面圖,(b)是bob臨時會話密鑰生成界面圖。圖8是協商密鑰生成界面圖,其中(a)是alice協商密鑰生成界面圖,(b)是bob協商密鑰生成界面圖。2系統實施攻擊演示過程1、輸入系統管理員登陸賬號admin與密碼123456,即可跳轉到管理員功能界面如圖9,管理員通過點擊buildsystem按鈕以清空java容器中的歷史數據,以便開始新一次的密鑰協商。2、協商階段(在此以用戶alice為例說明),輸入用戶賬號alice與密碼1990,跳轉到alice的用戶密鑰協商頁面如圖10,點擊選取將要進行密鑰協商的一方(例如bob),二者進行一次密鑰協商會在相應的私鑰、臨時會話密鑰、共享密鑰欄內生成;3、密鑰攻擊,本作品設計了前向安全性、已知密鑰攻擊、密鑰妥協假冒三種攻擊演示,以下給出三種攻擊演示結果圖如圖11(a)~(c),圖12(a)~(b),圖13(a)~(b)。前向安全性,敵手可以拿到alice與bob的私鑰sa,sb,但沒有主密鑰s,在此情況下,敵手會在最后利用密鑰導出函數隨機輸出一個結果,而如圖11(a),圖11(b)中,alice與bob得到一致的會話密鑰,而敵手得到的會話密鑰顯然與前者不同,意味著,此次攻擊失敗,這是由于敵手鑒于上述信息,不可以計算e(p,p)abs。結合圖12(a)~(b),針對已知密鑰攻擊,因為每次協商,服務器都會重新隨機選取新的隨機數a,b,所以每次生成的臨時會話密鑰均不同,導致共享的會話密鑰不同。在惡意敵手即使獲得歷史的會話密鑰,也不會威脅到以后的會話。結合圖13(a)~(b),針對密鑰妥協假冒,alice將sa泄露給了敵手,敵手通過隨機選取計算出tb發給alice,由于敵手不知道sb及alice隨機選取的a,所以不能計算e(p,qb)as,方案可以抵抗該攻擊。當前第1頁12當前第1頁12