黃建華,夏 旭,李忠誠,李建華,鄭 紅
(華東理工大學(xué) 信息科學(xué)與工程學(xué)院,上海 200237)
通訊作者:黃建華,E-mail:jhhuang@ecust.edu.cn
自2008 年比特幣[1]誕生伊始,比特幣的底層技術(shù)——區(qū)塊鏈技術(shù)開始進入人們視野.這種加密公共賬本技術(shù)具有去中心化、防篡改和可追溯等特性,激發(fā)了業(yè)界對于區(qū)塊鏈技術(shù)的研究熱情,由此也產(chǎn)生了眾多的數(shù)字貨幣加密技術(shù),如以太幣(Ether)[2]、點點幣(PPCoin)[3]等,以及衍生出來的用于區(qū)塊擴容的閃電網(wǎng)絡(luò)(lightning network)[4].2015 年,Linux 基金會發(fā)起HyperLedger 項目,其中最著名的是Fabric 項目,Fabric 中沒有挖礦機制,也沒有使用代幣作為激勵機制,它是有準入資格授權(quán)的私有區(qū)塊鏈網(wǎng)絡(luò),Fabric 的成員要在會員服務(wù)提供商進行注冊[5].文獻[6]詳細介紹了基于區(qū)塊鏈的平行社會發(fā)展趨勢,討論了智能合約的理念、應(yīng)用和意義.針對第三方機構(gòu)利用大量用戶隱私數(shù)據(jù)來提供個性化定制服務(wù)導(dǎo)致用戶個人隱私泄露的問題,文獻[7]提出了基于區(qū)塊鏈的個人數(shù)據(jù)保護系統(tǒng),使用戶能夠在享受個性化定制服務(wù)的同時保護個人信息.但是,在點對點網(wǎng)絡(luò)中面臨著廣播帶來的網(wǎng)絡(luò)開銷較大問題,各個節(jié)點所觀察到的交易事務(wù)先后順序不可能完全一致.因此,區(qū)塊鏈系統(tǒng)需要設(shè)計一種機制,對在一定時間內(nèi)發(fā)生事務(wù)的先后順序進行共識,這種對事務(wù)的先后順序達成共識的算法就是共識機制.區(qū)塊鏈分為公有鏈、聯(lián)盟鏈和私有鏈:公有鏈主流的共識機制是工作量證明(proof of work,簡稱PoW)和權(quán)益證明(proof of stake,簡稱 PoS),私有鏈或者聯(lián)盟鏈的共識機制以實用型拜占庭容錯協(xié)議(practical Byzantine fault tolerance,簡稱PBFT)為主.以PoW 為基礎(chǔ)的加密貨幣可能會遭受雙重支付攻擊,為了降低風(fēng)險,交易通常需要等待一定數(shù)量的確認區(qū)塊(6 個).但是,這使得拒絕服務(wù)攻擊(DoS)有了實現(xiàn)的可能,例如,攻擊者可以發(fā)起很多低價值的交易來沖擊網(wǎng)絡(luò).2015 年7 月,就有一次針對比特幣網(wǎng)絡(luò)的洪泛攻擊[8].比特幣系統(tǒng)的另一問題就是能耗巨大,2017 年,整個比特幣系統(tǒng)至少消耗2.55GW 電力,并且未來可能達到7.67GW,與奧地利全年耗電量相當[9,10].PoW 機制高昂的計算代價使其難以滿足一些每秒高達數(shù)萬筆交易的系統(tǒng)需求.目前,比特幣社區(qū)正在嘗試使用閃電網(wǎng)絡(luò)等解決方案,以改善網(wǎng)絡(luò)的吞吐量并降低耗電量.為了提高區(qū)塊鏈網(wǎng)絡(luò)交易吞吐量,King 于2012 年創(chuàng)立了點點幣,這是第1 種基于PoS 的加密貨幣.PoS 的提出雖然提高了網(wǎng)絡(luò)吞吐量,但是帶來了諸如短程攻擊(賄賂攻擊)、幣齡累積攻擊等新問題.PBFT 雖然可以每秒支持數(shù)千筆交易,但較低的節(jié)點可擴展性和較高的網(wǎng)絡(luò)開銷也使得PBFT 在公有鏈領(lǐng)域應(yīng)用范圍有限.但是PBFT 在聯(lián)盟區(qū)塊鏈方面應(yīng)用廣泛,典型的應(yīng)用有騰訊公司發(fā)布的可信區(qū)塊鏈平臺TrustSQL 以及Linux 基金會發(fā)起的Hyperledger Fabric 項目.
本文分析了PoW 機制和POS 機制的優(yōu)點和不足,提出基于信任度證明的共識機制(proof of trust,簡稱PoT),旨在解決權(quán)益證明機制中存在的易受賄賂攻擊、幣齡累積攻擊以及工作量證明機制中存在的自私挖礦問題,并對PoT 性能以及安全性進行了測試和分析.結(jié)果表明,PoT 的效率較PoW 有較大提高.同時,對于賄賂攻擊、權(quán)益粉碎攻擊以及權(quán)益累積攻擊,比PoS 有更高的防范能力.
共識機制的目標是使所有的誠實節(jié)點保存一致的區(qū)塊鏈視圖,在盡可能短的時間內(nèi)建立安全和不可篡改的去中心化系統(tǒng).目前存在的共識機制主要分為PoW 和PoS,其中,PoW 是區(qū)塊鏈最早使用的共識機制,PoS 的概念則是由2012 年出現(xiàn)的點點幣引出的.
比特幣系統(tǒng)是區(qū)塊鏈技術(shù)的首個應(yīng)用,其采用的PoW 機制使得區(qū)塊的產(chǎn)生具有計算方面的難度.比特幣系統(tǒng)平均每10 分鐘產(chǎn)生一個區(qū)塊,每個節(jié)點都收集新的交易數(shù)據(jù),并試圖根據(jù)這些交易生成新的區(qū)塊.PoW 解決共識問題的基本思路是尋找隨機數(shù)(nonce),該隨機數(shù)要使得給定區(qū)塊的哈希值前部分出現(xiàn)所需的足夠數(shù)量的0,而找到這個nonce 所需要的工作量與0 的數(shù)目呈指數(shù)增長.礦工節(jié)點進行循環(huán)的SHA-256 計算,最先找到這個nonce 的節(jié)點向全網(wǎng)廣播其工作量證明和新產(chǎn)生的區(qū)塊,其他節(jié)點驗證成功后就接受該區(qū)塊,然后跟隨在該區(qū)塊的末尾制造新的區(qū)塊,計算出結(jié)果的節(jié)點獲取比特幣作為獎勵.雖然這種機制截至目前為止被證明是安全的,但是任何擁有巨大算力(超過51%算力)的組織或者國家都有可能制造一個更長的區(qū)塊鏈.尤其是在攻擊者購買算力更強的礦機(ASIC)[11]之后,他將獲取比一般礦工更強的算力.
針對比特幣系統(tǒng)的一個可能的攻擊就是自私挖礦(selfish mining)[12],目的是獲得更大利潤.自私挖礦的攻擊者挖到新區(qū)塊后不在第一時間公布,其他誠實礦工因為不知道新區(qū)塊的存在,會繼續(xù)在舊區(qū)塊基礎(chǔ)上挖礦.等到攻擊者挖到第2 個區(qū)塊后,便會同時公布手中藏著的兩個區(qū)塊,這時,區(qū)塊鏈就出現(xiàn)了分叉.只要攻擊者比誠實礦工多挖一枚區(qū)塊,攻擊者所在的分叉就是最長鏈.自私挖礦的攻擊者只需要擁有全網(wǎng)1/3 的算力,就可以保證自己獲得更多的收益,相比51%攻擊,自私挖礦顯得更容易.作為礦工,在比特幣規(guī)則中一般都會采用有利于自己的自私挖礦策略.事實上,當有節(jié)點擁有超過25%算力的時候,比特幣的安全性就不能簡單地以51%為閾值來考慮[13],因為不能保證此時所有的礦工都遵守規(guī)則.但是在本文提出的PoT 機制中,產(chǎn)生區(qū)塊不需要投入過多的算力資源,這種攻擊反而變得沒有效率.
權(quán)益證明的核心思想是產(chǎn)生區(qū)塊的難度與節(jié)點在網(wǎng)絡(luò)中所占權(quán)益成反比,即:所持權(quán)益越多,越容易產(chǎn)生區(qū)塊.這是一種效率更高的共識算法,使區(qū)塊鏈無需高昂的硬件和電力挖礦成本就能正常運行.
權(quán)益證明主要有兩大類:一種是基于鏈的權(quán)益證明,其模仿工作量證明機制,隨機地為權(quán)益人(stakeholder)分配創(chuàng)建區(qū)塊的權(quán)力,典型的有PPCoin、黑幣(blackcoin)[14]、活動鏈(CoA)[15]、DPoS[16]和PoA[17];另一種是基于拜占庭容錯的權(quán)益證明,在該機制中,只要有超過2/3 的節(jié)點遵循協(xié)議,無論網(wǎng)絡(luò)延時如何,協(xié)議都可以正常運行,典型的有Tendermint[18]和Casper[19].
在基于鏈的權(quán)益證明機制的虛擬幣PPCoin,Clockcoin[20]和Novacoin[21]中,區(qū)塊的創(chuàng)建是通過消耗幣齡(coin age)來完成的.該協(xié)議被詬病的地方就在于:即使節(jié)點沒有連接到網(wǎng)絡(luò),幣齡也會增加.當前的系統(tǒng)事實上鼓勵節(jié)點濫用這一機制,它們平時保持離線,只在累積了可觀的幣齡以后才連線以獲得利息,然后再關(guān)閉連接.攻擊者可以利用這一點,當其所持權(quán)益足夠大時,對區(qū)塊鏈進行分叉并達成雙花.區(qū)塊生成后,幣齡就會歸零,攻擊者必須再次累積幣齡才能繼續(xù)攻擊.VeriCoin[22]使用基于幣齡的權(quán)益時間(stake time)來對節(jié)點所持權(quán)益進行度量,并且當節(jié)點不再參與共識時,其權(quán)益時間就開始衰減.Ouroboros[23]使用了一種新的獎勵機制來增加對節(jié)點誠實行為的獎勵,同時還使用了安全多方計算來保持節(jié)點中領(lǐng)導(dǎo)者的不可預(yù)測性,但是這種方法需要網(wǎng)絡(luò)中驗證節(jié)點之間的協(xié)調(diào).
文獻[24]基于可信執(zhí)行環(huán)境(trust execution environments)提出了共識機制proof of luck,該機制運行在支持SGX 的CPU 上,用來抵御挖礦對于能源的消耗,但是算法的執(zhí)行依賴于Intel 的特制CPU,違背了區(qū)塊鏈的去中心化思想.文獻[25]嘗試用一種空間證明(proof of space)的概念來取代PoW,并且已經(jīng)在區(qū)塊鏈的框架背景下進行了專門研究.在空間證明中,證明者希望運用計算機存儲資源代替PoW 中的算力資源進行證明.空間證明雖然利用了一定的硬件資源,但是隨著時間的推移,對硬件資源的消耗量會減少.類似地,文獻[26]也提出了時空證明(proof of space-time)算法,但無論是空間證明還是時空證明都需要昂貴的硬件資源,到最后都會出現(xiàn)硬件資源集中化的現(xiàn)象.文獻[27]提出了一種有趣的燃燒貨幣機制PoB(proof of burn),該算法通過將代幣轉(zhuǎn)移到不可逆轉(zhuǎn)的地址上以銷毀代幣,節(jié)點燃燒的代幣量與被選中挖到下一個塊的概率成正比.在PoB 中,隨著時間的推移,節(jié)點在系統(tǒng)中所持的份額可能會減少,這會驅(qū)動節(jié)點燃燒貨幣來獲取更多的挖礦機會.這種機制雖然是一個不錯的嘗試,但是造成了代幣資源的浪費,并且挖礦的能力會逐漸被那些掌握更多資源并且愿意燃燒代幣的人所掌控.文獻[28]提出了一個重要性證明(proof of importance)算法,該算法運行時,節(jié)點需要提供自己的重要性才能獲取出塊權(quán).在重要性證明下,節(jié)點所持權(quán)益不再是重要性的主要因素,取而代之的是節(jié)點的交易量以及交易雙方的關(guān)系.在重要性證明中,根據(jù)錢包的交易次數(shù)和貨幣資產(chǎn)來評估節(jié)點的重要性.但是該協(xié)議可能會鼓勵節(jié)點之間相互串通互刷交易量,同時,大資產(chǎn)節(jié)點的頻繁交易也會造成重要性中心化的問題.
公有鏈假定所有節(jié)點都是不可信的,產(chǎn)生區(qū)塊的策略主要有兩種:基于算力的PoW 機制和基于權(quán)益的PoS機制.在PoS 中,每個節(jié)點的可信度與它本身所持的資源(比如加密貨幣數(shù)量)呈正相關(guān),這就決定了該節(jié)點在網(wǎng)絡(luò)中所占的權(quán)重(以票數(shù)計).這種機制會帶來許多嚴重后果,最直接的就是權(quán)益粉碎攻擊[29,30].PoS 的一大優(yōu)勢就是所持權(quán)益越多者越愿意維護系統(tǒng),反之,所持權(quán)益越少責(zé)任也就越少.假設(shè)礦工只有1%的權(quán)益,其成功的概率只有1%,那么該節(jié)點可以盡可能嘗試分叉,因為在PoS 中分叉并不消耗任何資源.在比特幣系統(tǒng)采用的PoW機制中,創(chuàng)建分叉得不償失,因為必須為此付出大量算力資源.目前,比特幣網(wǎng)絡(luò)每10 分鐘產(chǎn)生一個區(qū)塊并獎勵12.5 個比特幣,即使耗費大量電力,挖礦仍然是一件有利可圖的事情,但是每產(chǎn)生21 萬個區(qū)塊后,收益會減半.當收益不足以維持挖礦所耗費的電力成本時,礦工們就不再有足夠的動機去維持區(qū)塊鏈的一致性.這就是經(jīng)濟學(xué)領(lǐng)域所說的公地悲劇[31].中本聰預(yù)見到這個事情的發(fā)生,提出了交易費率的解決辦法[1].但是在公地悲劇中,參與者有機會自行其是,以犧牲他人的代價來實現(xiàn)自己的利益最大化,所以希望其他節(jié)點支付相應(yīng)費用.每一個理性的礦工總是會采取這樣的行動,因為它只尋求自身最優(yōu)解.如果網(wǎng)絡(luò)中每一個個體都表現(xiàn)得很自私,那么整個網(wǎng)絡(luò)環(huán)境安全性的下降就在所難免.
迄今為止,權(quán)益證明仍然是對區(qū)塊鏈公地悲劇的唯一解決方案.為了避免公地悲劇以及權(quán)益粉碎攻擊帶來的網(wǎng)絡(luò)安全問題,本文提出了基于信任度證明的PoT 共識機制.由于采用PoW 共識的區(qū)塊鏈網(wǎng)絡(luò)因其計算上的難度而不易受到攻擊,因此,PoT 中引入了少部分的工作量證明以避免權(quán)益粉碎攻擊.有別于工作量證明機制中的低吞吐量和巨大的資源耗費,以及純權(quán)益證明機制中幣齡累積所造成的權(quán)益中心化和易受權(quán)益粉碎攻擊,PoT 旨在建立一個高吞吐量、安全和低資源消耗的去中心化區(qū)塊鏈網(wǎng)絡(luò).
PoT 的運行從時間上被劃分為一系列周期(epoch),每一個epoch 又被劃分為多個時隙(slot),一個slot 內(nèi)產(chǎn)生一個區(qū)塊,權(quán)益的計算以每個epoch 開始前的歷史計算.在每個epoch 開始時,礦工節(jié)點都會計算生成一個滿足當前難度的空區(qū)塊,通過這個空區(qū)塊衍生出一組參與者(participants)集合{P1,P2,P3,…,PT},然后,每個slot 均從這些Participants 集合中隨機選取N個節(jié)點作為基本權(quán)益代表(stakeholder),這些代表用集合{S1,S2,S3,S4,…,SN}表示,這里N logistic 回歸模型在對數(shù)增長期節(jié)點的信任度的增長是相當快的,不利于合理地判斷節(jié)點信任的增長.為了避免出現(xiàn)這種情況,本文提出了對logistic 回歸模型產(chǎn)生的信任度進行修正的算法,根據(jù)節(jié)點當前信任度和上一輪投票時的信任度,對在投票時的信任度進行權(quán)重均衡.最終進行投票時的信任度度量公式如下: 其中,h表示當前epoch 內(nèi)第h個slot.節(jié)點在第t個epoch 中的第1 個slot 開始時的信任度與第t-1 個epoch 的最后一個slot 結(jié)束時的信任度相等,即,并且.通過β可以對信任度的增加速率進行修正,使其增長不會太快,避免在網(wǎng)絡(luò)初期階段的信任度中心化.初始時,β值為1,因為剛開始并不知道節(jié)點是否會有作惡傾向. β的變化基于累計偏差,具體變化算法由公式(3)確定: 同樣地,在第t個epoch 開始時的信任度累積偏差與第t-1 個epoch 的最后一次參與共識時的信任累積偏差相等,即,并且.參數(shù)c是用戶定義的參數(shù),用于控制對節(jié)點的最近行為的反應(yīng)權(quán)重.threshold是為了防止β過于飽和趨近于1 而設(shè)置的閾值,其初始值為0.25(在社會學(xué)范疇中,對于人的歷史信任度比當前信任度能更好地分析人的信譽.threshold初始值設(shè)為0.25 可以在防止β過于飽和趨近于1 的同時,也能讓不會過分倚重當前信度函數(shù)直接評價所得的信任度).表示信任度的偏差,其計算方法見公式(4). 在第t個epoch,節(jié)點對第h個slot 進行共識時的信任度偏差等于當前信任度與對第h-1 個slot 進行投票時的投票信任度的絕對值之差.最終的累積偏差見公式(5). 從公式(5)可以看出:c值越大,說明用戶給予的最近的信任度偏差的權(quán)重比之前累積信任度偏差要高. 傳統(tǒng)的共識機制單純依靠提高準入門檻,比如算力或者權(quán)益來維護區(qū)塊鏈網(wǎng)絡(luò)的穩(wěn)定與安全,但是算力和基于幣齡的權(quán)益都會使區(qū)塊鏈網(wǎng)絡(luò)傾向于中心化.本文提出了一套完整的對于節(jié)點行為的判別策略,通過對節(jié)點運行機制的檢測與判別,以識別惡意的節(jié)點,并進行信任度懲罰. 本文將節(jié)點行為定義為#good 和#bad 兩種. · #good:每一個stakeholder 對于區(qū)塊的簽名被認為是對該區(qū)塊的投票,投票時使用自己的私鑰進行簽名,可以用公鑰去驗證.只要節(jié)點參與生成的區(qū)塊的簽名合法,滿足當前難度,具備競爭上鏈資格,則將其行為定義為#good; · #bad:如果前N-1 個stakeholder 發(fā)現(xiàn)它要簽名的區(qū)塊存在問題,那么根據(jù)協(xié)議就不予簽名.如果仍要簽名,那么具有區(qū)塊打包權(quán)的第N個stakeholder 在將區(qū)塊打包之前完全可以決定是否打包區(qū)塊.如果不打包,則認為該區(qū)塊無效,所有對該區(qū)塊進行的簽名操作都被視為無效,這將消耗這些stakeholder 的信任度.如果打包成功并且與其他區(qū)塊一起進行信任度競爭,網(wǎng)絡(luò)中的其他節(jié)點會對區(qū)塊的簽名進行驗證.如果區(qū)塊中有的簽名是非法的或者區(qū)塊頭哈希不正確,則認為該區(qū)塊非法.對該區(qū)塊進行簽名操作的所有stakeholder 均被認為是惡意的,使用相應(yīng)的懲罰機制進行信任度懲罰. 基于經(jīng)典的PBFT 的2/3 原則,可以設(shè)定一個投票上鏈的閾值.只有在區(qū)塊中擁有超過2/3 的stakeholder 投票的情況下才具有上鏈資格.節(jié)點成為stakeholder 的概率由公式(6)計算: 在PoT 中,區(qū)塊的產(chǎn)生過程被一分為二:首先,通過簡單難度的工作量證明產(chǎn)生一個空區(qū)塊;然后,通過stakeholder 的投票來確定該區(qū)塊是否有上鏈資格.在區(qū)塊產(chǎn)生過程中引入計算以求規(guī)避權(quán)益粉碎攻擊,在將交易放入?yún)^(qū)塊打包廣播到網(wǎng)絡(luò)的過程中,引入基于鏈的權(quán)益證明機制,所持信任度高的區(qū)塊相比于其他區(qū)塊上鏈機會更大.相比于單純基于算力的競爭,這種方法可以大幅度提高網(wǎng)絡(luò)的吞吐量,減少網(wǎng)絡(luò)的資源消耗.其具體架構(gòu)如圖1 所示. 其中,stakeholder 由PoT 的跟隨幣機制衍生出來.在其產(chǎn)生后對其認可的空區(qū)塊進行私鑰簽名,最后一個stakeholder 即stakeholderN將其認可的交易進行打包,滿足要求的區(qū)塊被打包之后上就可以上鏈. PoT 共識機制產(chǎn)生區(qū)塊的過程如下. (1)首先,每個礦工都嘗試去產(chǎn)生一個區(qū)塊頭,這個區(qū)塊頭中包含了先前區(qū)塊的哈希(Bprev)、礦工地址(Adressminer)、該區(qū)塊在區(qū)塊鏈中的索引(height)以及一個隨機值(nonce).同時,區(qū)塊頭中不能包含任何交易.進行工作量證明計算.當?shù)V工生成區(qū)塊頭之后,如果符合當前網(wǎng)絡(luò)難度目標,就向全網(wǎng)廣播該區(qū)塊頭; (2)所有節(jié)點將這個區(qū)塊頭的散列值作為確定T個participants 的數(shù)據(jù).具體算法是:通過將T個固定的值與區(qū)塊頭的散列值進行哈希運算,得到的第i個結(jié)果x將被用來確定第i個participant.這個過程就是在PoT 中引入一個跟隨幣機制,有意向成為participant 的節(jié)點將所有未花費的輸出(UTXO)按照字典的方式進行排序,這里假設(shè)UTXO 不為空,具體格式為{NodeID,Coin},其中,NodeID為節(jié)點的公鑰地址,Coin表示節(jié)點所持幣的數(shù)量.同時,CurrentID表示當前participant 的序號,并且CurrentID≤T.具體過程如下:節(jié)點選取一個其值介于1 和系統(tǒng)中UTXO 總數(shù)量之間的隨機數(shù)x,為了找到第x個幣的持有者,節(jié)點找到一個最小的i,使得列表從最開始到i的節(jié)點所持UTXO 代幣數(shù)量不小于x.這樣,第i個地址就是第x個幣的擁有者; (3)在確定了T個participants(參與者)之后.在每一個slot 中,都會從中隨機選取N個節(jié)點作為stakeholder參與共識,這里N (4)第N個stakeholder 向網(wǎng)絡(luò)廣播打包后的區(qū)塊,當其他節(jié)點收到這個區(qū)塊并驗證是有效時,這些節(jié)點將該區(qū)塊認為是區(qū)塊鏈的合法擴展.考慮到以后的網(wǎng)絡(luò)會拓展得很大,所以如果有兩個區(qū)塊同時在全網(wǎng)傳播,那么兩個區(qū)塊就進行基于鏈的權(quán)益證明競爭上鏈.當區(qū)塊被擴展到了鏈上,則給該區(qū)塊簽名的所有stakeholder 的行為均被定義為#good; (5)區(qū)塊產(chǎn)生之后的獎勵由第N個stakeholder 收集,并且將之分享給礦工和前N-1 個stakeholder. Fig.1 Proof of trust framework basedon dynamic authorization圖1 基于動態(tài)授權(quán)的信任證明機制 共識生成區(qū)塊的偽代碼算法見算法1. 算法1.Proof of Trust Consensus. Input:Bprevprevious block;Adressminer:The miner’s public address;Height:Height relative to the genesis block;Nonce;CurrentID:The index of the stakeholder;M:User-defined parameters;D:The degree of difficulty that the network needs to satisfy;UTXO_List:The dictionary which is defined with {NodeID:Coin}; Output:A block with transactions. 信任度是節(jié)點誠實參與區(qū)塊生成而獲取的獎勵,同時也是節(jié)點信譽的表現(xiàn)形式.為了保持網(wǎng)絡(luò)中在線節(jié)點的數(shù)量,PoT 中引入了信用消耗機制.同時,因為logistic 回歸模型的特性,節(jié)點的信任度是有信用上限的. (1)信用消耗 信用消耗是為了保證節(jié)點的參與度而設(shè)置,而不是為了讓節(jié)點以消耗信用度的方式參與區(qū)塊的生成.因為當網(wǎng)絡(luò)中的stakeholder 過少時,網(wǎng)絡(luò)的安全與穩(wěn)定就得不到保證.在本機制中,節(jié)點的信用度會隨著時間的推移而降低.即使節(jié)點不是stakeholder,為了保證網(wǎng)絡(luò)安全,它也要參與區(qū)塊的驗證.只要參與區(qū)塊的驗證,就不會產(chǎn)生信用消耗.節(jié)點i的信任度具體消耗算法如公式(7)所示: 其中,ΔB表示區(qū)塊間隔,即上次參與生成的區(qū)塊與當前區(qū)塊之間的間隔(從0 開始),算法如下: 如果剛好兩個區(qū)塊是連續(xù)的,則ΔB=0.此時,節(jié)點以當前信任度繼續(xù)參與區(qū)塊生成,信任消耗函數(shù)就不會執(zhí)行,這就最大程度地保證了網(wǎng)絡(luò)中節(jié)點積極在線參與區(qū)塊的驗證.D值表示當前一段時間內(nèi)網(wǎng)絡(luò)的難度值,D的值越大,就表示越需要多次地反復(fù)嘗試才能找到有效的區(qū)塊.D的值根據(jù)網(wǎng)絡(luò)中的出塊速率進行動態(tài)調(diào)節(jié),最終將網(wǎng)絡(luò)的出塊速率維持在一個穩(wěn)定的水平.難度的提升,意味著區(qū)塊上鏈需要更多的信任度加權(quán),上鏈成本就會增加,理性節(jié)點可能會選擇暫時不參與區(qū)塊生成,以尋求網(wǎng)絡(luò)難度更低、機會更大的時候參與區(qū)塊生成.當節(jié)點參與度過低時,惡意節(jié)點成功的概率也就越大.因此,在網(wǎng)絡(luò)難度提高的同時,也增大對于不參與區(qū)塊生成的節(jié)點的信任消耗,將有助于提高節(jié)點的參與度,維護區(qū)塊鏈網(wǎng)絡(luò)的運行安全. (2)信用上限 PoT 中的節(jié)點可以不通過自身所持資源來確定其擁有的投票權(quán)重,并且其所持信任度上限最高為1,一定程度上解決了原始PoS 協(xié)議中的幣齡累積導(dǎo)致的中心化問題.傳統(tǒng)的PoS 機制中,投票權(quán)重的增長是線性的,PoT中信任度增長呈非線型的,信任度的提升速率隨著時間的推移會下降,最后趨近于0,因此不會造成單一節(jié)點信任度過高導(dǎo)致的網(wǎng)絡(luò)中心化問題. 在PoT 中,原先的基于幣齡或者加密貨幣所有權(quán)的權(quán)益被修改為基于節(jié)點自身的信任度的權(quán)益,不再依賴于節(jié)點自身所持資源.stakeholder 通過對于區(qū)塊的簽名來賦予區(qū)塊信任度,信任度越高,則得到哈希結(jié)果的速度就越快,計算公式見公式(9). 這里,Bprev是節(jié)點投票區(qū)塊的前置區(qū)塊;投票節(jié)點的地址是A,它的信任度為trust(A);Blockcur是stakeholderN打包后的區(qū)塊;t是世界標準時間(UTC)的時間戳;M∈[1,D]是一個常數(shù),可以根據(jù)網(wǎng)絡(luò)實時狀況動態(tài)變化;D值代表難度;δt則是從Bprev創(chuàng)建以后所經(jīng)過的時間.當一個區(qū)塊被上傳到整個網(wǎng)絡(luò)之后,最初區(qū)塊滿足公式(9)的可能性是很低的;但是隨著時間的推移,成功概率將逐漸增加,首先計算出來的區(qū)塊才能成為區(qū)塊鏈的合法擴展. 對于地址為A的stakeholder 節(jié)點,其信任度是被鎖定的,即該節(jié)點一次只允許投票一次.基于所提供的地址A和上述公式的時間戳t,stakeholder 就能保證其簽名的有效性. 傳統(tǒng)雙花攻擊場景如下. (1)攻擊者發(fā)起一個之后會被他自己撤銷的一個交易; (2)在該交易之后,攻擊者在該交易所在區(qū)塊之前的那個區(qū)塊上開始建立側(cè)鏈; (3)當新交易進入?yún)^(qū)塊并且獲得了足夠的確認數(shù)目(6 個區(qū)塊)且攻擊者的側(cè)鏈長度超過主鏈時,攻擊者的側(cè)鏈就成為了主鏈,攻擊者發(fā)起的第1 筆交易被判定為無效,雙花攻擊成功. 要想成功地進行雙花攻擊,攻擊者必須在整個攻擊過程中控制超過50%的網(wǎng)絡(luò)資源(PoW 算力、PoS 權(quán)益).相對于控制51%的算力,控制51%的流通代幣是非常困難的[3].但是這并不意味著在權(quán)益證明中就無法展開攻擊,攻擊者可以提供報酬給那些愿意在他指定的區(qū)塊上鑄造新區(qū)塊的節(jié)點.如果攻擊失敗,參加攻擊的用戶并不會遭受太多損失.對于攻擊者而言,只要賄賂的金額小于商品交易價格,那么總是有利可圖的. 在PoT 中,如果要進行賄賂攻擊是不可行的,因為每次生成區(qū)塊的stakeholder 都不相同,并且在區(qū)塊產(chǎn)生之前stakeholder 是不確定的.一旦被發(fā)現(xiàn)參與惡意投票,對于信任度的懲罰是極高的,而且只有第N個stakeholder具有對交易進行打包的權(quán)力.除非攻擊者提前找到第N個stakeholder,一旦stakeholderN對無效交易進行打包操作,就將受到信任度懲罰.因懲罰系數(shù)γ的存在,高昂的信任度懲罰對其來說是不可承受的.證明過程見公式(10)~公式(12). 公式(10)是節(jié)點i誠實參與共識所獲取的信任度,公式(11)是節(jié)點i在誠實投票之后進行惡意投票被系統(tǒng)識別后更新的信任度,公式(12)是節(jié)點i誠實投票后進行惡意投票的信任度與之前誠實投票的信任度所占比例. 假設(shè)t=2,γ=2,?x=τx=α=1 時,.在epoch 的第2 個slot 中,在誠實參與共識一次之后,惡意攻擊者進行惡意投票被系統(tǒng)識別后的信任度只有之前的36%.并且這種信任度懲罰會隨著輪數(shù)以及時間的遞增而快速上升,α越大,懲罰越重.這種懲罰力度的存在,對任何理性節(jié)點都是難以接受的. 累積攻擊最原始的版本是幣齡累積攻擊,是針對PPCoin 和其他使用幣齡作為用戶權(quán)益的系統(tǒng)而發(fā)起的攻擊.在后來的PPCoin 版本中,UTXOs 的幣齡都以90 天為限制.在Novacoin 和BlackCoin 中,對于幣齡同樣也有限制.然而,通過限制幣齡來大幅降低攻擊的可能的同時,也減弱了以幣齡作為權(quán)益的好處. 在PoT 中,信任度的累積不是線性的,而是基于非線性的logistic 回歸模型.在PoT 中,如果想要進行累積攻擊,就需要對信任度進行累積.本文提出的修正logistic 算法使得信任度的累積變得十分漫長,并且節(jié)點惡意行為一旦被發(fā)現(xiàn),對節(jié)點的信任度懲罰力度將是任何理性節(jié)點都不可承受的,因此在PoT 中,想要通過積累信任度發(fā)起攻擊的收益不足以抵消其遭受的信任度懲罰損失.如果攻擊者要繞過信任度,僅通過自身所持權(quán)益生成區(qū)塊與其他區(qū)塊進行上鏈競爭,其成功的概率也是相當?shù)偷? 證明:首先,攻擊者想要控制stakeholder 進行2/3 投票.在擁有n個stakeholder 節(jié)點的網(wǎng)絡(luò)中,攻擊者必須要控制至少2/3 的stakeholder 節(jié)點;同時,攻擊者還需要最后一個stakeholder 將自己捏造的虛假交易打包進區(qū)塊中,即攻擊者控制的stakeholder 中必須有一個是交易打包者.因此,攻擊者成功的總概率為 p表示成為stakeholder 的概率.假設(shè)一個擁有6 個stakeholder 的網(wǎng)絡(luò),攻擊者持有20%的總權(quán)益,那么攻擊者繞過信任度,成功上鏈競爭.那么他成功的概率為 相比其擁有的20%的權(quán)益,區(qū)區(qū)1%的成功率實在是微不足道的. 權(quán)益粉碎攻擊是針對PoS 特有的攻擊方式,其具體場景如下:在運行PoS 協(xié)議的網(wǎng)絡(luò)中,如果某個節(jié)點所持權(quán)益很低(比如1%),那么它成功生成區(qū)塊的概率也就是1%.任何一個理性的節(jié)點都愿意去嘗試分叉,因為在純PoS 協(xié)議中,分叉不需要消耗任何資源,唯一消耗的就是幣齡.如果該區(qū)塊沒有被接受,則幣齡也不會消耗.盡管這樣會造成整個網(wǎng)絡(luò)的加密貨幣價值降低,但是因為該節(jié)點所占權(quán)益很少,所以它們并不在乎. 在PoT 中,只有隨機生成的N個stakeholder 有權(quán)利擴展區(qū)塊鏈,礦工只負責(zé)生成區(qū)塊供stakeholder 進行簽名,并沒有決定權(quán).在制定決策時就很清楚,不會有二義性,具有很強的治理能力.正常情況下是不會經(jīng)歷任何分叉,因為N個stakeholder 是合作生產(chǎn)區(qū)塊而不是競爭. 基于提出的PoT 機制,在Docker version 18.03.0-ce,build 0520e24 中實現(xiàn)了原型系統(tǒng),實驗環(huán)境為Intel I7-4702MQ CPU 2.20GHz 和16G 內(nèi)存,操作系統(tǒng)為64 位Win10.通過搭建原型驗證模型,驗證PoT 協(xié)議的共識時延能否隨著時間的增長而降低以及對惡意節(jié)點的懲罰,并對節(jié)點信任度增長與消耗進行實驗. 原型系統(tǒng)信任度增長采用改進后的logistic 線性回歸模型.網(wǎng)絡(luò)中一共有10 個礦工節(jié)點,其中4 個作為stakeholder.因為stakeholder 節(jié)點每次的選取都是隨機的,所以在每一個slot 中,參與共識的stakeholder 不盡相同,網(wǎng)絡(luò)中節(jié)點信任度增長過程如圖2 所示.投票結(jié)果統(tǒng)計公式中常量threshold=0.25,用戶自定義常量c值分別為0.1,0.5,0.9. Fig.2 Trust increase in network nodes圖2 網(wǎng)絡(luò)節(jié)點信任度增長 圖2 表明:不同c值的信任度增長速率是不同的,但是最后都趨近于上限.c值越大,即說明用戶給予的最近的信任度偏差的權(quán)重比累積信任度偏差要高,從而最近時間片內(nèi)的信任度增長率在總體信任度增長率中占比升高.經(jīng)過多輪共識,網(wǎng)絡(luò)中節(jié)點的信任度均會維持在一個恒定的水平,因此不會產(chǎn)生單個節(jié)點權(quán)益過大而導(dǎo)致的權(quán)益中心化問題. 假設(shè)原型系統(tǒng)中所有stakeholder 在其信任度到達高峰時保持離線狀態(tài),不再參與共識,整個網(wǎng)絡(luò)將會變得不再安全,其總體信任度下降過程如圖3 所示. 可以看出:如果網(wǎng)絡(luò)中被選出的stakeholder 都不參與區(qū)塊的生成過程,開始幾輪其總體信任度還能保持基本穩(wěn)定,但從第5 輪開始,信任度明顯下降,并呈現(xiàn)非線性的下降過程,在17 輪后逐漸趨于0. Fig.3 Trust consumption in network nodes圖3 信任度消耗 原型系統(tǒng)搭建了擁有10 個節(jié)點的分布式網(wǎng)絡(luò),stakeholder 節(jié)點有4 個.投票結(jié)果統(tǒng)計公式中常量的取值為:難度D=4,5,M=2,一共進行25 輪共識,并且對最終的時延結(jié)果進行了最小二乘曲線擬合,結(jié)果如圖4 所示. Fig.4 Time delay in consensus圖4 共識時延對比圖 圖4 表示在難度值D分別為4 和5 時,經(jīng)過25 輪之后,PoT 協(xié)議與的PoW 協(xié)議的共識時延變化情況.共識時延表示區(qū)塊鏈網(wǎng)絡(luò)中的出塊時間,即區(qū)塊上鏈所經(jīng)過的時間,時延單位為秒(s).虛線部分是PoW 的共識時延變化過程,實線是PoT 的共識時延變化過程.在此基礎(chǔ)上分別進行了擬合,因為哈希計算的隨機性,PoW 時延波動性很大,但是擬合的結(jié)果趨于穩(wěn)定.這說明實驗平臺的算力是穩(wěn)定的.相反,PoT 協(xié)議的共識時延隨著共識輪數(shù)的增加而降低,最終會維持在穩(wěn)定的水平. 圖5 表示在D=4 時,網(wǎng)絡(luò)中stakeholder 節(jié)點數(shù)量的不同對于共識時延的影響.參與共識的stakeholder 節(jié)點數(shù)量分別取N=5,N=6,N=8. 由圖5 可知:隨著網(wǎng)絡(luò)中stakeholder 節(jié)點數(shù)量的增加,網(wǎng)絡(luò)共識時延會有所下降,最終會維持穩(wěn)定的水平.但是stakeholder 數(shù)量的增加不能是無限制的,當網(wǎng)絡(luò)中stakeholder 節(jié)點數(shù)量過多時,節(jié)點被攻擊者賄賂的概率也將上升.同時,如果網(wǎng)絡(luò)中stakeholder 節(jié)點過少,網(wǎng)絡(luò)共識時延將增大,導(dǎo)致stakeholder 暴露時間過長,增大了stakeholder 節(jié)點被攻擊者賄賂的概率.圖中曲線的波動是因為網(wǎng)絡(luò)中每次參與共識的stakeholder 的不確定造成了區(qū)塊信任度的波動,從而最終導(dǎo)致共識時延的波動,但是共識時延都是呈下降趨勢. Fig.5 Effect of the number of stakeholder on time delay in consensus圖5 stakeholder 數(shù)量對時延影響 圖6 表示在D=4,stakeholder 數(shù)量增長到7 時,網(wǎng)絡(luò)中節(jié)點數(shù)量的變化對于共識時延的影響.一共進行了30輪共識,普通節(jié)點數(shù)量分別為20,50 和100. Fig.6 Effect of the number of nodes on time delay in consensus圖6 節(jié)點數(shù)量對時延影響 由圖6 可知:隨著網(wǎng)絡(luò)中節(jié)點數(shù)量的增加,共識時延并沒有發(fā)生特別大的改變.這是因為在PoT 中,只有stakeholder 才能決定區(qū)塊是否上鏈,區(qū)塊產(chǎn)生的難易程度與普通節(jié)點的數(shù)量沒有直接關(guān)系.這也說明PoT 具有一定的節(jié)點可擴展性,出塊效率并不因普通節(jié)點數(shù)量的變化而變化. 懲罰系數(shù)測試分別對節(jié)點行為所占不同比重以及不同懲罰系數(shù)下,節(jié)點在經(jīng)過惡意投票之后信任度的下降比例進行實驗驗證,結(jié)果如圖7(a)~圖7(d)所示.在一個epoch 中,當節(jié)點誠實行為占比較大時,比如圖7(a)中誠實行為占70%,惡意行為占30%,懲罰系數(shù)對于信任度下降比的影響很大:當懲罰系數(shù)較低時,如γ=1,節(jié)點仍然可以通過進行誠實投票來努力恢復(fù)自己的信任度;但是隨著懲罰系數(shù)的增大,如γ=3 時,節(jié)點越來越難以恢復(fù)到作惡前的信任度.并且隨著誠實行為所占比越來越少,例如當誠實行為僅占50%時,信任度最高也只能維持在惡意投票之前的50%.隨著惡意投票行為占比的擴大,節(jié)點信任度下降速度也會隨之增大. 由圖7(c)和圖7(d)可知:當惡意行為所占比重很大時,懲罰系數(shù)對于節(jié)點信任度的懲罰使得節(jié)點信任度下降極快,經(jīng)過兩至三個epoch 信任度就下降為0.因此,無論誠實行為所占比重如何,一旦被檢測有惡意行為發(fā)生,其信任度的下降速率將是極快的,對于任何理性節(jié)點而言這都是難以承受的下降速率. Fig.7 Trust penalty in network nodes圖7 信任度懲罰 區(qū)塊鏈是近年來研究的熱點,許多行業(yè)在使用區(qū)塊鏈技術(shù)進行行業(yè)內(nèi)的技術(shù)革新.然而針對不同的應(yīng)用場景,單一的共識機制是不足以滿足所有業(yè)務(wù)需求的,不同業(yè)務(wù)場景采用的共識機制也不盡相同.本文針對現(xiàn)有共識機制中存在的問題進行了研究與改進,解決了權(quán)益證明機制中存在的易受賄賂攻擊、幣齡累積攻擊以及工作量證明機制中存在的自私挖礦等問題.與PoW 相比,在保證網(wǎng)絡(luò)安全的前提下,PoT 降低了共識時延.本文提供了一種共識機制的改進思路,并且通過實驗對改進的共識機制的可行性和性能進行了分析和驗證.結(jié)果表明:在共識時延方面,PoT 相比PoW 有較大優(yōu)勢;在預(yù)防賄賂攻擊、累積攻擊以及權(quán)益粉碎攻擊方面,相較于PoS 也有著顯著優(yōu)勢.此外,PoT 還可以實現(xiàn)維護網(wǎng)絡(luò)拓撲結(jié)構(gòu)、保持在線節(jié)點數(shù)量以及更高效的資源利用.2.1 節(jié)點行為判別策略
2.2 區(qū)塊生成
2.3 信用消耗
2.4 投票機制
3 攻擊成本分析
3.1 賄賂攻擊
3.2 累積攻擊
3.3 權(quán)益粉碎攻擊
4 實驗分析
4.1 信任度增長
4.2 信任度懲罰
4.3 共識時延
4.4 節(jié)點數(shù)量對共識時延的影響
4.5 懲罰系數(shù)
5 結(jié)束語