趙 平,王 賾,李 芳,孫士民
天津工業(yè)大學(xué) 計算機(jī)科學(xué)與技術(shù)學(xué)院,天津 300384
數(shù)據(jù)作為第四次工業(yè)革命中的“新時代的石油”,已經(jīng)成為生產(chǎn)、生活不可或缺的部分。由于數(shù)據(jù)需求不斷增加,用戶所處的單一信任域難以滿足,需要建立與其他信任域間的聯(lián)系,獲取更廣泛的數(shù)據(jù)??缬蛏矸菡J(rèn)證技術(shù)是用戶在多個信任域之間完成一致的身份驗證的過程,能夠保證多域信任關(guān)系建立的可信性、高效認(rèn)證的可用性和認(rèn)證過程的可靠性,實現(xiàn)多信任域內(nèi)認(rèn)證系統(tǒng)對有效用戶及時統(tǒng)一認(rèn)證和即時管理[1]。因此,研究一種安全、高效的跨域身份認(rèn)證方案,在不同信任域間建立信任通信關(guān)系,從而獲取所需數(shù)據(jù),成為相關(guān)學(xué)者關(guān)注的重點。
目前常見的跨域身份認(rèn)證方案主要在以下三種密碼體制的信任域間,進(jìn)行認(rèn)證方案的設(shè)計和改進(jìn)。其中結(jié)構(gòu)最穩(wěn)定、體系最成熟的是公鑰基礎(chǔ)設(shè)施(public key infrastructure,PKI)[2],用戶使用證書驗證身份的合法性,實現(xiàn)數(shù)據(jù)的保密性和安全性,但存在證書管理負(fù)擔(dān)重,計算量、通信開銷大和單點失效等問題[3]。為此,Shamir提出基于身份的公鑰密碼體制(identity based cryptography,IBC)[4],解決了證書管理開銷大問題,具有易于維護(hù)等優(yōu)點,但仍然存在效率較低、密鑰托管和單點故障問題。Al-Riyami等提出了無證書公鑰密碼系統(tǒng)(certificateless public key cryptography,CL-PKC)[5],用戶的密鑰分為兩部分,可信的密鑰生成中心(key generation center,KGC)為用戶生成部分密鑰,另一部分密鑰由用戶選擇的秘密值自行生成,KGC無法得知用戶全部私鑰,提高了密鑰安全性。此方法雖然解決了證書管理困難和密鑰托管問題,但仍然存在匿名性等問題。
本文在主從區(qū)塊鏈跨域身份認(rèn)證結(jié)構(gòu)和分層拜占庭容錯算法(hierarchical Byzantine fault tolerance,HBFT)基礎(chǔ)上,在PKI體制和CL-PKC體制的異構(gòu)信任域間建立了雙向跨域認(rèn)證方案,主要貢獻(xiàn)如下:
(1)設(shè)計了與主從區(qū)塊鏈結(jié)構(gòu)匹配的分層拜占庭容錯算法,通過主從鏈分步共識,減少共識參與節(jié)點數(shù)量,通過算法分階段共識,降低每次共識的計算開銷,保證系統(tǒng)活性,增強(qiáng)算法擴(kuò)展性。
(2)將PKI體制與CL-PKC體制內(nèi)特有功能節(jié)點與主從鏈節(jié)點相對應(yīng),在不改變原有信任域節(jié)點功能的前提下,采用區(qū)塊鏈證書、鏈上鏈下混合存儲、組合加密和分層ID樹等結(jié)構(gòu)實現(xiàn)異構(gòu)跨域身份認(rèn)證。
(3)對共識方案進(jìn)行了攻擊模型分析和消息復(fù)雜度分析,對認(rèn)證方案進(jìn)行了安全屬性分析、博弈論模型分析、仿真實驗驗證和計算開銷對比分析,結(jié)果表明方案在保證較高安全性和容錯性的同時,減少了計算開銷。
目前進(jìn)行的跨域身份認(rèn)證研究對于安全、高效傳遞不同信任域的數(shù)據(jù)具有重要的意義,但不同的設(shè)計方案也有各自的優(yōu)缺點。文獻(xiàn)[6]使用代理重簽名技術(shù),實現(xiàn)了基于PKI體制的同構(gòu)跨域認(rèn)證,但方案無法擺脫體制固有的系統(tǒng)開銷大的問題。并且大型網(wǎng)絡(luò)中,難免會遇到不同體制信任域間的認(rèn)證問題。對此,文獻(xiàn)[7]設(shè)計了PKI和IBC體制間異構(gòu)域間密鑰協(xié)商,實現(xiàn)等級信任域之間的跨域認(rèn)證,但用戶端的計算量較大。文獻(xiàn)[8]基于盲簽名技術(shù)實現(xiàn)了PKI和CL-PKC體制異構(gòu)信任域間的跨域身份認(rèn)證。文獻(xiàn)[9]使用代理重簽名技術(shù),同樣實現(xiàn)了異構(gòu)域環(huán)境下不同信任域之間的訪問控制。上述方案雖然實現(xiàn)了跨域身份認(rèn)證,但均無法抵制中心化身份方案存在的因單點崩潰造成的用戶隱私泄露的風(fēng)險。
隨著區(qū)塊鏈技術(shù)的發(fā)展,其在身份認(rèn)證領(lǐng)域的應(yīng)用近年來愈發(fā)受到重視,憑借其去中心化、不可篡改等優(yōu)勢,有效保護(hù)了數(shù)據(jù)隱私,改善了單點失效、主體信任和證書管理等問題。文獻(xiàn)[10]基于區(qū)塊鏈技術(shù),設(shè)計了身份認(rèn)證模型,在同構(gòu)信任域間成功建立連接路徑,但沒有考慮異構(gòu)信任域之間的跨域訪問問題。文獻(xiàn)[11]結(jié)合區(qū)塊鏈技術(shù),實現(xiàn)了異構(gòu)環(huán)境下物聯(lián)網(wǎng)設(shè)備間相互認(rèn)證,但存在鏈上賬本記錄交易公開造成的隱私泄露問題。文獻(xiàn)[12]利用區(qū)塊鏈分布式賬本,實現(xiàn)了網(wǎng)絡(luò)環(huán)境中用戶的跨域認(rèn)證,但是認(rèn)證過程較復(fù)雜,計算開銷大。文獻(xiàn)[13]在提出的基于區(qū)塊鏈的跨域認(rèn)證方案中引入了區(qū)塊鏈證書,但主要針對的是PKI域同構(gòu)認(rèn)證,并且單鏈結(jié)構(gòu)在運(yùn)行時效率相對較低,計算量較大。文獻(xiàn)[14]在PKI域和IBC域間設(shè)計了一種基于多層區(qū)塊鏈的異構(gòu)跨域認(rèn)證方案,但是認(rèn)證過程復(fù)雜,總體計算開銷相對較大。
基于以上對使用中心化模式和區(qū)塊鏈模式的身份認(rèn)證方案的研究,為提升方案效率和安全性,本文設(shè)計了主從區(qū)塊鏈結(jié)構(gòu)??缬蛘J(rèn)證方案模型中,各信任域內(nèi)節(jié)點組成從鏈,選出執(zhí)行超時輪換機(jī)制的代表節(jié)點,起到身份認(rèn)證、傳遞共識和數(shù)據(jù)存儲功能;每個代表節(jié)點對應(yīng)的主鏈節(jié)點共同組成一條主鏈,通過對區(qū)塊鏈進(jìn)行證書頒發(fā)、共識傳遞和驗證,并且進(jìn)行鏈際信任傳遞和數(shù)據(jù)存儲,簡化傳統(tǒng)身份認(rèn)證中信任傳遞過程。針對集中式攻擊風(fēng)險和整鏈共識效率低等問題,主從區(qū)塊鏈結(jié)構(gòu)為異構(gòu)跨域認(rèn)證帶來的優(yōu)化主要表現(xiàn)在以下兩方面:
一方面,將整條區(qū)塊鏈拆分為一條主鏈和多條從鏈,把不同體制的信任域內(nèi)不同功能的節(jié)點在主從鏈中進(jìn)行功能匹配。由于區(qū)塊鏈本身去中心化特性,可降低集中式風(fēng)險,再使用區(qū)別于以往整鏈共識的局部共識,僅需在認(rèn)證相關(guān)從鏈和主鏈進(jìn)行共識即可完成數(shù)據(jù)共識共享,有效地減少了共識參與節(jié)點數(shù)量,提高了認(rèn)證效率。同時主從鏈結(jié)構(gòu)可擴(kuò)展性更強(qiáng),任何新的信任域的加入,對其他從鏈信任域無影響,只需將信任域內(nèi)節(jié)點與從鏈節(jié)點功能進(jìn)行匹配,在主鏈增加本信任域的主鏈節(jié)點,新加入的信任域會通過主鏈共識,將主鏈原有信任憑證共識到新主鏈節(jié)點的本地,至此即獲得了以往共識的全部數(shù)據(jù)和信任憑證。
另一方面,針對不同體制的分布式異構(gòu)信任域,在不改變原有信任域內(nèi)部組織結(jié)構(gòu)和節(jié)點功能的前提下,設(shè)計了同樣分布式的從鏈模型進(jìn)行對應(yīng),提高了應(yīng)用的匹配度。主鏈、從鏈在鏈間、鏈際對信任憑證等部分?jǐn)?shù)據(jù)進(jìn)行傳輸時,區(qū)別于傳統(tǒng)中心化信任發(fā)布和點對點數(shù)據(jù)傳輸,采用代表節(jié)點動態(tài)變化的分階段、分層共識,進(jìn)行數(shù)據(jù)共享和信任傳遞,既簡化了認(rèn)證交互流程,又可以有效利用區(qū)塊鏈不可篡改和可追溯的特點,結(jié)合鏈下存儲原數(shù)據(jù)、鏈上存儲數(shù)據(jù)哈希值的方法,所有參與共識的節(jié)點共同記錄數(shù)據(jù)和操作,若出現(xiàn)問題,可以進(jìn)行有效追溯,對信任憑證進(jìn)行有效保護(hù),提高了憑證可信度。
如圖1所示,本節(jié)設(shè)計了與主從鏈結(jié)構(gòu)匹配的分層拜占庭容錯算法(HBFT)。算法整體分為三個步驟:發(fā)起鏈共識、主鏈共識和目標(biāo)鏈共識。每次共識又根據(jù)節(jié)點安全性不同,分別執(zhí)行HBFT算法中速度快、開銷小的簡化共識算法(simplified consensus algorithm,SCA)[15]和開銷較大、容錯能力強(qiáng)的拜占庭容錯算法(practical Byzantine fault tolerance,PBFT)。通過采用開銷和容錯能力不同的共識方法,實現(xiàn)共識機(jī)制的動態(tài)調(diào)整,以達(dá)到HBFT共識算法效率的最優(yōu)化,從而為跨域身份認(rèn)證過程建立可通信基礎(chǔ)。
算法為保證消息傳輸準(zhǔn)確性和安全性,消息中包含了數(shù)字簽名、消息認(rèn)證碼等。其中m表示消息,k表示節(jié)點序號,傳遞的消息為{Sigskk(H(m))|m}。算法定義共識過程中非共識發(fā)起節(jié)點總數(shù)為N,共識做出正確決策結(jié)果需要的最少響應(yīng)消息數(shù)為Q,未響應(yīng)的節(jié)點數(shù)為R,錯誤節(jié)點數(shù)為f,要求滿足N≥3f+1,Q≥2f+1,R≤f。進(jìn)行如下解釋:
不響應(yīng)的節(jié)點不一定是惡意節(jié)點,也有可能是通信問題導(dǎo)致未響應(yīng);響應(yīng)的節(jié)點不一定是正確節(jié)點,也有可能是惡意節(jié)點冒充。系統(tǒng)中至多f個錯誤節(jié)點,可能分布在不響應(yīng)的正確節(jié)點和響應(yīng)的惡意節(jié)點中。做極端的假設(shè):這f個不響應(yīng)的節(jié)點都是正確節(jié)點,但因通信故障無法響應(yīng),則收到響應(yīng)節(jié)點中還有f個錯誤節(jié)點是惡意節(jié)點,進(jìn)行了錯誤響應(yīng)。為了讓共識成立,需要正確節(jié)點數(shù)大于錯誤節(jié)點數(shù),響應(yīng)的節(jié)點中至少需要f+1個正確節(jié)點。因此為了保證共識正常進(jìn)行,需要非共識發(fā)起節(jié)點數(shù)量N≥f+f+(f+1),即N≥3f+1;Q≥f+(f+1),即Q≥2f+1。
以共識發(fā)起從鏈A向共識目標(biāo)鏈B進(jìn)行共識為例,具體流程描述如圖2所示。
2.2.1 發(fā)起從鏈共識階段
步驟1Request0階段:共識發(fā)起節(jié)點UA向代表點SCA發(fā)布共識請求{m|SigUA(Request,t,UA,H(m))},其中t為時間戳,Request為共識請求標(biāo)識。
步驟2Commit0階段:SCA判斷Request正確性,驗證請求簽名,檢查時間戳t,為請求消息編號,向包括本身在內(nèi)的N個非共識請求發(fā)起節(jié)點轉(zhuǎn)發(fā)共識請求。
步驟3Reply0階段:SCA和副本節(jié)點Ai收到請求消息后,進(jìn)行本地處理,對計算的摘要進(jìn)行簽名,向UA反饋,并進(jìn)行算法轉(zhuǎn)換判斷。
若UA收到了N個節(jié)點結(jié)果相同的響應(yīng)消息,則說明系統(tǒng)無錯誤節(jié)點,共識成功,進(jìn)入Response0階段。若收到的響應(yīng)數(shù)不足N個,或響應(yīng)中存在不一致結(jié)果,說明系統(tǒng)中存在錯誤節(jié)點,則跳轉(zhuǎn)至Panic0階段,繼續(xù)執(zhí)行共識過程。
步驟4 Response0階段:UA將所有簽名后的響應(yīng)打包,發(fā)給N個非共識發(fā)起節(jié)點,節(jié)點收到消息后驗證,保存共識結(jié)果。至此SCA共識階段完成,共識成功。
步驟5 Panic0階段:進(jìn)入節(jié)點超時等待機(jī)制,UA對請求作出失敗判斷,嘗試重新發(fā)起共識請求。
步驟6 Abort1階段:若重復(fù)請求仍失敗,節(jié)點執(zhí)行回滾操作,進(jìn)行共識算法切換,進(jìn)入PBFT共識算法。
步驟7 Request1階段:UA向SCA發(fā)送新共識請求。
步驟8 Pre-prepare1階段:SCA為請求消息編號n,向N個非共識發(fā)起節(jié)點廣播一條預(yù)準(zhǔn)備消息{SigUA(Preprepare,v,n,h(m),m)}。預(yù)準(zhǔn)備消息作為一種證明手段,明確請求已在視圖v中得到編號n,在因代表節(jié)點變更造成視圖轉(zhuǎn)換時,便于尋找。
步驟9 Prepare1階段:Ai向非共識發(fā)起節(jié)點廣播準(zhǔn)備消息{SigUA(Pre-prepare,v,n,h(m))},節(jié)點接收廣播消息后,檢查簽名、視圖號v正確性。
由于N≥3f+1,除去至多f個未反饋的節(jié)點和1個代表節(jié)點,剩余2f個節(jié)點在步驟9收到至少2f條消息,節(jié)點在步驟8收到1條消息,因此兩個階段共計至少2f+1條消息保存到本地。
步驟10 Commit1階段:非共識發(fā)起節(jié)點相互廣播確認(rèn)消息SigSCAorAi(Commit,v,n,h(m)),節(jié)點驗證簽名和視圖號正確性后,將消息寫入到本地。若節(jié)點收到Q條消息,則共識達(dá)成。
因為Q≥f+(f+1),其中錯誤節(jié)點數(shù)小于f,即非錯誤節(jié)點數(shù)至少為f+1個,所以可滿足完成正確共識。
步驟11 Reply1階段:N個非共識發(fā)起節(jié)點將簽名后的響應(yīng)發(fā)送至共識發(fā)起節(jié)點UA。
步驟12 Response1階段:UA將收到的所有響應(yīng)打包發(fā)給N個非共識發(fā)起節(jié)點,至此HBFT過程完成。
2.2.2 主鏈共識階段
共識發(fā)起從鏈代表節(jié)點SCA將共識結(jié)果發(fā)至對應(yīng)的主鏈節(jié)點MA后,由MA作為主鏈共識發(fā)起節(jié)點,在主鏈范圍內(nèi)將消息向其余從鏈代表節(jié)點對應(yīng)的主鏈節(jié)點進(jìn)行共識,流程與從鏈共識大致相同。區(qū)別在于主鏈共識中在發(fā)現(xiàn)任何節(jié)點錯誤時,系統(tǒng)均會指定其對應(yīng)的從鏈進(jìn)入代表節(jié)點超時輪換機(jī)制和延遲逐級增加機(jī)制,更換正確代表節(jié)點,直至HBFT共識完成,這保證了其他從鏈的代表節(jié)點正確性,進(jìn)而保證了后續(xù)傳遞的共識內(nèi)容正確性。
2.2.3 目標(biāo)從鏈共識階段
以共識目標(biāo)從鏈B為例,MB在主鏈共識過程已經(jīng)獲取了共識數(shù)據(jù),即可作為共識發(fā)起節(jié)點,發(fā)布正確的共識請求,在對應(yīng)從鏈代表節(jié)點SCB的協(xié)助下完成鏈內(nèi)HBFT共識,至此完成整個共識過程,數(shù)據(jù)通過共識進(jìn)行了正確共享。此階段有較強(qiáng)擴(kuò)展性,在主鏈達(dá)成共識后,任何從鏈接入網(wǎng)絡(luò),查詢主鏈已有共識數(shù)據(jù)作為目標(biāo)從鏈共識消息,進(jìn)行從鏈內(nèi)共識即可進(jìn)行跨域通信。
本文在設(shè)計的主從區(qū)塊鏈結(jié)構(gòu)和分層拜占庭容錯算法基礎(chǔ)上,實現(xiàn)了基于PKI體制和CL-PKC體制異構(gòu)信任域間的雙向身份認(rèn)證方案。所有節(jié)點上鏈后將自身公鑰共識公開,方案中傳遞的所有消息均采用對稱加密和非對稱加密結(jié)合的方式,使用對稱加密算法快速加密數(shù)據(jù),使用非對稱加密算法加密對稱加密的密鑰,因此同時具備了對稱加密的高效性和非對稱加密的安全性。模型由以下4類實體組成,方案中符號含義如表1所示。
表1符號說明Table 1 Symbol description
(1)從鏈節(jié)點UN:從鏈中認(rèn)證發(fā)起和目標(biāo)節(jié)點,可以提出域內(nèi)和跨域身份認(rèn)證請求。
(2)從鏈代表節(jié)點SCN:從鏈內(nèi)認(rèn)證節(jié)點,由從鏈所有節(jié)點選舉產(chǎn)生,履行代表節(jié)點超時輪換機(jī)制和延遲逐級增加機(jī)制,參與節(jié)點身份生成、跨域認(rèn)證和相關(guān)數(shù)據(jù)存儲。代表節(jié)點在CL-PKC信任域中具備KGC生成部分密鑰的功能;在PKI信任域中具備RA身份審核和更新證書等功能。
(3)主鏈節(jié)點MN:SCN在主鏈的對應(yīng)節(jié)點,當(dāng)新節(jié)點通過訪問控制加入從鏈時,為其生成根證書CertA,并將根證書的哈希值寫入?yún)^(qū)塊內(nèi),通過主鏈共識,傳遞到其他從鏈中,作為身份認(rèn)證過程中的信任憑證。在PKI信任域中起到CA分發(fā)證書的功能。
(4)副本節(jié)點Ni:從鏈中的驗證節(jié)點,對共識發(fā)起者提出的共識進(jìn)行驗證。
方案根據(jù)X.509數(shù)字證書[16]設(shè)計了區(qū)塊鏈證書。節(jié)點上鏈后,主鏈節(jié)點為其生成根證書,并寫入?yún)^(qū)塊鏈,作為信任間不可篡改的信任憑證。本方案將鏈上的證書寫入接口定義為write(action,Hash(Cert)),其中參數(shù)action定義為根證書當(dāng)前處理的狀態(tài)參數(shù),包括發(fā)布issue或撤銷revoke兩種狀態(tài)。將鏈上的查詢接口定義為query(Hash(Cert)),使用交易證書的哈希值Hash(Cert)作為用戶查詢的條件,利用證書哈希值,在鏈上高效查詢證書的狀態(tài)action[17]。
利用分層ID樹結(jié)構(gòu)能夠較好地解決身份唯一性問題[18]的優(yōu)點,構(gòu)造UN的真實身份。分層ID樹結(jié)構(gòu)的根節(jié)點是SCN的身份標(biāo)識DNN,葉子節(jié)點是UN的身份標(biāo)識DNUN,UN的真實身份為IDUN=DNSCN||DNUN。具體密鑰生成過程如下:
(1)UN→SCN:{Req,DNUN,ru,TIDUN,T11}
UN選取隨機(jī)值α作為部分私鑰,計算自身公鑰PKUN;根據(jù)UN的真實身份IDUN和選取的隨機(jī)數(shù)ru計算出臨時身份TIDUN=Hash2(IDUN||ru),讀取時間戳T11,向SCN發(fā)送加密后的身份注冊請求消息,Req為身份注冊請求標(biāo)識。
(2)SCN→UN:{Res,PSKUN,CertUN,T12}
SCN解密消息,根據(jù)消息中DNUN和持有的DNSCN計算UN真實身份IDUN,并結(jié)合ru驗證TIDUN正確性。若均通過,則計算UN的部分私鑰PSKUN,獲取區(qū)塊鏈證書CertUN,讀取T12,生成注冊響應(yīng)標(biāo)識Res,向UN返回加密消息。在用戶注冊列表保存{IDUN,TIDUN,CertUN,ru}。
(3)UN解密消息,得到部分私鑰PSKUN,結(jié)合自身持有的另一部分私鑰α,共同計算自身完整私鑰SKUN,并在本地保存{CertUN,SKUN}。
以信任域A中節(jié)點UA請求訪問異構(gòu)信任域B的資源為例,構(gòu)造首次異構(gòu)跨域身份認(rèn)證方案。方案模型如圖3所示。
(1)UA→SCB:{PKUA,SigSKUA(ReqUA,X′,NUA,CertUA,T21)}
UA向SCB提出跨域訪問請求,加密消息:跨域訪問請求標(biāo)識ReqUA,根據(jù)隨機(jī)秘密值x和私鑰SKUA計算的密鑰協(xié)商參數(shù)X′=gx,隨機(jī)參數(shù)標(biāo)識NUA等。
(2)SCB→MB:{PKSCB,SigSKSCB(ReqCertUA,CertUA,unknow,T22)}
SCB解密消息,驗證簽名確認(rèn)UA身份,明確UA所在信任域,驗證標(biāo)識ReqUA。若均成功,則向MB提出證書狀態(tài)查詢,加密內(nèi)容:證書狀態(tài)查詢請求ReqCertUA,訪問資格未知狀態(tài)unknow等。本地保存{CertUA,X′,NUA}。
(3)MB→SCB:{PKMB,SigSKMB(ResCertUA,continue,expireCertUA,T23)}
MB解密消息,驗證簽名確認(rèn)SCB身份,確認(rèn)ReqCertUA,檢查T22。若均成功,執(zhí)行證書狀態(tài)查詢,SCB用Hash(CertUA)在主鏈查詢,得到以下可能結(jié)果:若無查詢結(jié)果,則認(rèn)定UA無法提供或者提供了錯誤CertUA,認(rèn)證失敗;若結(jié)果為issue和revoke兩種狀態(tài),則CertUA已過期,或已從發(fā)布狀態(tài)轉(zhuǎn)為撤銷狀態(tài),認(rèn)證失敗;若只有狀態(tài)issue,則CertUA當(dāng)前在有效期內(nèi),且為已發(fā)布狀態(tài),可以進(jìn)行訪問,訪問資格狀態(tài)由未知unknow改為可進(jìn)行continue。
MA向SCB返回認(rèn)證成功響應(yīng),加密內(nèi)容包括證書狀態(tài)查詢響應(yīng)標(biāo)識ResCertUA、節(jié)點身份失效時間expireCertUA等。本地保存{CertA,continue,expireCertUA}。
(4)SCB→UA:{PKSCB,SigSKSCB(ResUA,continue,expireCertUA,W′,NUA,T24)}
SCB解密消息,驗證簽名確認(rèn)MB身份,檢查響應(yīng)標(biāo)識ResCertUA、時間戳T23和失效時間expireCertUA,查看證書當(dāng)前狀態(tài),若為continue,則SCB向UA發(fā)送請求成功響應(yīng),加密消息包括根據(jù)隨機(jī)秘密值w計算的密鑰協(xié)商參數(shù)W′=gw、響應(yīng)標(biāo)識ResUA等。本地保存數(shù)據(jù){W′,CertUA,continue,expireCertUA},計算與UA的會話密鑰KSCB→UA=(PKUA)SKSCB(X′)w。
(5)UA解密消息,驗證簽名確認(rèn)SCB的身份,驗證響應(yīng)標(biāo)識ResUA,檢查T24,判斷響應(yīng)消息中NUA與認(rèn)證請求消息中的是否一致,若均成功,則將{continue,expireCertUA,W′}保存至本地。計算與SCB會話密鑰KUA→SCB=(PKSCB)SKUA(W′)x。
至此,認(rèn)證發(fā)起從鏈A中節(jié)點UA與認(rèn)證目標(biāo)從鏈B代表節(jié)點SCB間成功建立起資源訪問連接,流程如圖4所示。
以A鏈內(nèi)認(rèn)證發(fā)起節(jié)點UA向共識目標(biāo)鏈B的代表節(jié)點SCB發(fā)起跨域訪問重認(rèn)證為例,描述此階段的模型如圖5所示。
UA與SCB在建立首次跨域身份認(rèn)證連接后,SCB已將UA的身份信息記錄在本地列表中。通過以下三種驗證方式,判斷重認(rèn)證是否成功:區(qū)塊鏈證書認(rèn)證狀態(tài)是否為continue;身份失效時間expireCertUA是否在有效范圍內(nèi);注冊列表中是否存在前后一致的會話密鑰,若均通過,則重認(rèn)證成功。避免了重復(fù)完整通信過程,可以高效、安全地進(jìn)行雙向跨域身份重認(rèn)證。
為確保方案的安全性,本文在共識過程中,首先通過SCA共識算法進(jìn)行錯誤節(jié)點查找。若存在錯誤節(jié)點,則通過回滾操作進(jìn)行算法切換,進(jìn)入PBFT共識過程,當(dāng)節(jié)點滿足N≥3f+1,Q≥2f+1時,確保方案安全性。以下描述了不同節(jié)點出現(xiàn)錯誤時的攻擊模型。
(1)若UN為發(fā)起惡意共識的攻擊者,對多個數(shù)據(jù)量巨大的消息或?qū)Ξ惓?quán)限變更操作發(fā)起共識,造成類似DoS攻擊,惡意消耗攻擊對象資源,達(dá)到拒絕其他節(jié)點共識服務(wù),或非常規(guī)權(quán)限變更的目的。由于PBFT算法不能解決因共識發(fā)起者失效帶來的影響,需要引入訪問控制方法解決分層權(quán)限變更問題。聯(lián)盟鏈通過審核共識發(fā)起者權(quán)限和阻止產(chǎn)生無權(quán)操作等方式,降低節(jié)點失效造成的風(fēng)險。任何對權(quán)限的操作,所有節(jié)點均通過共識可見,起到了節(jié)點行為群體監(jiān)督功能,也提供了一種從失效節(jié)點攻擊中恢復(fù)的機(jī)制。
(2)當(dāng)SCN是攻擊者時,通過不響應(yīng)或響應(yīng)錯誤消息的方式影響共識過程,造成消息出現(xiàn)丟失、延遲或亂序等情況。共識過程第二階段,利用PBFT算法的代表超時輪換機(jī)制和延遲逐級增加機(jī)制解決此問題。當(dāng)SCN失效時,進(jìn)入延遲等待環(huán)節(jié),設(shè)置閾值限定延遲等待時間,當(dāng)系統(tǒng)判定等待時間超過閾值,則更換下一個節(jié)點為代表節(jié)點,同時增加延遲時間。若仍無法達(dá)成共識則,則繼續(xù)更換代表節(jié)點并增加延時,直至網(wǎng)絡(luò)響應(yīng)。因此,可以保證在延遲不是無限的情況下,防止無期限地等待請求執(zhí)行的情況發(fā)生,確保方案保持活性。
(3)當(dāng)Ni是錯誤節(jié)點時,同樣存在不響應(yīng)或反饋錯誤消息,擾亂共識順序,破壞共識結(jié)果。對此,執(zhí)行容錯共識算法,當(dāng)滿足N≥3f+1,Q≥2f+1時,排除錯誤節(jié)點對共識結(jié)果的干擾。
當(dāng)從鏈完成正確共識,正確的結(jié)果經(jīng)由該鏈代表節(jié)點SCN發(fā)送至主鏈節(jié)點MN,這保證了主鏈共識請求的正確性。由于非共識發(fā)起鏈的代表節(jié)點的正確性未知,主鏈共識過程仍進(jìn)行完整HBFT共識算法,一旦發(fā)現(xiàn)錯誤節(jié)點,則該節(jié)點對應(yīng)的從鏈進(jìn)入代表超時輪換機(jī)制和延遲逐級增加機(jī)制,更換節(jié)點,增加延時,直至完成共識。
方案針對跨域身份認(rèn)證過程中可能存在的攻擊形式進(jìn)行安全性分析。如表2所示,本文方案對比了近幾年的傳統(tǒng)跨域認(rèn)證方案和引入?yún)^(qū)塊鏈結(jié)構(gòu)的跨域認(rèn)證方案,從雙向?qū)嶓w認(rèn)證和抗重放攻擊等五方面進(jìn)行安全屬性比較。結(jié)果表明本文方案在抵抗認(rèn)證過程的攻擊時有較高的安全性。表中“√”表示該方案具備該性能,“×”表示不具備該性能。
4.2.1 雙向?qū)嶓w認(rèn)證
如圖6雙向?qū)嶓w認(rèn)證模型所示,本文方案與文獻(xiàn)[7,19]相比,實現(xiàn)了雙向?qū)嶓w認(rèn)證。實體認(rèn)證主要經(jīng)歷了四部分:主鏈節(jié)點MA在信任域內(nèi)向UA分發(fā)證書;域內(nèi)認(rèn)證改變證書狀態(tài)為issue;主鏈共識將證書狀態(tài)issue向其他從鏈對應(yīng)的主鏈節(jié)點傳遞共識消息;跨域認(rèn)證過程改變節(jié)點的認(rèn)證權(quán)限。信任傳遞過程分為11個步驟,完成了從證書狀態(tài)issue到節(jié)點認(rèn)證權(quán)限可執(zhí)行continue的轉(zhuǎn)變。方案進(jìn)行了節(jié)點間的雙向認(rèn)證通信,并且每個步驟節(jié)點對應(yīng)的本地存儲設(shè)備均保存了通信相關(guān)數(shù)據(jù),便于在未來的反向認(rèn)證過程中高效實現(xiàn)認(rèn)證。
表2不同方案安全性比較Table 2 Comparison of scheme security attributes
4.2.2 抗重放攻擊
如圖7抗重放攻擊模型所示,如果攻擊者通過竊聽等方式截獲消息,運(yùn)用非法手段獲取了此條認(rèn)證消息的功能,則攻擊者無需知道消息具體內(nèi)容是什么,通過重新發(fā)送該消息的方式,非法獲取對應(yīng)權(quán)限。因此,本文節(jié)點在通信前,首先進(jìn)行時間同步,保證時間戳選取有效,然后節(jié)點在認(rèn)證過程傳遞的每條消息均加入了時間戳T,用來保持消息新鮮性。當(dāng)目標(biāo)節(jié)點收到消息后,會對時間戳T進(jìn)行驗證,若消息中的時間戳T超出有效期,則認(rèn)定受到了重放攻擊,認(rèn)證失敗。因此本方案能有效抵抗重放性攻擊。
4.2.3 抵抗中間人攻擊
如圖8抗中間人攻擊模型所示,本文方案與文獻(xiàn)[13,20]對比,在進(jìn)行異構(gòu)資源跨域交互過程中,通信雙方均使用自身私鑰進(jìn)行簽名,使用對方公鑰對消息進(jìn)行加密。即使攻擊者成功截獲消息,但只要私鑰安全性得到保障,則加密和簽名即可保證安全。因而,敵手無法通過解密獲取明文,無法偽造簽名,通過接收方的驗證,方案能抵抗中間人攻擊。
4.2.4 身份追蹤
與文獻(xiàn)[7,13,17,19-20]對比,通過以下方式判斷節(jié)點合法性:SCN對UN發(fā)來的消息解密,得到了{(lán)DNUN,ru,TIDUN1};由公式IDUN=DNSCN||DNUN,SCN,通過自身持有的DNSCN和解密得到的DNUN共同計算,獲取UN的真實身份IDUN;再使用ru通過公式TIDUN=Hash2(IDUN||ru)計算UN的臨時身份TIDUN2,與UN發(fā)送的消息中的臨時身份TIDUN1進(jìn)行對比,若兩個臨時身份不同,則該節(jié)點為非法節(jié)點。通過計算IDUN追蹤非法節(jié)點身份,因此本方案可進(jìn)行身份追蹤。
4.2.5 抵抗分布式拒絕服務(wù)(DDoS)攻擊
與文獻(xiàn)[7,9]相比,本文方案引入?yún)^(qū)塊鏈結(jié)構(gòu),利用其分布式架構(gòu)下無中心、可追溯等特點,即使一個或者多個節(jié)點失效,只要有效節(jié)點數(shù)量支持完成正確的共識算法HBFT,則整體方案最終結(jié)果不受影響,因此可以解決DDoS攻擊造成的單點失效問題。
以下根據(jù)博弈論機(jī)制[21]證明方案的安全性。假設(shè)X給Y發(fā)送消息,CE為通信環(huán)境,Z為攻擊者,P代表參與者集合,記作P={X,Y,Z,CE}且P′=P/{CE}。假設(shè)Y確定消息發(fā)出者是X的概率為α,X確定只有Y獲得消息的概率為β,Z獲得消息的概率為γ。根據(jù)博弈論機(jī)制,各個參與者理性選擇策略達(dá)到自身利益最大化。從圖9中可見,博弈最佳結(jié)果(α,β,γ)的納什均衡為q1q2q3q4q5q7q9,顯然安全通信階段的密碼算法直接影響博弈結(jié)果。
由表3可知,本文的跨域認(rèn)證方案同時使用加密算法和簽名算法,滿足安全協(xié)議的博弈論機(jī)制下對協(xié)議的安全性要求。
如圖10所示,本文使用安全協(xié)議自動驗證工具AVISPA,對首次跨域認(rèn)證方案的安全性進(jìn)行仿真實驗。方案代碼詳細(xì)描述了認(rèn)證發(fā)起節(jié)點UA、從鏈代表節(jié)點SCB和主鏈節(jié)點MB的角色規(guī)范,同時對協(xié)議環(huán)境、會話和保密性目標(biāo)進(jìn)行了定義。分別在CL-AtSe和OFMC自動后端分析模型下執(zhí)行仿真實驗,結(jié)果均為SAFT。由此證明,本文方案在抗重放攻擊和抗中間人攻擊時有較高安全性。
當(dāng)系統(tǒng)無錯誤節(jié)點,只進(jìn)行SCA算法進(jìn)行共識。過程中UN在Request0階段發(fā)送1條請求信息,在Response0階段發(fā)送N條響應(yīng)信息。SCN在Commit0階段轉(zhuǎn)發(fā)N次請求,在Reply0階段發(fā)送1次響應(yīng)請求。其他副本節(jié)點在Reply0階段反饋N-1條響應(yīng)信息,因此SCA階段算法一共需要傳遞的消息總數(shù)如式(1)所示:
即算法的消息復(fù)雜度為線性階O(n)。算法性能接近鏈上性能最弱的節(jié)點的消息處理能力上限。因此在系統(tǒng)安全環(huán)境下,本方案共識算法較大程度降低了完成正確共識所需要的開銷,高效完成正確共識。
當(dāng)系統(tǒng)出現(xiàn)錯誤節(jié)點,進(jìn)行共識算法切換的步驟也僅需增加回滾操作產(chǎn)生的至多N條消息,消息復(fù)雜度仍為O(n)。
當(dāng)切換到PBFT容錯算法后,UN在Request1階段發(fā)布1條請求消息,在Response1階段發(fā)布N條共識消息。SCN在Pre-prepare1和Prepare1階段發(fā)布了2N條消息。副本節(jié)點在Prepare1階段發(fā)送了N(N-R-1)條消息,在Commit1階段發(fā)送了N(N-R)條消息,在Reply1階段反饋N-R條消息。因此本階段算法共需要傳遞消息綜述如式(2)所示:
即算法的消息復(fù)雜度達(dá)到了平方階O(n2)。雖然性能相對SCA較低,并且吞吐量會隨N的增加明顯降低,但PBFT能夠在系統(tǒng)節(jié)點滿足N≥3f+1,Q≥2f+1時,忽略錯誤節(jié)點對共識結(jié)果的影響,提高了系統(tǒng)容錯能力,獲得此階段共識安全性的提高。
在HBFT應(yīng)用到異構(gòu)跨域認(rèn)證方案時,系統(tǒng)有別于傳統(tǒng)區(qū)塊鏈所有節(jié)點進(jìn)行數(shù)據(jù)共識,只在認(rèn)證發(fā)起從鏈、主鏈和認(rèn)證目標(biāo)從鏈三條鏈內(nèi)進(jìn)行共識,減少了共識過程的資源消耗,因此HPFT的模式更有利于在規(guī)模龐大的系統(tǒng)中使用。
本文與其他跨域認(rèn)證方案進(jìn)行了計算開銷的對比,忽略與跨域認(rèn)證無關(guān)的因素影響,從加解密次數(shù)、簽名與驗證次數(shù)、雙線性運(yùn)算次數(shù)、哈希運(yùn)算次數(shù)和交互消息數(shù)五方面進(jìn)行具體比較,結(jié)果如圖11所示。
假設(shè)本文方案與文獻(xiàn)[7,14,22]方案中加解密算法、簽名算法計算開銷均相同,則可以通過對比不同類型運(yùn)算的次數(shù)的形式,反映各種方案的計算開銷。本文方案與使用傳統(tǒng)異構(gòu)跨域方法的文獻(xiàn)[7]對比,引入了區(qū)塊鏈證書結(jié)構(gòu),優(yōu)化了認(rèn)證過程,較少了交互消息數(shù),從而在計算開銷較大的加解密運(yùn)算上,減少為文獻(xiàn)[7]方案的一半;與文獻(xiàn)[14]在物聯(lián)網(wǎng)分布式設(shè)備間使用區(qū)塊鏈技術(shù)的身份認(rèn)證方案對比,雖然在使用加解密次數(shù)上沒有明顯優(yōu)勢,但方案通過減少簽名與驗證次數(shù),省去了多次復(fù)雜的雙線性運(yùn)算過程,計算開銷明顯降低;與同樣使用區(qū)塊鏈技術(shù)的文獻(xiàn)[22]方案對比,優(yōu)化了認(rèn)證過程,減少了加解密運(yùn)算次數(shù)、哈希運(yùn)算次數(shù)和交互消息數(shù),在保證安全性的前提下,降低了方案開銷。
使用區(qū)塊鏈技術(shù)的優(yōu)勢解決傳統(tǒng)數(shù)據(jù)安全問題,是十分具有研究前景的方向。本文遵循此原則,在熟練掌握區(qū)塊鏈知識后,對傳統(tǒng)跨域身份認(rèn)證問題進(jìn)行了剖析,最終得到了問題解決思路。設(shè)計了動態(tài)執(zhí)行的分層拜占庭容錯算法和主從鏈節(jié)點相互合作的主從區(qū)塊鏈結(jié)構(gòu),用以改進(jìn)傳統(tǒng)的異構(gòu)跨域身份認(rèn)證問題。研究結(jié)果表明,方案在安全性和高效性間尋求了一種平衡,并且在認(rèn)證過程中起到一定容錯效果。接下來的研究工作,將繼續(xù)深入發(fā)掘跨域身份認(rèn)證在實際應(yīng)用中存在的問題,并使用區(qū)塊鏈技術(shù)進(jìn)行解決。