繆文豪,王健翔,鄭朝暉
(蘇州大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇 蘇州 215006)
近年來(lái),隨著互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展和普遍應(yīng)用,大規(guī)模分布式系統(tǒng)的數(shù)量急劇增長(zhǎng)[1],網(wǎng)絡(luò)安全問(wèn)題也日益受到關(guān)注。認(rèn)證技術(shù)是保障網(wǎng)絡(luò)安全和隱私信息的關(guān)鍵,傳統(tǒng)的認(rèn)證方案都是基于中心化的模式[2],但這種方式也帶來(lái)了許多網(wǎng)絡(luò)安全風(fēng)險(xiǎn),比如單點(diǎn)故障、隱私泄露、易受攻擊等[3]。目前的網(wǎng)絡(luò)身份認(rèn)證系統(tǒng)大多采用口令認(rèn)證和密鑰體制認(rèn)證的方案。Hwang[4]提出了前向哈希鏈的動(dòng)態(tài)口令方案,雖無(wú)須重新注冊(cè),但不能抵抗重放攻擊方案。王秦[5]提出一種基于公鑰加密的一次性口令 (One-Time Password, OTP) 移動(dòng)商務(wù)身份認(rèn)證方案, 引入移動(dòng)智能終端的唯一標(biāo)識(shí)IMEI作為認(rèn)證因素并利用偽隨機(jī)數(shù)實(shí)現(xiàn)雙向身份認(rèn)證。該方案雖然安全性較高但對(duì)于密鑰安全太過(guò)依賴, 且非對(duì)稱密鑰的計(jì)算量較大。文獻(xiàn)[6]基于單鑰體制使用質(zhì)詢?cè)O(shè)計(jì)了一個(gè)有效的適用于網(wǎng)絡(luò)通信系統(tǒng)的身份認(rèn)證方案, 克服了通常的質(zhì)詢響應(yīng)認(rèn)證方案的弱點(diǎn), 能夠防止重放攻擊和冒充攻擊。
2008年中本聰就提出了區(qū)塊鏈的概念,但是直到2014年初,區(qū)塊鏈技術(shù)才開(kāi)始出現(xiàn)在人們的視野中,其被廣泛應(yīng)用于金融、物聯(lián)網(wǎng)、公共服務(wù)、數(shù)字版權(quán)等領(lǐng)域[7]。區(qū)塊鏈技術(shù)利用加密的塊鏈?zhǔn)浇Y(jié)構(gòu)來(lái)存儲(chǔ)數(shù)據(jù),利用共識(shí)算法來(lái)生成和更新數(shù)據(jù),具有去中心化、數(shù)據(jù)防篡改、可追溯等特性。盡管區(qū)塊鏈技術(shù)最初主要應(yīng)用在金融服務(wù)領(lǐng)域,但是近幾年來(lái),已有很多科研人員將區(qū)塊鏈技術(shù)引入到身份認(rèn)證領(lǐng)域中以解決面臨的安全問(wèn)題[8]。HAMMUDOGLU J S等人將區(qū)塊鏈技術(shù)應(yīng)用于基于生物特征的身份認(rèn)證問(wèn)題, 使用區(qū)塊鏈技術(shù)存儲(chǔ)指紋形成一個(gè)基于區(qū)塊鏈的身份認(rèn)證系統(tǒng), 但是該方案直接將未加密的指紋存儲(chǔ)在區(qū)塊鏈上, 存在安全性與隱私性威脅。FROMKNECHT C等人將區(qū)塊鏈技術(shù)應(yīng)用于傳統(tǒng)PKI身份認(rèn)證領(lǐng)域, 解決了傳統(tǒng)PKI領(lǐng)域存在單一CA (Certifacate Authority)節(jié)點(diǎn)故障和使用CRL (Certificate Revocation List) 造成通信量過(guò)大的問(wèn)題, 但未提及跨PKI信任域的身份認(rèn)證問(wèn)題的解決方案。
基于上述研究,本文提出了一種基于區(qū)塊鏈和多因子結(jié)合的身份認(rèn)證方案。一方面,引入?yún)^(qū)塊鏈技術(shù),解決中心化面臨的風(fēng)險(xiǎn);另一方面,引入了人臉識(shí)別技術(shù),將口令認(rèn)證,密鑰認(rèn)證和生物特征認(rèn)證三者結(jié)合,大大提高身份認(rèn)證的安全性。同時(shí)就目前聯(lián)盟鏈主流的實(shí)用拜占庭容錯(cuò)機(jī)制網(wǎng)絡(luò)開(kāi)銷大、不具備擴(kuò)展性的缺點(diǎn),提出了一種分層可擴(kuò)展的實(shí)用拜占庭容錯(cuò)機(jī)制(Layered and Scalable Practical Byzantine Fault Tolerance Mechanism,LSPBFT)。
區(qū)塊鏈?zhǔn)钱?dāng)今互聯(lián)網(wǎng)時(shí)代的一種新型技術(shù),其結(jié)合了分布式賬本、非對(duì)稱加密、共識(shí)機(jī)制、智能合約等技術(shù)。在P2P網(wǎng)絡(luò)下,采用公開(kāi)透明的準(zhǔn)則,構(gòu)建塊鏈?zhǔn)降臄?shù)據(jù)結(jié)構(gòu),具有去中心化、防篡改、可追溯等特點(diǎn),其獨(dú)有的技術(shù)特征能夠解決身份認(rèn)證中面臨的諸多安全和隱私方面的問(wèn)題[9]。
為了降低公鑰系統(tǒng)密鑰和證書(shū)管理的復(fù)雜性,以色列密碼學(xué)家Shamir在1984年引入了IBC (Identity-Based Cryptography) 的概念。其設(shè)計(jì)的思想是取代公鑰密碼系統(tǒng)中的數(shù)字證書(shū),將用戶在標(biāo)識(shí)密碼系統(tǒng)中的唯一身份標(biāo)識(shí)作為用戶的公鑰,用戶的私鑰則由密鑰生成中心通過(guò)某種私鑰生成算法計(jì)算產(chǎn)生,這種系統(tǒng)模式本身就具備了密鑰托管的功能。在IBC體系中,用戶的公鑰是代表其在系統(tǒng)中身份的一組字符串,可以是姓名、郵箱、手機(jī)號(hào)碼、IP 地址等,這樣極大的減輕了公私鑰的管理[10,11,12]。
2.2.1 SM9密鑰生成算法
1)系統(tǒng)主密鑰生成
KGC產(chǎn)生隨機(jī)數(shù)s∈[1,N-1]作為主私鑰,計(jì)算G2中的元素Ppub=[s]P2作為主公鑰。系統(tǒng)的主密鑰對(duì)為(s,Ppub),KGC對(duì)外公開(kāi)Ppub,私自保存s。
2)用戶密鑰對(duì)生成
KGC選擇一個(gè)私鑰生成函數(shù)標(biāo)識(shí)符hid,用戶U的標(biāo)識(shí)為IDU,KGC首先在有限域FN上計(jì)算t1=H1(IDU‖hid,N)+s,如果計(jì)算出的t1為0,則重新生成主私鑰,并計(jì)算和公開(kāi)主公鑰,同時(shí)更新已有用戶的私鑰。若t1不為0,則計(jì)算t2=s/t1,然后計(jì)算dU=[t2]P1,即dU=[s/(H1(IDU‖hid)+s)]P1,計(jì)算出的dU就是用戶的私鑰,而用戶的公鑰QU=[H1(IDU‖hid)]P+Ppub。
人臉識(shí)別是一種依據(jù)人臉特征信息進(jìn)行分析從而得出結(jié)論的生物特征識(shí)別技術(shù)[13],其主要基于人的臉部特征,通過(guò)檢測(cè)圖像中是否存在人臉,進(jìn)一步確定圖像中人臉的大小、位置、角度等信息,并通過(guò)對(duì)比校驗(yàn)實(shí)現(xiàn)人臉的識(shí)別[14]。近年來(lái),基于深度學(xué)習(xí)的人臉識(shí)別算法正在迅速發(fā)展,目前處于人臉識(shí)別領(lǐng)域的領(lǐng)先地位。深度學(xué)習(xí)算法的創(chuàng)新之處在于網(wǎng)絡(luò)結(jié)構(gòu)、損失函數(shù)、訓(xùn)練數(shù)據(jù)集等方面,并在這些方面做著不斷的優(yōu)化和改進(jìn),因而人臉識(shí)別的準(zhǔn)度和效率不斷提高。在眾多基于深度學(xué)習(xí)的人臉識(shí)別算法中,Sphereface 是 Weiyang Liu 等人在 2017 年 CVPR (IEEE國(guó)際計(jì)算機(jī)視覺(jué)與模式識(shí)別會(huì)議)上提出的人臉識(shí)別新算法,該算法僅用 WebFace 作為訓(xùn)練集就在 LFW 上取得了99.42%的成績(jī)。Sphereface模型是對(duì)open-set進(jìn)行人臉識(shí)別,也就是測(cè)試的圖像并沒(méi)有在訓(xùn)練集中出現(xiàn)過(guò)。不同于其他深度學(xué)習(xí)的算法,Sphereface算法提出了新的損失函數(shù)——A-Softmax Loss(angular softmax loss),該損失函數(shù)是基于角度距離的,因此訓(xùn)練出的特征具有角度可分的特點(diǎn)[15]。
實(shí)用拜占庭容錯(cuò)機(jī)制,簡(jiǎn)稱為PBFT,英文全稱為Practical Byzantine Fault Tolerance,是一種基于狀態(tài)機(jī)復(fù)制的共識(shí)機(jī)制。在區(qū)塊鏈系統(tǒng)中, 由于某種原因引起的操作錯(cuò)誤、網(wǎng)絡(luò)延遲、系統(tǒng)崩潰、惡意攻擊等都會(huì)引起系統(tǒng)錯(cuò)誤, 這樣的錯(cuò)誤被稱為拜占庭錯(cuò)誤[16]。PBFT的關(guān)鍵在于解決拜占庭錯(cuò)誤,主要思想是在去中心化的網(wǎng)絡(luò)中,各個(gè)分布式節(jié)點(diǎn)通過(guò)點(diǎn)對(duì)點(diǎn)的傳輸對(duì)傳遞的信息達(dá)成共識(shí),最終生成區(qū)塊。實(shí)用拜占庭容錯(cuò)機(jī)制的優(yōu)點(diǎn)在于改變了原始拜占庭機(jī)制效率不高的缺陷,將機(jī)制的復(fù)雜度由指數(shù)級(jí)降到了多項(xiàng)式級(jí),并使得拜占庭容錯(cuò)算法可以應(yīng)用于實(shí)際的分布式系統(tǒng)中。盡管PBFT機(jī)制是目前聯(lián)盟鏈常用的共識(shí)算法,但是其還是存在著很多不足,隨著區(qū)塊鏈技術(shù)的興起,大規(guī)模區(qū)塊鏈系統(tǒng)也隨之出現(xiàn),研究人員逐漸關(guān)注如何簡(jiǎn)化實(shí)用性拜占庭機(jī)制的設(shè)計(jì),提高拜占庭協(xié)議的性能。PBFT算法的缺點(diǎn)如下:①PBFT算法是基于C/S架構(gòu), 整個(gè)系統(tǒng)中的節(jié)點(diǎn)數(shù)量是固定, 一旦節(jié)點(diǎn)數(shù)量發(fā)生改變系統(tǒng)無(wú)法感知, 不具備擴(kuò)展性。如果某個(gè)節(jié)點(diǎn)想要加入該系統(tǒng),則這個(gè)系統(tǒng)必須重啟,因此會(huì)產(chǎn)生不必要的資源浪費(fèi),影響實(shí)用性和用戶體驗(yàn)。②在視圖切換協(xié)議中,沒(méi)有對(duì)選舉出的主節(jié)點(diǎn)的真?zhèn)涡赃M(jìn)行驗(yàn)證,因此很有可能把惡意節(jié)點(diǎn)選舉作為主節(jié)點(diǎn),惡意節(jié)點(diǎn)可能會(huì)給不同的請(qǐng)求編上相同的序號(hào),或者不去分配序號(hào),或者讓相鄰的序號(hào)不連續(xù),這樣會(huì)給系統(tǒng)帶來(lái)極大的危險(xiǎn)性。同時(shí)客戶端重復(fù)請(qǐng)求會(huì)導(dǎo)致視圖不停變換,從而影響正常的服務(wù),甚至陷入宕機(jī)。③PBFT算法三階段協(xié)議中點(diǎn)對(duì)點(diǎn)的通信將產(chǎn)生大量的網(wǎng)絡(luò)開(kāi)銷,造成大量網(wǎng)絡(luò)資源的消耗。
基于3.1節(jié)PBFT算法存在的問(wèn)題,本文對(duì)其進(jìn)行了改進(jìn),提出了一種分層可擴(kuò)展的實(shí)用拜占庭容錯(cuò)機(jī)制(Layered and Scalable Practical Byzantine Fault Tolerance Mechanism,LSPBFT)。在LSPBFT算法中,將整個(gè)網(wǎng)絡(luò)中的節(jié)點(diǎn)分為三類:服務(wù)端節(jié)點(diǎn)、驗(yàn)證節(jié)點(diǎn)和客戶端節(jié)點(diǎn)。其網(wǎng)絡(luò)模型如圖1所示。
圖1 LSPBFT算法的模型圖
這三種節(jié)點(diǎn)的數(shù)目分別表示為Ns,Nv,Nc。認(rèn)定服務(wù)端節(jié)點(diǎn)只有一個(gè),驗(yàn)證節(jié)點(diǎn)的個(gè)數(shù)為20個(gè),而客戶端節(jié)點(diǎn)的個(gè)數(shù)不收限制。那么,整個(gè)網(wǎng)絡(luò)的節(jié)點(diǎn)總數(shù)可以由式(1)表示
Nall=Ns+Nv+Nc
(1)
另外, 從式 (1) 可以看出整個(gè)網(wǎng)絡(luò)中只有客戶端節(jié)點(diǎn)的個(gè)數(shù)可以改變。經(jīng)過(guò)驗(yàn)證的節(jié)點(diǎn)自動(dòng)成為客戶端節(jié)點(diǎn),客戶端節(jié)點(diǎn)可以自由地進(jìn)入和退出系統(tǒng)。驗(yàn)證節(jié)點(diǎn)從客戶端節(jié)點(diǎn)中選舉出來(lái),個(gè)數(shù)是固定的20個(gè),而服務(wù)端節(jié)點(diǎn)從驗(yàn)證節(jié)點(diǎn)中選舉出來(lái),個(gè)數(shù)為1個(gè)。參與整個(gè)共識(shí)過(guò)程的節(jié)點(diǎn)為服務(wù)端節(jié)點(diǎn)和驗(yàn)證節(jié)點(diǎn),共21個(gè)節(jié)點(diǎn)。本模型參考EOS選舉出的超級(jí)節(jié)點(diǎn)的個(gè)數(shù)[17]。正在進(jìn)行共識(shí)過(guò)程的驗(yàn)證節(jié)點(diǎn)和服務(wù)端節(jié)點(diǎn)不能隨意退出系統(tǒng),只能等整個(gè)共識(shí)過(guò)程結(jié)束,才能退出系統(tǒng)。
本方案采用了分階段的共識(shí)算法,當(dāng)網(wǎng)絡(luò)條件優(yōu)越并且選舉出的服務(wù)端節(jié)點(diǎn)和驗(yàn)證節(jié)點(diǎn)不是拜占庭節(jié)點(diǎn)時(shí)(也就是誠(chéng)實(shí)節(jié)點(diǎn)),采用本方案提出的快速共識(shí)算法FCA(Fast Consensus Algorithm),實(shí)現(xiàn)了優(yōu)于 BFT 算法的吞吐量和共識(shí)效率,并且降低了算法的開(kāi)銷。在網(wǎng)絡(luò)條件差并且共識(shí)過(guò)程中出現(xiàn)了拜占庭節(jié)點(diǎn),切換到使用 PBFT算法來(lái)保證系統(tǒng)基本的容錯(cuò)能力和可用性。
3.3.1 第一階段FCA算法
第一階段的 FCA 算法使用場(chǎng)景為網(wǎng)絡(luò)健壯性較好,參與共識(shí)過(guò)程中沒(méi)有出現(xiàn)拜占庭節(jié)點(diǎn),滿足上述條件能夠成功快速地達(dá)成共識(shí)。當(dāng)共識(shí)未達(dá)成時(shí),能夠發(fā)現(xiàn)共識(shí)失敗。第一階段的 FCA 共識(shí)算法的流程圖如圖2所示。
圖2 FCA算法流程圖
1)請(qǐng)求階段:客戶端節(jié)點(diǎn)將驗(yàn)證請(qǐng)求發(fā)送給服務(wù)端節(jié)點(diǎn),服務(wù)端節(jié)點(diǎn)校驗(yàn)該節(jié)點(diǎn)是否已注冊(cè)過(guò),如果未注冊(cè)則返回“未注冊(cè)”的提示信息;否則校驗(yàn)通過(guò)后,進(jìn)入下一階段。
2)驗(yàn)證階段:服務(wù)端節(jié)點(diǎn)給請(qǐng)求加上編號(hào),并將編號(hào)之后的請(qǐng)求轉(zhuǎn)發(fā)給所有的驗(yàn)證節(jié)點(diǎn)驗(yàn)證節(jié)點(diǎn)收到請(qǐng)求后,直接對(duì)請(qǐng)求進(jìn)行本地的處理并得到驗(yàn)證結(jié)果,然后將結(jié)果簽名之后直接返回給客戶端。進(jìn)入下一階段。
3)響應(yīng)階段:客戶端獨(dú)立地收到來(lái)自所有驗(yàn)證節(jié)點(diǎn)和服務(wù)端節(jié)點(diǎn)的響應(yīng),若所有的響應(yīng)相同,則認(rèn)為共識(shí)已經(jīng)達(dá)成。
4)回復(fù)階段:客戶端節(jié)點(diǎn)將收到的簽名響應(yīng)一起返回給所有驗(yàn)證節(jié)點(diǎn)和服務(wù)端節(jié)點(diǎn),服務(wù)端節(jié)點(diǎn)檢查響應(yīng)相同,則此階段共識(shí)成功。
3.3.2 第二階段PBFT算法
當(dāng)?shù)谝浑A段使用快速共識(shí)算法無(wú)法達(dá)成共識(shí)時(shí),則判定系統(tǒng)中存在拜占庭節(jié)點(diǎn),故系統(tǒng)切換到第二階段共識(shí)過(guò)程。第二階段共識(shí)過(guò)程中使用的是 PBFT 實(shí)用拜占庭容錯(cuò)算法。第二階段的 PBFT 共識(shí)算法的流程圖如圖3所示。
圖3 PBFT算法流程圖
1)請(qǐng)求階段:客戶端節(jié)點(diǎn)將驗(yàn)證請(qǐng)求發(fā)送給服務(wù)端節(jié)點(diǎn)。
2)預(yù)準(zhǔn)備階段:服務(wù)端節(jié)點(diǎn)將請(qǐng)求轉(zhuǎn)發(fā)給所有的驗(yàn)證節(jié)點(diǎn)。此階段中,驗(yàn)證節(jié)點(diǎn)確保服務(wù)端節(jié)點(diǎn)不會(huì)發(fā)送兩條具有相同的編號(hào),但是內(nèi)容不同的消息。
3)準(zhǔn)備階段:若驗(yàn)證節(jié)點(diǎn)收到服務(wù)端節(jié)點(diǎn)的請(qǐng)求后,對(duì)該請(qǐng)求進(jìn)行簽名并向其它節(jié)點(diǎn)廣播準(zhǔn)備消息,并從其他參與共識(shí)的節(jié)點(diǎn)接收準(zhǔn)備消息。若收到至少2 f+1 條來(lái)自不同節(jié)點(diǎn)的消息,則進(jìn)入提交階段。如果驗(yàn)證節(jié)點(diǎn)為拜占庭節(jié)點(diǎn),則不執(zhí)行該操作。
4)提交階段:所有參與共識(shí)的節(jié)點(diǎn)向其他節(jié)點(diǎn)發(fā)送提交信息,當(dāng)收到包括自己的一共2f+1條提交消息時(shí),可以認(rèn)為大多數(shù)節(jié)點(diǎn)達(dá)成共識(shí),然后執(zhí)行驗(yàn)證請(qǐng)求。
5)回復(fù)階段:參與共識(shí)的節(jié)點(diǎn)將驗(yàn)證請(qǐng)求的結(jié)果返回給客戶端節(jié)點(diǎn),當(dāng)客戶端節(jié)點(diǎn)收到超過(guò) 2f+1條不同節(jié)點(diǎn)的響應(yīng)時(shí),共識(shí)過(guò)程結(jié)束。
本文通過(guò)采用節(jié)點(diǎn)選擇算法,來(lái)挑選出合適的驗(yàn)證節(jié)點(diǎn)。為保證驗(yàn)證節(jié)點(diǎn)能夠提供安全高效的認(rèn)證服務(wù),盡可能的在所有可選的驗(yàn)證節(jié)點(diǎn)中選取節(jié)點(diǎn)質(zhì)量指標(biāo)(Node Quality Index,NQI)較優(yōu)的節(jié)點(diǎn)。假設(shè)所有驗(yàn)證節(jié)點(diǎn)的集合記作VC(Validation Node Collection),依據(jù) VC 內(nèi)節(jié)點(diǎn)的 NQI,選取綜合排名前20的節(jié)點(diǎn)。NQI根據(jù)實(shí)際情況來(lái)抉擇,比如平均在線時(shí)長(zhǎng),網(wǎng)絡(luò)帶寬,延時(shí),參與共識(shí)的次數(shù)等條件。
VC={VC1,VC2,VC3,VC4,……,VCn}為VC內(nèi)節(jié)點(diǎn)的集合。q={q1,q2,q3,……,qm}為NQI的各項(xiàng)指標(biāo)的集合,每個(gè)指標(biāo)用qi表示,i∈[1,m]。由于網(wǎng)絡(luò)情況是實(shí)時(shí)變動(dòng)的,調(diào)度節(jié)點(diǎn)應(yīng)采用動(dòng)態(tài)測(cè)量的方法[18],首先獲取當(dāng)前的驗(yàn)證節(jié)點(diǎn)的數(shù)據(jù)指標(biāo),再結(jié)合以往的數(shù)據(jù)指標(biāo),計(jì)算出新的數(shù)據(jù)指標(biāo)矩陣。M為VC內(nèi)節(jié)點(diǎn)對(duì)應(yīng)的NQI的數(shù)據(jù)指標(biāo)矩陣,如式(2)、(3)。
(2)
(3)
Mnow為當(dāng)前的數(shù)據(jù)指標(biāo)矩陣,Mpast為以往的數(shù)據(jù)指標(biāo)矩陣。其中,第i行向量[qi1,qi2,……,qim]是VC中第i個(gè)節(jié)點(diǎn)VCi的m個(gè)NQI值。因此新的數(shù)據(jù)指標(biāo)矩陣由式(4)計(jì)算得出。
Mnew=αMnow+βMpast
(4)
其中,α和β分別為當(dāng)前數(shù)據(jù)指標(biāo)和以往數(shù)據(jù)指標(biāo)的權(quán)重,同時(shí)要滿足α+β=1且0 <β<α<1。由于NQI的各項(xiàng)指標(biāo)的單位不同,比如延遲的單位為ms,帶寬的單位為bps等。為了更方便的處理VC內(nèi)節(jié)點(diǎn)的NQI,需要將矩陣M進(jìn)行歸一化運(yùn)算,將M中的每一行向量映射到[0,1]區(qū)間內(nèi)。本文采用線性函數(shù)如式(5)進(jìn)行計(jì)算。
(5)
其中,qij是M中第i行、第j列中的值,qmax和qmin分別為第j列[q1j,q2j,…,qnj]T中的最大值和最小值,qij映射到[0,1]區(qū)間里面的值記作q’ij。
權(quán)重集合w={w1,w2,…,wm},其中wj∈R+,j∈[1,m]且滿足式(6)。權(quán)重集合w中的每一個(gè)元素對(duì)應(yīng)為集合q中相應(yīng)位置的指標(biāo)的權(quán)重值。
(6)
因此每一個(gè)驗(yàn)證節(jié)點(diǎn)VCi的NQI可由式(7)計(jì)算得出
(7)
根據(jù)式(7)計(jì)算出每個(gè)驗(yàn)證節(jié)點(diǎn)的NQI,然后獲得向量NQI={NQI1,NQI2,……,NQIn}。將向量NQI中的值按照從大到小的順序排列,選取其中前20個(gè)節(jié)點(diǎn)最為最終的驗(yàn)證節(jié)點(diǎn)。
用戶個(gè)人信息屬于敏感信息,系統(tǒng)有保護(hù)用戶隱私的責(zé)任,但是同時(shí)身份管理也需要加強(qiáng)權(quán)威,因此本文采用的系統(tǒng)架構(gòu)并不是完全去中心化的,但也不是完全中心化的,隸屬于聯(lián)盟鏈的框架。聯(lián)盟鏈?zhǔn)遣糠秩ブ行幕?,由各個(gè)組織機(jī)構(gòu)共同管理,用戶需要得到認(rèn)可,才可以加入。本文設(shè)計(jì)的認(rèn)證方案,可以理解為有一個(gè)權(quán)威的中心,但是其不是負(fù)責(zé)管理整個(gè)系統(tǒng),而是把驗(yàn)證的職責(zé)分離出來(lái),交給驗(yàn)證節(jié)點(diǎn)來(lái)執(zhí)行。本文設(shè)計(jì)方案里面的角色包括客戶端節(jié)點(diǎn)、服務(wù)端節(jié)點(diǎn)、驗(yàn)證節(jié)點(diǎn)和區(qū)塊鏈。具體的流程,如圖4、5所示。
步驟 1:客戶端用戶向服務(wù)端發(fā)送注冊(cè)請(qǐng)求;
步驟 2:服務(wù)端向客戶端用戶發(fā)送相應(yīng)的注冊(cè)要求;
步驟 3:客戶端用戶向服務(wù)端上傳自己的身份證號(hào)和人臉照片;
步驟 4:服務(wù)端依據(jù)客戶端用戶的身份證號(hào)在本地?cái)?shù)據(jù)庫(kù)檢索是否已存在,若存在則說(shuō)明已注冊(cè)過(guò),返回給用戶“已注冊(cè)過(guò),不可重復(fù)注冊(cè)”的提示信息;否則采用SM9密鑰生成算法,依據(jù)用戶的身份證號(hào)生成用戶的密鑰對(duì),同時(shí)使用人臉識(shí)別模型訓(xùn)練出用戶的人臉特征值ID;
步驟5:服務(wù)端將用戶的密鑰對(duì)發(fā)送給客戶端,同時(shí)將簽名后的用戶信息UserInfo存入?yún)^(qū)塊鏈中。用戶信息包含用戶的身份證號(hào)和ID,UserInfo=s(Hash(HashInfo1-2))。其中s為系統(tǒng)的主私鑰,HashInfo1-2為身份證號(hào)和ID的哈希值。
圖4 注冊(cè)流程圖
步驟 1:客戶端用戶向服務(wù)端發(fā)送認(rèn)證請(qǐng)求;
步驟 2:服務(wù)端向客戶端發(fā)送相應(yīng)的認(rèn)證要求(包括一個(gè)隨機(jī)口令);
步驟3:客戶端用戶向服務(wù)端發(fā)送自己的身份證號(hào)和隨機(jī)口令,同時(shí)通過(guò)實(shí)時(shí)拍攝自己的人臉照片進(jìn)行上傳;
步驟4:服務(wù)端收到用戶的認(rèn)證信息后,將用戶實(shí)時(shí)拍攝的人臉照片輸入到人臉識(shí)別模型并訓(xùn)練出用戶的人臉特征值ID’,將認(rèn)證信息(包括身份證號(hào)、隨機(jī)口令和ID’)發(fā)送給通過(guò)節(jié)點(diǎn)選擇算法選出的驗(yàn)證節(jié)點(diǎn);
步驟 5:驗(yàn)證節(jié)點(diǎn)和服務(wù)端通過(guò)LSPBFT算法對(duì)用戶的認(rèn)證請(qǐng)求進(jìn)行驗(yàn)證并達(dá)成共識(shí);
步驟 6:檢驗(yàn)隨機(jī)口令是否正確以及是否在有效期限內(nèi),如果隨機(jī)口令不正確則驗(yàn)證失敗,如果隨機(jī)口令的時(shí)限不在有效期限內(nèi),則提示重新驗(yàn)證;
步驟 7:使用用戶的公鑰解密認(rèn)證信息,提取出用戶的身份證號(hào)和ID’;
步驟 8:使用用戶的公鑰在區(qū)塊鏈中查找相應(yīng)的UserInfo,利用系統(tǒng)的主公鑰解密UserInfo,提取出用戶的身份證號(hào)和ID;
步驟 9:比對(duì)步驟7 和步驟8中的身份證號(hào)和人臉特征值是否相等,如果有一項(xiàng)信息不相等則驗(yàn)證失敗,否則驗(yàn)證成功,并將驗(yàn)證結(jié)果返回給客戶端用戶;
步驟 10:如果用戶收到所有驗(yàn)證節(jié)點(diǎn)相同的驗(yàn)證結(jié)果,則共識(shí)過(guò)程結(jié)束,用戶身份驗(yàn)證成功;如果用戶收到驗(yàn)證結(jié)果不完全相同或者沒(méi)有收到全部驗(yàn)證節(jié)點(diǎn)的驗(yàn)證結(jié)果,則驗(yàn)證失敗,重新返回步驟5,再次進(jìn)行共識(shí)過(guò)程。
圖5 驗(yàn)證流程圖
本實(shí)驗(yàn)的硬件環(huán)境為Intel(R) Core(TM) i5的CPU,8G的內(nèi)存和932G的硬盤(pán),軟件環(huán)境采用VMware Workstation 15 Player的虛擬機(jī)和Ubuntu 16.04的操作系統(tǒng)。本實(shí)驗(yàn)的開(kāi)發(fā)語(yǔ)言為go語(yǔ)言,開(kāi)發(fā)工具為L(zhǎng)iteIDE,數(shù)據(jù)庫(kù)為MySQL。實(shí)驗(yàn)通過(guò)MATLAB 2017a對(duì)LSPBFT算法和PBFT算法的運(yùn)行結(jié)果進(jìn)行數(shù)學(xué)計(jì)算仿真。
6.1.1 去中心化
由于本文的方案把服務(wù)端節(jié)點(diǎn)節(jié)點(diǎn)的認(rèn)證業(yè)務(wù)分離,分配給驗(yàn)證節(jié)點(diǎn)來(lái)執(zhí)行,因此認(rèn)證時(shí)涉及到多個(gè)節(jié)點(diǎn),并不像傳統(tǒng)認(rèn)證的單一服務(wù)器,所有業(yè)務(wù)只有中心服務(wù)器來(lái)完成。同時(shí)驗(yàn)證時(shí)并不知道哪些節(jié)點(diǎn)會(huì)成為驗(yàn)證節(jié)點(diǎn),這也提高了攻擊的難度,大大提高了系統(tǒng)的安全性。
6.1.2 防篡改
傳統(tǒng)認(rèn)證方式是把用戶的信息存儲(chǔ)在數(shù)據(jù)庫(kù)中,而這會(huì)遭受黑客的大量攻擊,如果數(shù)據(jù)庫(kù)被攻破,那么用戶的隱私也會(huì)受到威脅。而本文的方案是將節(jié)點(diǎn)的信息存入?yún)^(qū)塊鏈中,當(dāng)網(wǎng)絡(luò)中的節(jié)點(diǎn)越多,存儲(chǔ)數(shù)據(jù)的副本就越多。因此,一旦數(shù)據(jù)存入?yún)^(qū)塊鏈就很難被篡改,如果想要修改數(shù)據(jù),就需要攻擊全網(wǎng)所有的節(jié)點(diǎn)并更改數(shù)據(jù)。
6.1.3 抗重放攻擊
隨機(jī)口令在認(rèn)證時(shí)只使用一次, 攻擊者即使截取了消息也無(wú)法進(jìn)行重放攻擊。并且隨機(jī)口令附加上時(shí)間戳,由于時(shí)間戳無(wú)法篡改, 若攻擊者重用截獲消息, 因時(shí)間戳失效而驗(yàn)證失敗, 因而有效防止重放攻擊。
6.1.4 防泄漏
單因子認(rèn)證最大的弊端就是隱私泄露,就比如用戶的公私鑰,隨機(jī)口令或者人臉照片。而本方案將密鑰認(rèn)證,口令認(rèn)證與人臉識(shí)別認(rèn)證相結(jié)合,即使數(shù)據(jù)丟失或者被竊取,也不會(huì)造成任何影響。本方案認(rèn)證時(shí)人臉識(shí)別認(rèn)證是通過(guò)實(shí)時(shí)拍攝人臉照片上傳,而不能通過(guò)選擇圖片上傳,就算個(gè)人信息泄露,竊取者也無(wú)法認(rèn)證成功,這大大提高了認(rèn)證的安全性。
6.1.5 防暴力破解
若攻擊者獲取到存儲(chǔ)在區(qū)塊鏈中的用戶信息UserInfo,并通過(guò)暴力破解的方式得到用戶的身份證號(hào)和人臉特征值。 首先要嘗試找到正確的公鑰將UserInfo解密為HashInfo1-2 (假設(shè)公鑰有m項(xiàng)選擇需要遍歷) ;接著嘗試將HashInfo1-2拆解為HashInfo1和HashInfo2;最后, 暴力破解2個(gè)單項(xiàng)哈希加密的信息。但由于哈希加密算法不可逆的特點(diǎn), 攻擊者只能通過(guò)暴力破解等遍歷的手段嘗試找到2個(gè)單項(xiàng)HashInfo。因此, 其破解難度為n×n=n2(假設(shè)2個(gè)單項(xiàng)信息各有n項(xiàng)選擇), 除此之外還要遍歷m個(gè)公鑰嘗試解密。單因子認(rèn)證暴力破解單項(xiàng)HashInfo和本方案破解UserInfo的難度對(duì)比見(jiàn)表1。
表1 單因子與多因子認(rèn)證破解難度對(duì)比表
PBFT算法是基于狀態(tài)機(jī)復(fù)制原理的, 采用C/S的請(qǐng)求響應(yīng)模式, 無(wú)法動(dòng)態(tài)地感知節(jié)點(diǎn)加入或離開(kāi)網(wǎng)絡(luò), 當(dāng)節(jié)點(diǎn)數(shù)目増加時(shí)需要重新啟動(dòng)系統(tǒng), 重新開(kāi)始計(jì)算、傳輸信息數(shù)據(jù)。一旦節(jié)點(diǎn)數(shù)目發(fā)生變化, 且未重新啟動(dòng)系統(tǒng), 仍按照之前的節(jié)點(diǎn)數(shù)目進(jìn)行運(yùn)算, 將使得新加入的節(jié)點(diǎn)資源的浪費(fèi)或?yàn)椴淮嬖诠?jié)點(diǎn)占用一定的系統(tǒng)資源。LSPBFT算法在一定程度上解決了動(dòng)態(tài)性的問(wèn)題,LSPBFT算法將整個(gè)網(wǎng)絡(luò)系統(tǒng)中的節(jié)點(diǎn)劃分為三類,參與共識(shí)的節(jié)點(diǎn)只有驗(yàn)證節(jié)點(diǎn)和服務(wù)端節(jié)點(diǎn),而PBFT算法全網(wǎng)所有節(jié)點(diǎn)都需要參與共識(shí)。客戶端節(jié)點(diǎn)可以自由地進(jìn)入或者退出系統(tǒng),并不需要其他節(jié)點(diǎn)知道,并且不會(huì)影響整個(gè)系統(tǒng)的運(yùn)行,但是正在參與共識(shí)的節(jié)點(diǎn)不可隨意退出系統(tǒng),若驗(yàn)證節(jié)點(diǎn)或者服務(wù)端節(jié)點(diǎn)要退出系統(tǒng),系統(tǒng)會(huì)重新選出相應(yīng)的節(jié)點(diǎn)代替。由此可見(jiàn), 相對(duì)于PBFT算法, LSPBFT算法能夠動(dòng)態(tài)地感知節(jié)點(diǎn)加入或離開(kāi)網(wǎng)絡(luò), 當(dāng)節(jié)點(diǎn)數(shù)目増加時(shí), 不需要重新啟動(dòng)系統(tǒng), 不會(huì)出現(xiàn)新加入的節(jié)點(diǎn)資源的浪費(fèi)或?yàn)椴淮嬖诠?jié)點(diǎn)占用一定的系統(tǒng)資源的情況。
當(dāng)共識(shí)過(guò)程不存在拜占庭節(jié)點(diǎn)的情況下,LSPBFT 算法與PBFT 算法的共識(shí)時(shí)間對(duì)比如圖6所示。從圖中可以看出,兩種算法的共識(shí)時(shí)間都會(huì)隨著節(jié)點(diǎn)數(shù)量的增加而增加,且增加速度也越來(lái)越快。這是因?yàn)楣?jié)點(diǎn)數(shù)量越多,則確認(rèn)一筆請(qǐng)求所需發(fā)送的消息數(shù)量就越多,自然更耗時(shí)間。在節(jié)點(diǎn)數(shù)量較少的情況下,兩種算法的共識(shí)完成時(shí)間相差不大,但當(dāng)節(jié)點(diǎn)的數(shù)量逐漸增加,尤其是超過(guò)50 個(gè)節(jié)點(diǎn)以后,LSPBFT算法的共識(shí)時(shí)間相較 PBFT 算法顯著減少。
圖6 LSPBFT算法與PBFT算法共識(shí)時(shí)間對(duì)比(無(wú)拜占庭節(jié)點(diǎn))
當(dāng)共識(shí)過(guò)程存在拜占庭節(jié)點(diǎn)的情況下,LSPBFT 算法與PBFT 算法的共識(shí)時(shí)間對(duì)比如圖7所示。盡管LSPBFT算法在共識(shí)過(guò)程存在拜占庭節(jié)點(diǎn)的情況下,先執(zhí)行了第一階段FCA算法,但是會(huì)迅速切換到第二階段PBFT算法,并且參與共識(shí)的節(jié)點(diǎn)個(gè)數(shù)只有21個(gè),并不想傳統(tǒng)的PBFT算法需要全網(wǎng)所有節(jié)點(diǎn)參與,這也縮短了節(jié)點(diǎn)之間通信的時(shí)間,因此共識(shí)時(shí)間也會(huì)更快。
圖7 LSPBFT算法與PBFT算法共識(shí)時(shí)間對(duì)比(有拜占庭節(jié)點(diǎn))
相比于傳統(tǒng)中心化的認(rèn)證方案,只依靠中心服務(wù)器來(lái)驗(yàn)證用戶的請(qǐng)求。圖8為本方案與基于靜態(tài)口令和基于PKI機(jī)制的認(rèn)證在響應(yīng)時(shí)間上的對(duì)比圖??诹钫J(rèn)證較為簡(jiǎn)單,常以“賬號(hào)+密碼”的形式認(rèn)賬,而PKI機(jī)制較為復(fù)雜,首先要獲取CA證書(shū),并且證書(shū)的發(fā)放與校驗(yàn)需要花費(fèi)一定的時(shí)間。而本方案通過(guò)節(jié)點(diǎn)選擇算法,將選出的認(rèn)證節(jié)點(diǎn)來(lái)代替單一中心,并且選出的節(jié)點(diǎn)只會(huì)認(rèn)證一個(gè)待驗(yàn)證的節(jié)點(diǎn),這樣大大減輕了中心服務(wù)器的認(rèn)證負(fù)擔(dān),提高了認(rèn)證的效率。
圖8 平均響應(yīng)時(shí)間對(duì)比
隨著分布式系統(tǒng)的不斷增長(zhǎng),系統(tǒng)的安全性尤為重要。但僅僅依賴單一的集權(quán)中心來(lái)維護(hù)整個(gè)系統(tǒng)的運(yùn)營(yíng)和安全,這無(wú)疑會(huì)對(duì)其造成巨大的挑戰(zhàn),同時(shí)各種各樣的問(wèn)題也暴露出單一中心的缺陷和弊端。針對(duì)傳統(tǒng)身份認(rèn)證方式的不足,本文將區(qū)塊鏈技術(shù)與密鑰機(jī)制、口令認(rèn)證和人臉識(shí)別技術(shù)相結(jié)合,提出了多因子結(jié)合的認(rèn)證方案。既保留了集權(quán)中心的權(quán)威,同時(shí)通過(guò)節(jié)點(diǎn)選擇算法減輕了集權(quán)中心的負(fù)擔(dān)。在提高認(rèn)證安全性的同時(shí),本文提出的方法在龐大的分布式系統(tǒng)中也能提高認(rèn)證的效率。