趙立瑾 王新勝 夏純中
1(江蘇大學(xué)計(jì)算機(jī)科學(xué)與通信工程學(xué)院 江蘇 鎮(zhèn)江 212013) 2(江蘇大學(xué)信息化中心 江蘇 鎮(zhèn)江 212000)
自誕生以來,區(qū)塊鏈以其解決第三方信任問題[1-2]的特性引起關(guān)注。其在技術(shù)上具有隱私保護(hù)性、不可篡改性;在業(yè)務(wù)上具有可信度高、安全性強(qiáng)等優(yōu)點(diǎn)[3]。
共識(shí)機(jī)制是區(qū)塊鏈完成數(shù)據(jù)一致性的核心機(jī)制[4]。常見共識(shí)機(jī)制有PBFT[5]、XFT[6]、Zyzzyva[7]、PoW[8]、Poxos[9]等。其中實(shí)用拜占庭容錯(cuò)(PBFT)共識(shí)機(jī)制是主流共識(shí)機(jī)制之一,許多算法基于PBFT加以改進(jìn)[10-11]。
但這些算法都沒有解決以下問題:系統(tǒng)中往往存在惡意節(jié)點(diǎn),PBFT隨機(jī)選擇主節(jié)點(diǎn),惡意節(jié)點(diǎn)很可能成為主節(jié)點(diǎn),導(dǎo)致視圖切換頻繁,系統(tǒng)性能和穩(wěn)定性下降[12]。且PBFT容錯(cuò)能力有限,較多惡意節(jié)點(diǎn)會(huì)導(dǎo)致共識(shí)完成周期過長,系統(tǒng)性能急劇下降[13-14]。
產(chǎn)生以上問題的主要原因是PBFT不提前評(píng)估節(jié)點(diǎn),僅運(yùn)行中識(shí)別節(jié)點(diǎn)行為,判定狀況。因此,對(duì)節(jié)點(diǎn)預(yù)評(píng)估和提前控制是可行的解決方法。P2P領(lǐng)域已有針對(duì)節(jié)點(diǎn)狀況的研究,但不完全適用于區(qū)塊鏈領(lǐng)域。
本文針對(duì)區(qū)塊鏈環(huán)境,引入并改進(jìn)P2P信任模型,提出一種基于信任模型的PBFT共識(shí)機(jī)制(TMPBFT)。通過信任模型判斷節(jié)點(diǎn)行為,評(píng)估節(jié)點(diǎn)信任值,以信任值區(qū)分各種節(jié)點(diǎn)狀態(tài),提高可信節(jié)點(diǎn)投票權(quán),限制惡意節(jié)點(diǎn)。并基于PBFT共識(shí)機(jī)制,應(yīng)用信任模型到一致性協(xié)議和視圖更換協(xié)議中,加強(qiáng)節(jié)點(diǎn)管控,提高系統(tǒng)穩(wěn)定性和容錯(cuò)能力。
Zhang等[15]提出一種基于PBFT的組層次算法,將節(jié)點(diǎn)分組共識(shí)以減少共識(shí)的消息復(fù)雜度。Feng等[16]提出一種可拓展的動(dòng)態(tài)多代理分層PBFT算法,節(jié)點(diǎn)分為多個(gè)自治系統(tǒng)以減少系統(tǒng)延遲。Hao等[17]提出一種動(dòng)態(tài)PBFT,解決了常規(guī)PBFT中存在的熱插拔節(jié)點(diǎn)以及處理惡意分類賬的問題。Feng等[18]在改進(jìn)的Rollerchain中利用分片技術(shù)和PBFT算法提出了一種可分片的區(qū)塊鏈協(xié)議。Wang等[19]提出了一種混合區(qū)塊鏈方法,該方法混合了區(qū)塊鏈架構(gòu),根據(jù)交易特征選擇相應(yīng)的共識(shí)機(jī)制。
以上相關(guān)研究在各方面對(duì)共識(shí)機(jī)制有所改進(jìn),但均未能解決PBFT不能預(yù)識(shí)別非正常節(jié)點(diǎn)的問題。
P2P信任模型研究評(píng)價(jià)網(wǎng)絡(luò)中節(jié)點(diǎn)的行為[20]。近年來,信任模型通過綜合多因素[21]的方式獲取對(duì)節(jié)點(diǎn)的準(zhǔn)確評(píng)估。
故本文提出一種結(jié)合區(qū)塊鏈特點(diǎn),綜合時(shí)間、參與頻度、具體表現(xiàn)等相關(guān)因素的信任模型,并應(yīng)用在PBFT中,以解決PBFT無法預(yù)識(shí)別非正常節(jié)點(diǎn)的問題。
信任模型通過節(jié)點(diǎn)行為評(píng)估信任值,借助信任值區(qū)分節(jié)點(diǎn)信任狀態(tài),賦予不同信任狀態(tài)節(jié)點(diǎn)不同權(quán)限。
2.1.1總體框架
節(jié)點(diǎn)行為分類及內(nèi)容情況如表1所示。
表1 節(jié)點(diǎn)行為分類和具體內(nèi)容情況表
可以看出,節(jié)點(diǎn)不同行為會(huì)導(dǎo)致信任值變化。信任值是用于反映節(jié)點(diǎn)狀況的數(shù)值,值域?yàn)閇0,1],由Cij表示,代表Nodeij(組織i中的節(jié)點(diǎn)j)的信任值,組織是承擔(dān)數(shù)據(jù)信用責(zé)任的區(qū)塊鏈系統(tǒng)參與方。Cij大小決定節(jié)點(diǎn)信任狀態(tài)。初始信任值為Cinit,默認(rèn)為0.5。
節(jié)點(diǎn)信任狀態(tài)定義如表2所示。
表2 節(jié)點(diǎn)信任狀態(tài)定義表
表2中,Cgood、Cnormal、Cbad分別代表了可信、普通、故障節(jié)點(diǎn)的信任值下限。其中可信節(jié)點(diǎn)會(huì)積極驗(yàn)證和傳遞信息;普通節(jié)點(diǎn)有部分故障行為,偶然延遲信息傳遞;故障節(jié)點(diǎn)故障行為較多,明顯延緩信息傳播;惡意節(jié)點(diǎn)極有可能篡改信息或消極傳播信息。
如表3所示,惡意節(jié)點(diǎn)為備份節(jié)點(diǎn),于10次共識(shí)后信任值提升為Cbad,作為故障節(jié)點(diǎn)參與共識(shí)。而在無可信節(jié)點(diǎn)時(shí),普通節(jié)點(diǎn)作為主節(jié)點(diǎn)。
表3 節(jié)點(diǎn)信任狀態(tài)及權(quán)限表
投票權(quán)是節(jié)點(diǎn)確認(rèn)信息的影響力。普通、故障節(jié)點(diǎn)投票權(quán)分別為1和0.5。惡意節(jié)點(diǎn)無投票權(quán)??尚殴?jié)點(diǎn)投票權(quán)最高,由Vgood表示,計(jì)算如下:
(1)
式中:Ngood和Nbad分別表示可信和故障節(jié)點(diǎn)數(shù)量。
2.1.2信任值計(jì)算因素
信任值計(jì)算因素體現(xiàn)節(jié)點(diǎn)情況,用于計(jì)算信任值。
定義1節(jié)點(diǎn)活躍度。節(jié)點(diǎn)活躍度指受評(píng)節(jié)點(diǎn)在一定時(shí)間內(nèi)參與共識(shí)的頻度,節(jié)點(diǎn)活躍度可通過函數(shù)ρ(n)表示,計(jì)算如下:
(2)
式中:n為節(jié)點(diǎn)參與共識(shí)次數(shù);參數(shù)a(a∈Z,a≥1)可調(diào)節(jié)增長速度。ρ(n)值隨n值增大而增大。
定義2節(jié)點(diǎn)共識(shí)完成率。節(jié)點(diǎn)共識(shí)完成率指受評(píng)節(jié)點(diǎn)參與共識(shí)的完成頻度。由共識(shí)完成率γ表示,值越大表現(xiàn)越好,計(jì)算如下:
(3)
式中:s為正常完成共識(shí)次數(shù);n為參與共識(shí)次數(shù)。
定義3歷史影響度。歷史影響度是指節(jié)點(diǎn)歷史信任值對(duì)當(dāng)前信任值影響程度。歷史影響度ω(Δt)計(jì)算如下:
(4)
式中:Δt為當(dāng)前時(shí)間與上次共識(shí)時(shí)間的時(shí)間間隔;參數(shù)λ(λ∈Z,λ>0)可調(diào)整影響變化程度。ω(Δt)值隨Δt增大而減小,其值越小歷史信任值影響越小。
定義4事務(wù)影響因子。事務(wù)影響因子標(biāo)識(shí)事務(wù)重要程度。設(shè)交易重要性參數(shù)為m,事務(wù)影響因子計(jì)算函數(shù)F(m)計(jì)算如下:
(5)
式中:M0為交易重要性參數(shù)的閾值;F(m)值隨m值增大而增大,F(xiàn)(m)越大表示事務(wù)重要程度越高。
定義5行為評(píng)價(jià)值。行為評(píng)價(jià)值指依據(jù)受評(píng)節(jié)點(diǎn)參與共識(shí)的表現(xiàn),給予節(jié)點(diǎn)的相應(yīng)評(píng)價(jià)值。行為評(píng)價(jià)值E計(jì)算如下:
(6)
式中:t為節(jié)點(diǎn)完成共識(shí)用時(shí);c(c∈Z,c≥1)為評(píng)價(jià)值調(diào)節(jié)因子;g為同意信息的節(jié)點(diǎn)數(shù)量;N為節(jié)點(diǎn)總數(shù)量。式(6)中,節(jié)點(diǎn)在大多數(shù)節(jié)點(diǎn)認(rèn)同信息時(shí),完成共識(shí)用時(shí)越短,評(píng)價(jià)越高。其他情況都將導(dǎo)致評(píng)價(jià)值較低。
2.1.3信任值計(jì)算
信任值Cij是受評(píng)節(jié)點(diǎn)Nodeij在共識(shí)中的綜合評(píng)價(jià)。信任值計(jì)算如下:
(7)
式中:Cinit為信任值初值。式(7)結(jié)合定義2-定義6中因素,綜合往次共識(shí)情況計(jì)算,以精確反映節(jié)點(diǎn)情況。
式(7)偽代碼如算法1所示。
算法1信任值計(jì)算
輸入:n,s,Δt,m,t,g。
輸出:Cij。
1.P=e^(-a/n)
//節(jié)點(diǎn)活躍度計(jì)算
2.for (i=0;i 3.if (m 4.elseF=1 //事務(wù)影響因子計(jì)算 5.W=0.5^(Δt/r) //歷史影響度計(jì)算 6.E=(0.5^(c*t))*g/N //行為評(píng)價(jià)值計(jì)算 7.if (E>0.5)R=((s+1)/(n+1))^0.5 8.elseR=((s+1)/n)^0.5 //節(jié)點(diǎn)共識(shí)完成率計(jì)算 9.Cij=E*W*F/W/F+Cij} 10.Cij=P*R*Sij+(1-P)*C0 //信任值計(jì)算 2.1.4信任值更新 每次共識(shí)后,需及時(shí)更新節(jié)點(diǎn)信任值,以客觀體現(xiàn)信任值變化,并根據(jù)信任值確定節(jié)點(diǎn)信任狀態(tài)。 設(shè)共識(shí)前節(jié)點(diǎn)共識(shí)信任值為Tij,本次共識(shí)中節(jié)點(diǎn)共識(shí)信任值計(jì)算為Sij,信任值更新計(jì)算如下: (8) 式中:θ為信任值更新調(diào)節(jié)因子。式(8)中若節(jié)點(diǎn)本次信任值高于往次,將適當(dāng)調(diào)高信任值,反之調(diào)低。 節(jié)點(diǎn)若離線,Cij會(huì)衰減,即每次共識(shí)式(8)中Sij值為Cinit。直到Cij∈[0.9×Cinit,1.1×Cinit],或節(jié)點(diǎn)上線。 信任值更新調(diào)節(jié)因子θ(0≤θ≤1)由式(9)確定: (9) 其使信任值與上次信任值差距較大時(shí),較小的信任值所占權(quán)重較大??杀苊夤?jié)點(diǎn)的反常行為得逞。 式(9)偽代碼如算法2所示。 算法2信任值更新 輸入:Sij,Tij。 輸出:Cij。 1.if (節(jié)點(diǎn)本次有惡意行為) {Cij=0} 2.else { 3.if (Sij/Tij>=0.5)B=Tij/2/Sij 4.elseB=1 } //信任值調(diào)節(jié)因子計(jì)算 5.Cij=B*Sij+(1-B)*Tij //信任值更新 6.廣播Cij 本文結(jié)合信任模型設(shè)計(jì)協(xié)議,令協(xié)議在達(dá)成數(shù)據(jù)一致性的同時(shí),分辨節(jié)點(diǎn)信任狀態(tài)。具體過程如下。 pre-prepare階段:主節(jié)點(diǎn)驗(yàn)證客戶端信息后,發(fā)送預(yù)準(zhǔn)備信息給副本節(jié)點(diǎn),進(jìn)入prepare階段;副本節(jié)點(diǎn)收到并驗(yàn)證預(yù)準(zhǔn)備信息后,進(jìn)入prepare階段。 prepare階段:副本節(jié)點(diǎn)發(fā)送準(zhǔn)備信息給所有節(jié)點(diǎn),收到其他節(jié)點(diǎn)發(fā)送的2×f(f為節(jié)點(diǎn)總數(shù)的三分之一)條準(zhǔn)備信息后,驗(yàn)證所有準(zhǔn)備信息,驗(yàn)證通過后進(jìn)入commit階段。記錄節(jié)點(diǎn)行為。 commit階段:所有節(jié)點(diǎn)發(fā)提交信息給其他節(jié)點(diǎn),收到2×f條提交信息后,驗(yàn)證所有提交信息,驗(yàn)證通過后執(zhí)行客戶端請求。記錄節(jié)點(diǎn)行為,計(jì)算并更新節(jié)點(diǎn)信任值和節(jié)點(diǎn)信任狀態(tài)。 本文提出的視圖更換協(xié)議中,主節(jié)點(diǎn)在可信狀態(tài)的節(jié)點(diǎn)中隨機(jī)選擇。具體過程如下(設(shè)當(dāng)前視圖為v)。 view-change階段:副本節(jié)點(diǎn)進(jìn)入視圖v+1,隨機(jī)從信任狀態(tài)為可信節(jié)點(diǎn)的節(jié)點(diǎn)中選一個(gè)非活動(dòng)節(jié)點(diǎn)作為主節(jié)點(diǎn)。副本節(jié)點(diǎn)向其他節(jié)點(diǎn)發(fā)view-change信息。 view-change-ack階段:節(jié)點(diǎn)收到2×f+1條view-change信息后,發(fā)送view-change-ack信息到視圖v+1的主節(jié)點(diǎn)。新主節(jié)點(diǎn)收到view-change信息和view-change-ack信息后進(jìn)入new-view階段。 new-view階段:新主節(jié)點(diǎn)選擇檢查點(diǎn)作為new-view請求初始狀態(tài),根據(jù)本地區(qū)塊鏈數(shù)據(jù)執(zhí)行一致性協(xié)議。 根據(jù)基于信任模型的PBFT共識(shí)機(jī)制,實(shí)現(xiàn)了一個(gè)實(shí)驗(yàn)系統(tǒng)。實(shí)驗(yàn)系統(tǒng)為Ubuntu 16.04.6 LTS 64位,實(shí)驗(yàn)平臺(tái)為Hyperledger Fabric v0.6。 圖1中實(shí)驗(yàn)展示的是節(jié)點(diǎn)行為評(píng)價(jià)較高時(shí),普通節(jié)點(diǎn)信任值獎(jiǎng)勵(lì)的情況。 圖1 信任值獎(jiǎng)勵(lì) 圖2展示了是節(jié)點(diǎn)行為評(píng)價(jià)較低時(shí),普通節(jié)點(diǎn)信任值獎(jiǎng)勵(lì)的情況。 圖2 信任值懲罰 綜合圖1、圖2情況,活躍度調(diào)節(jié)因子a值越小,信任值獎(jiǎng)勵(lì)增速越高,懲罰降速越低。故系統(tǒng)可信度高時(shí)可設(shè)置較小a值。節(jié)點(diǎn)連續(xù)表現(xiàn)良好時(shí)信任值獎(jiǎng)勵(lì)大,節(jié)點(diǎn)連續(xù)表現(xiàn)差時(shí)信任值懲罰大,但都有限度。 圖3中實(shí)驗(yàn)展示的是節(jié)點(diǎn)行為評(píng)價(jià)較高時(shí),故障節(jié)點(diǎn)與普通節(jié)點(diǎn)信任值獎(jiǎng)勵(lì)相比較的情況。 圖3 故障節(jié)點(diǎn)與普通節(jié)點(diǎn)信任值獎(jiǎng)勵(lì)比較 可以看出,故障節(jié)點(diǎn)信任值增長速率明顯較普通節(jié)點(diǎn)低。因?yàn)楣?jié)點(diǎn)共識(shí)完成率記錄了節(jié)點(diǎn)表現(xiàn),歷史故障或惡意行為會(huì)對(duì)當(dāng)前信任值獎(jiǎng)勵(lì)有負(fù)面影響。 圖4實(shí)驗(yàn)展示的是某幾個(gè)不同信任狀態(tài)的節(jié)點(diǎn)在共識(shí)中的節(jié)點(diǎn)信任值排名。 圖4 節(jié)點(diǎn)的信任值排名變化情況 圖4中,整體排名高到低分別是可信、普通、故障、惡意節(jié)點(diǎn)。因?yàn)榘凑湛尚?、普通和故障?jié)點(diǎn)的順序,故障行為占總行為比例逐漸上升。結(jié)果表明信任模型可有效識(shí)別節(jié)點(diǎn)信任狀態(tài)。 圖5展示了惡意節(jié)點(diǎn)占比的變化情況。 圖5 惡意節(jié)點(diǎn)占比變化 可以看出,PBFT惡意節(jié)點(diǎn)占比不變,TMPBFT逐漸降低。因?yàn)門MPBFT使用信任模型識(shí)別限制惡意節(jié)點(diǎn),減少了系統(tǒng)中的惡意節(jié)點(diǎn),提高了容錯(cuò)能力。 圖6、圖7展示了TMPBFT吞吐率和延遲與PBFT比較情況,系統(tǒng)中存在惡意節(jié)點(diǎn)。 圖6 TMPBFT與PBFT的吞吐率比較情況 圖7 TMPBFT與PBFT延遲比較情況 圖6、圖7中,TMPBFT在運(yùn)行時(shí)整體吞吐率較PBFT高,延遲較PBFT低。因?yàn)門MPBFT在逐步限制惡意節(jié)點(diǎn)的同時(shí),會(huì)降低故障節(jié)點(diǎn)投票權(quán),提高可信節(jié)點(diǎn)投票權(quán),以此在達(dá)成超過三分之二節(jié)點(diǎn)投票權(quán)的前提下降低了達(dá)成共識(shí)所需節(jié)點(diǎn)數(shù),提高了系統(tǒng)整體性能。 針對(duì)PBFT無法預(yù)判斷和控制節(jié)點(diǎn)的問題,本文提出一種基于信任模型的PBFT共識(shí)機(jī)制(TMPBFT)。構(gòu)建信任模型,判斷節(jié)點(diǎn)行為,通過信任值體現(xiàn)節(jié)點(diǎn)信任狀態(tài),區(qū)分節(jié)點(diǎn),提高可信節(jié)點(diǎn)投票權(quán),限制惡意節(jié)點(diǎn)。并基于PBFT共識(shí)機(jī)制,結(jié)合信任模型改進(jìn)設(shè)計(jì)一致性協(xié)議和視圖更換協(xié)議,加強(qiáng)了節(jié)點(diǎn)的管理,促進(jìn)了性能提升,提高了系統(tǒng)的穩(wěn)定性及容錯(cuò)能力。2.2 一致性協(xié)議
2.3 視圖更換協(xié)議
3 實(shí)驗(yàn)分析
3.1 節(jié)點(diǎn)信任值獎(jiǎng)勵(lì)及懲罰
3.2 節(jié)點(diǎn)信任值排名
3.3 惡意節(jié)點(diǎn)占比
3.4 系統(tǒng)運(yùn)行吞吐率以及延遲
4 結(jié) 語