張星星,何利文
(南京郵電大學,江蘇 南京 210003)
2008年11月1日,中本聰發表的《比特幣白皮書:一種點對點的電子現金系統》[1]標志著比特幣的誕生,同時也將區塊鏈展示在世人面前。區塊鏈本質上是一種數據結構,由封裝數據信息的塊按照時間順序鏈接。區塊鏈使用非對稱加密的分布式賬本來確保區塊鏈中數據的安全性和可靠性。隨著區塊鏈技術的不斷發展,它將對金融、教育改革、物聯網、人工智能等產生深遠影響[2]。共識算法作為區塊鏈的核心部分,它的效率直接決定了區塊鏈的性能。共識算法解決的是區塊鏈數據記錄的合法性與數據存儲的同一性,它的漏洞很容易被不法分子利用并對網絡產生巨大的破壞作用。因此,研究更加高效安全的共識算法對推動區塊鏈技術的廣泛運用有著重要且深遠的現實意義。
隨著區塊鏈技術的發展、應用場景和協議條件選擇的不同,提出了許多不同的共識算法,如用于區塊鏈中的共識算法PoW、PoS、DPoS,用于非拜占庭網絡的Paxos算法和Raft算法、解決拜占庭問題的BFT和PBFT算法等[3]。
PoW共識算法具有簡單的驗證和安全性,一個nonce的驗證只需要兩次SHA-256操作,此驗證模式可防止節點被偽nonce欺騙。此外PoW具有“51%攻擊”的容錯率[4],只有當攻擊者擁有整個計算資源的51%以上時,它才有可能修改已上鏈的區塊鏈信息,這是不現實的。但與此同時PoW也帶來了過度的資源浪費,并且需要確認交易的時間過長。PoS共識算法是為了彌補PoW算法的不足而產生的,PoS的核心思想是“節點的權益越大,更容易獲得記賬權”[5]。PoS算法是在一個有限的空間里進行共識,不需要消耗過多的外部算力和資源,因此可以有效地彌補PoW的劣勢,并且能夠在一定程度上縮短達成共識的時間,提升系統運行性能[6]。雖然在一定程度上減少了系統的挖礦時間,但本質上還是需要挖礦,依然會造成算力浪費。
Dan Larimer設計并提出了委托權益證明機制 (Delegated Proof of Stake,DPoS)[7],它是PoS的一種演化版本。在DPoS算法中,所有的節點都可以通過投票來選舉代理節點,被選舉出的代理節點按照一定的規則負責區塊生成及驗證。如果代理節點出現問題,例如沒有在規定的時間內產生區塊,那么它就會失去代理權。相比于PoS算法,DPoS減少了參與驗證區塊的節點數量,提升了區塊確認速率[8],同時也降低了能耗,區塊鏈系統的性能得到了進一步的提升。但DPoS也存在一些缺點,總結來說有以下四點:
(1)投票積極性不高,大多數節點只是持股,從來不參與投票。
(2)壟斷性高,只有持幣的人才能參與區塊驗證。
(3)沒有對錯誤節點進行快速剔除,不僅影響代理節點投票結果,還增加了投票周期,耗費資源[9]。
(4)惡意節點賄賂投票節點導致“腐敗攻擊”,破壞整個系統。
針對上述缺點,國內外一些學者對DPoS算法進行了改進。針對DPoS中沒有生成塊故障的處理方案的問題,Tan C和Xiong L[10]將塊生成的節點故障行為記錄為下一次選擇見證節點的投票數的計算因子,以降低惡意節點再次被選為見證節點的概率,但并沒有考慮到大規模并發問題,用于商用時還需考慮吞吐量問題。Chen Y和Liu F[11]考慮時間動態因素的聲譽模型,構建了基于聲譽的投票機制和獎懲激勵機制,實現了對節點的聲譽激勵,并設計了一種新的計票方法,提高了選舉效率。何帥等[12]針對DPoS共識機制存在惡意節點相互勾結以及權益分配不合理的兩大問題,引入RBF神經網絡模型,計算綜合信任值,使得通過綜合信譽值選舉出的節點更加權威可信;同時,加入基于動態博弈的信譽激勵機制,利用沙普利值對節點權益進行合理劃分,使得節點的權益得到了分散,增強了“去中心化”程度。但與神經網絡算法的結合增加了整體算法的空間復雜度,反而降低了運行效率。
該文提出一種信任評估模型,使用信任評估模型計算每個節點的信任值,根據節點行為將信用評價指標分為“交易情況”“性能”“信用級別”三個一級指標,每個一級指標下劃分若干二級指標,動態分配二級指標權重,將二級指標根據量化函數進行量化后,根據對應的權重對節點信任值進行計算并排序,從而使選出的節點更加可信。同時,針對惡意節點以及自私行為,提出了一種基于高斯混合模型的異常節點剔除算法,首先對投票數據情況進行劃分,根據高斯混合模型計算其混合高斯概率密度值,并設定閾值,將計算出的混合高斯概率密度值低于閾值的節點剔除,從而達到在節點的惡意攻擊和自私行為中識別并剔除異常數據的目的。最后通過仿真實驗得出結論。
文中系統模型如圖1所示。首先通過信任評估模型對節點信任值進行排序,利用基于高斯混合模型剔除算法剔除節點的異常投票,將最終投票數與信任值結合選出排名為前2TN的節點為候選節點,排名為前TN的節點為見證節點,見證節點輪流產生區塊并驗證區塊信息,然后開始下一輪出塊權力競爭,n輪區塊產生之后開始下一輪見證節點以及候選節點的競選。
基于DPoS共識算法的區塊鏈節點主要包含三種類型:普通節點、見證人節點以及候選節點。普通節點在共識過程中負責投票選出見證節點,而見證節點負責產生區塊。當見證節點沒有在規定時間內產生新的區塊或者產生了無效塊,那么DPoS會跳過這個節點并由下一個候選節點負責區塊的產生。為了使選出的見證節點更加安全可信,構建了信任值模型,結合每個節點的行為對節點做出評估得出信任值并加入到選舉機制當中。如表1所示,根據節點行為將信用評價指標分為交易情況、性能、信用級別三個一級指標。節點的交易情況由二級指標交易總量TNi(Total Number of transactions)和貨幣流動性CLi(Currency Liquidity)來衡量。節點性能由網絡延遲NLi(Network Latency)、節點下線次數OTNi(Offline Times of Nodes)和節點活躍度NAi(Node Activeness)來衡量。信用級別由有效區塊數EPi(Effective block ratio)和上一輪節點信任值Ci(Credit degree of the lastround of nodes)來衡量。
在節點信用評價指標中,有些二級指標的屬性是離散的,如交易總量、網絡延遲、節點離線次數等。這些值的波動幅度較大且不同屬性不同范圍的維度容易影響實驗,所以在利用這些指標計算節點信任值之前,需要對離散的指標進行量化。該文采用min-max標準化方法將所有指標量化在[0,1]之間,量化函數如下:
其中,MAX為樣本數據的最大值,MIN為樣本數據的最小值,χ為原始數據,χ*為量化后的值。
在數據量化后,根據選取指標計算信任值,信任值的計算方法如下:
其中,交易情況和性能下對應的二級指標所占權重為t1、t2、p1、p2、p3,其中:
t1+t2=0.25
p1+p2+p3=0.35
可根據系統當前狀態動態調整各個指標所對應的權重,從而激勵整個系統保持高效的運作。如當前系統節點活躍度較低,可適當增大節點活躍度(NAi)的權重p3,減小網絡延遲(NLi)、節點下線次數(OTNi)的權重p1、p2來激勵節點提升活躍度。
在DPoS共識機制節點投票過程中,包含以下行為的節點定義為異常節點:
(1)節點投給信任值較低的節點;
(2)節點不愿意消耗自己的資源,放棄投票;
(3)節點采取欺騙行為以防止系統識別異常行為。
針對投票過程中的節點異常行為,提出一種基于高斯混合模型(Gaussian Mixture Model,GMM)的異常節點剔除算法。該算法首先對投票情況數據進行劃分,得到M個聚類中心[13]。然后根據期望值最大(Expectation Maximization,EM)估計方法計算GMM參數的初始值[14],并構建GMM。并根據構建的GMM計算投票數據的混合高斯概率值,將投票數據的準確率與召回率之比設置為檢測異常數據的閾值。然后計算該高斯分布的概率密度,與異常數據閾值進行比較。如果概率密度小于閾值,則可以將投票數據識別為異常數據。
1.3.1 高斯混合模型
高斯混合模型本質上是通過多個不同的高斯分布擬合而成的樣本空間分布情況模型[15]。
設x為一個N維的特征向量,其高斯混合模型是由M個分量混合而成。則x的混合高斯密度為:

式中,μi為第i個高斯分量的均值,∑i為第i個高斯分量的協方差。
GMM模型訓練階段,使用EM算法以最大化似然函數的方式求解模型最佳參數,即每個高斯分量的加權系數αi、均值μi和協方差∑i,直至模型收斂。
1.3.2 貝葉斯信息準則
BIC(貝葉斯信息準則)是 Schwar在1978年提出的一種統計模型的適用性度量方法,現已廣泛用于時間序列和線性回歸的模型識別中。BIC獎勵模型準確性并懲罰模型復雜性,模型復雜度越高,所得結果越大。最小檢測值則為模型最佳聚類數目[17]。
BIC=xln(n)-2ln(L)
其中,x為模型參數,n為樣本數量,L為似然函數。
1.3.3 算法流程
Step1:根據信譽值模型以及投票情況計算出最終得票情況并加入數據集。
可將節點Ni的最終投票得分表示為:
vi=Ci*votesi+coin*coinTime*Weight
其中,Ci為節點信任值,votesi為節點對應的票數。coin為節點代幣數量,coinTime為幣齡,Weight為代幣權重,將計算得到的vi加入到數據集中并將數據集表示為V={v1,v2,…,vn}。
Step2:利用貝葉斯信息準則對數據集進行預處理,得到高斯混合模型最佳聚類數目。
Step3:設置初始參數
Step4:根據樣本集和初始參數計算隨機變量的期望Q(λ;λ(0))。計算公式如下:

Step6:根據更新后的參數計算概率密度函數,即:

Step7:計算出訓練數據的異常檢測閾值P,其中P為投票數據的正確率與召回率之比,并將概率密度低于閾值的節點剔除,并將該節點本輪信任值置為0。
為了驗證改進前后DPoS共識算法的有效性,在相同的環境下對DPoS算法改進前后的效率以及安全性進行分析。該文使用python語言對信任值模型以及基于高斯混合模型的異常節點剔除算法進行構建,并模擬DPoS共識算法,構建了301個模擬區塊鏈交易的節點集群,實驗設置見證(出塊)節點個數101個,最后,通過MATLAB R2020a對最終的實驗數據進行可視化對比評價。
利用EOS項目的歷史數據集XBlock-EOS對系統模型進行訓練并保存了訓練模型。在實驗仿真過程中,選取了5 000個節點的歷史數據進行輸入,并對系統模型進行了50次訓練,同時對每次訓練的模型選取500個節點進行測試,其中包括40%的異常節點,并分析整個測試集綜合投票得分前60%的惡意節點所占比例,從而得出整個模型剔除異常節點的比率。實驗結果如圖2所示。經過實驗結果對比分析可得,隨著訓練集節點數量的增加,異常節點剔除率也在不斷增加。當訓練集節點達到2 000時,異常節點剔除率高達93.5%。當節點進一步增加時,異常節點剔除率基本維持在93%左右。對比傳統的DPoS共識算法,該算法提高了共識節點的安全性,并且能夠很好地剔除錯誤節點,降低錯誤節點成為共識節點的概率。

圖2 異常節點剔除率
通過信任值模型以及高斯混合模型剔除異常節點選出的共識節點,如果在生成區塊的過程中產生錯誤區塊或者沒有在規定時間內產出區塊,那么在下一輪的信任值計算中,由于有效區塊數較低,相應的得到的信任值也會相對較低,如果其他節點投票給這些信任值較低的節點,經高斯混合模型剔除模型計算后,投票節點便會失去成為共識節點的資格,并且其自身信任值也會被清零,相應的在下一輪的信任值計算中也會得到一個極低的信任值。圖3為在60%異常節點比率下,改進前后DPoS共識算法共識節點集合中惡意節點所占比例。經過實驗結果對比分析可得,改進后的DPoS共識機制隨著共識次數的增加,異常節點在共識節點中的比例逐漸減小,當達到20次共識時,異常節點占比接近于0。而傳統的DPoS共識機制,因為沒有異常節點剔除的過程,隨著共識次數增加,異常節點在共識節點中的占比并沒有明顯減少。

圖3 改進前后DPoS異常節點占比
傳統的DPoS共識機制對出塊時間沒有限制,出塊時間大致在4 s左右,改進后的DPoS共識機制將有效區塊數作為信任值的一項計算標準,所以選出的共識節點的出塊時間相對于改進前也有一定提高。圖4為改進前后DPoS共識機制出塊時間對比。當區塊個數增加到1 000時,改進后的算法出塊時間降至2 s左右,比改進前的DPoS共識機制節約了50%左右的時間,能夠更好地應對日益增長的交易量。
傳統的DPoS共識機制相較于POS、POW算法具有更低的能耗以及更高的安全性[18],但仍然存在投票積極性不高、節點惡意投票等缺點。針對上述缺點,該文設計了一種信任值模型,對節點活躍度、節點性能以及產出有效區塊數等進行綜合評分,同時構建高斯混合模型將惡意節點進行剔除,有效提高了共識節點安全性,縮短了節點出塊時間以滿足日益增大的交易量。在后續的工作中,計劃優化基于高斯混合模型的異常節點剔除算法的時間復雜度,并將提出的系統綜合模型應用到更廣泛的實際應用場景中,從而創造更大的價值。