唐淑敏,金 瑜
(武漢科技大學 計算機科學與技術(shù)學院,武漢 430065)
2008 年,一位匿名為“中本聰”的學者在論壇上以《比特幣:一種P2P 電子現(xiàn)金支付系統(tǒng)》的文章掀起了數(shù)字貨幣的狂風浪潮[1]。區(qū)塊鏈作為其核心技術(shù)也受到了各界人士的廣泛關(guān)注。區(qū)塊鏈本質(zhì)上是一個分布式的賬本數(shù)據(jù)庫[2],通過時間戳、數(shù)字簽名、共識機制、激勵機制以及智能合約等技術(shù)實現(xiàn)去中心化。傳統(tǒng)的賬本系統(tǒng)需要一個記賬中心,而在區(qū)塊鏈系統(tǒng)中節(jié)點可以在相互不信任的分布式環(huán)境中,實現(xiàn)點對點的交易與協(xié)作[3]。區(qū)塊鏈的去中心化、安全性、不可篡改等特性使它在金融[4]、隱私保護[5]、物聯(lián)網(wǎng)[6]、醫(yī)療健康[7]等領(lǐng)域都有著廣泛的應用。
在保證分布式的區(qū)塊鏈系統(tǒng)去中心化的同時,滿足各節(jié)點能在數(shù)據(jù)記錄的真實性與準確性方面達成一致,就需要共識機制來調(diào)度完成。共識問題由來已久[8],在“中本聰”提出區(qū)塊鏈之前,就有針對“拜占庭將軍問題”而提出的一系列經(jīng)典式共識機制,例如Paxos[9]、實用拜占庭容錯(Practical Byzantine Fault Tolerance,PBFT)算法[10]等。區(qū)塊鏈被提出之后,在經(jīng)典式共識機制[11]和基于工作量證明的共識機制(Proof of Work,PoW)的基礎(chǔ)上又提出許多新算法,包括后來提出的基于權(quán)益證明的共識機制(Proof of Stack,PoS)等[12]。
在區(qū)塊鏈共識機制中,“礦工”只有通過挖礦獲取某區(qū)塊記賬的權(quán)力,才能獲得在該區(qū)塊中產(chǎn)生的交易費獎勵與挖礦獎勵。但是無論是基于工作量證明還是權(quán)益證明都存在一些問題,例如工作量證明的算力資源浪費、權(quán)益證明的權(quán)益積累攻擊等。黃建華等[13]提出的基于動態(tài)授權(quán)的信任度證明機制(Proof of Trust,PoT)中,結(jié)合了PoW 與PoS 的特性,旨在以基于信任度的方式搭建一個安全、低資源消耗且去中心化的區(qū)塊鏈系統(tǒng),有效解決了PoW 與PoS 等共識機制存在的不足,但同時也造成了記賬權(quán)“壟斷化”[14]問題,且共識時延由于需要遍歷所有競爭節(jié)點的交易記錄,會隨著競爭成為權(quán)益節(jié)點(Stackholder)數(shù)量的增多而增長較快。
本文基于文獻[13]提出的PoT 的基礎(chǔ)上提出了一個基于中國剩余定理(Chinese Remainder Theorem,CRT)的權(quán)益節(jié)點選舉共識機制——CRT-PoT(Chinese Remainder Theorem-Proof of Trust)。每個參與節(jié)點在共識之初進行選擇,決定成為投票節(jié)點(Voter)或者競選節(jié)點(Candidate),并只能二者選其一。一般起始擁有更多資源的節(jié)點更有可能成為Candidate,而小節(jié)點只能選擇成為Voter。因此又在投票模型的基礎(chǔ)上提出多投機制,在確保每個Candidate 節(jié)點能夠公平競爭的同時,保證Voter 節(jié)點能獲得更多的機會,以更大概率爭取之后的區(qū)塊記賬權(quán),以此良性激發(fā)Voter 節(jié)點與Candidate 節(jié)點之間的參與積極性與誠信競爭,記賬權(quán)不會總局限于一部分節(jié)點,由此解決記賬權(quán)PoT 中的記賬權(quán)壟斷問題。其次在本文方案中,不需要遍歷所有交易記錄,共識時延只與節(jié)點數(shù)有關(guān),因此共識時延呈線性增長,相比起PoT,共識時延增長較慢。
基于工作量證明的共識機制通過循環(huán)計算SHA-256 尋找一個隨機數(shù),使得該隨機數(shù)讓目標哈希值前部分出現(xiàn)足夠數(shù)量的0,然后將該區(qū)塊廣播至系統(tǒng)中接受其他節(jié)點的驗證,若該區(qū)塊合法,礦工就能成為出塊者,獲得對該區(qū)塊的記賬權(quán)。礦工之間競爭激烈,造成大量算力資源浪費。為了能夠更快地找到隨機數(shù),礦工們相互合作,集中算力資源,形成礦池礦場,形成中心化的同時也造成了“公地悲劇”問題。所謂的“公地悲劇”是在區(qū)塊鏈系統(tǒng)中,礦工的收益主要來自交易費獎勵與挖礦獎勵。而挖礦的難度與日俱增,礦工的收益大多依靠交易費獎勵。用戶們?yōu)榱酥Ц渡俚氖掷m(xù)費,盡可能進行小的交易,礦工獲得的交易費變少。長此以往,礦工流失,算力下降,敵手發(fā)動攻擊的成本減少,區(qū)塊鏈系統(tǒng)的安全性下降,形成“公地悲劇”。
King 等[12]提出點點幣(PPCoin),用權(quán)益證明的方式取代工作量證明。同時提出“幣齡”的概念,節(jié)點只要手持有幣,持幣時間越長,幣齡越大。節(jié)點通過押注機制抵押一定的代幣成為驗證節(jié)點,之后以消耗幣齡的方式挖礦。雖然這種方式有效解決了PoW 算力浪費和如今區(qū)塊鏈礦工因難以獲得挖礦獎勵而帶來的“公地悲劇”問題,但它也存在新問題。節(jié)點通過離線方式就能積累幣齡,難以保證節(jié)點在線比例。持幣多的節(jié)點,幣齡積累越快,就越容易成為礦工,敵手以此發(fā)動權(quán)益積累攻擊,嚴重影響系統(tǒng)安全;持幣少的節(jié)點因為挖礦的代價小,試圖在區(qū)塊鏈上分叉挖礦[15]獲取更多的利益,導致區(qū)塊鏈分叉眾多,影響其穩(wěn)定性。
2014 年Bentov 等[16]提出基于行動量的共識機制,結(jié)合了PoW 和PoS 的特性。礦工挖出區(qū)塊頭,區(qū)塊的記賬權(quán)交由隨之衍生出的N個參與者。挖礦與記賬權(quán)分開,有效解決“公地悲劇”和分叉攻擊,但是難以保證參與節(jié)點的在線率,導致挖到的區(qū)塊頭由于未及時驗證而被丟棄。2014 年Larimer 等[17]在PoS 的基礎(chǔ)上提出權(quán)益委托證明(Delegated Proof of Stake,DPoS),權(quán)益持有人自行決定委托人,以權(quán)益比重選出101 位委托人組成委員會,各委托人依次輪流出塊和記賬。委托人受到其他節(jié)點的監(jiān)督,大部分時間必須保證在線,極大地提升了出塊的速率;但是同樣委員會的出現(xiàn)也造成了嚴重的中心化,委托人可能為了利益而和權(quán)益持有人共謀。為保證公平以及記賬者的隨機性,2019 年王纘等[14]提出基于門限密碼方案的共識機制,以盲猜競價的方式來爭取記賬權(quán),但是該機制保證金的管理和門限密鑰的分發(fā)都依賴一個可信中心,不能保證去中心化。
PoT 機制根據(jù)權(quán)益節(jié)點參與創(chuàng)建區(qū)塊的行為賦予其信任度,權(quán)益節(jié)點通過賦予區(qū)塊信任來進行挖礦,信任越高,挖礦成功的概率越大,同時設(shè)置信任衰減機制保證節(jié)點的在線率。以信任的機制在一定程度上解決了以上算法存在的問題,但是通過引入跟隨幣機制(Follw The Satoshi,F(xiàn)TS)選出Stackholders 的方法又引起了新的問題:參與節(jié)點們持有的未花費的satoshi 幣越多,被選中的機會就越大,普通節(jié)點仍然難有機會,隨著系統(tǒng)的運行,容易造成記賬權(quán)“壟斷化”,從而導致小節(jié)點的流失。對于一個區(qū)塊鏈系統(tǒng)來說,共同維護系統(tǒng)的節(jié)點越多,系統(tǒng)就越安全。記賬權(quán)“壟斷化”造成普通節(jié)點的流失,權(quán)益節(jié)點暴露的可能性大大增加,敵手可以付出更少的代價來攻擊權(quán)益節(jié)點操縱出塊和記賬,因此保證節(jié)點間的公平競爭以激勵普通節(jié)點的參與。解決“壟斷化”問題后會吸引更多普通節(jié)點來競爭成為權(quán)益節(jié)點,競選節(jié)點需要將自己所有未花費的satoshi 幣的交易記錄按字典的順序進行排序,跟隨幣機制中需要遍歷更多的節(jié)點交易記錄來生成權(quán)益節(jié)點,其權(quán)益節(jié)點選出的時延增長得也會越來越快。
為此,本文在PoT 的基礎(chǔ)上,改進Stackholder 節(jié)點的選出機制來解決PoT 存在的記賬權(quán)“壟斷化”以及參與競選節(jié)點數(shù)量增多帶來的耗時問題。
本章主要介紹權(quán)益節(jié)點選出的過程,首先基于中國剩余定理的秘密分享算法[18]提出投票模型,簡稱CRT-Election,并從模型的基本思想、具體實現(xiàn)進行詳細描述[19-20],其次在此模型上提出多投機制,并分析其設(shè)定的必要性,最后提出本模型基于誠實記錄的競爭機制。
中國剩余定理的秘密分享算法是將秘密分為N份子秘密,將子秘密交由N個參與者管理,其中有任意T份子秘密就能還原出本來的結(jié)果。由此,本文提出(n,t)門限的權(quán)益節(jié)點選舉模型,其中n為參與共識節(jié)點總數(shù)量,t為競選節(jié)點需獲得的支持數(shù)。如圖1 所示,該模型包括了初始化、競選階段、投票階段和驗證階段4 個階段,基本思想如下:
1)初始化(Initialization)。節(jié)點參與共識的方式有兩種:報名成為競選節(jié)點或是參與對競選節(jié)點的投票。參與共識后,參與節(jié)點(Participant)(圖1 中Pi)隨機獲得一對公私鑰(SK,PK)作為參與券。
2)競選階段(Campaign stage)。Participant 節(jié)點報名成為競選節(jié)點(Candidate)(圖1 中Ci)之后,系統(tǒng)會將該Candidate節(jié)點的歷史誠實信息(包括歷史投票信息和曾作為某一周期的權(quán)益代表成功出塊的信息)、公鑰地址(info,Addr)組成信息M(圖1 中Mi),在系統(tǒng)中進行廣播。
3)投票階段(Voting stage)。投票節(jié)點(Voter)(圖1 中Vi)在此階段可以根據(jù)廣播的消息,查看該Candidate 的信息M,以此決定是否對它進行投票。若支持,則以投票公鑰PK對M進行簽名,隨之生成一個部分簽名partSig 并廣播。系統(tǒng)中任意參與節(jié)點都能作為簽名合成者合成最終簽名。若M收到的partSigs 不少于門限t,則能合成最終的簽名Sig,更新M的內(nèi)容并廣播,否則將該M丟棄。若合法,則該M對應的Candidate 節(jié)點成為權(quán)益節(jié)點,否則將該M丟棄。
4)驗證階段(Verification stage)。所有節(jié)點在參與或離開系統(tǒng)時,系統(tǒng)會廣播新的投票組公鑰Cpk,任意參與節(jié)點都可以作為簽名驗證者,利用組公鑰驗證廣播的M及其簽名是否合法,驗證合法即為權(quán)益節(jié)點(Stackholder)(圖1中的Si)。
圖1 CRT-Election模型示意圖Fig.1 Schematic diagram of CRT-Election model
2.2.1 初始化
1)設(shè)置系統(tǒng)參數(shù)。
在每一周期的起始,若有n個節(jié)點參與共識,t為門限,系統(tǒng)隨機生成一系列基礎(chǔ)數(shù)據(jù)Primes{p,q,g,Dn,D},隨后將Primes的內(nèi)容廣播。其中,Primes中數(shù)據(jù)的位數(shù)K由系統(tǒng)規(guī)定,p、q為兩個大素數(shù),且滿足p|(q-1),p用于投票公私鑰的生成,q用于生成組公鑰。Dn由n個互素且嚴格單調(diào)遞增的素 數(shù)(d1,d2,…,dn) 組成,且滿足(di,p)=1|i=1,2,…,n,g為q有限域中的一個生成原,。
2)參與節(jié)點投票公私鑰的生成。
參與節(jié)點Vi收到廣播的Primes后,在q的有限域中隨機獲取一個數(shù)作為自己的投票私鑰∈(0,[p/n])。投票公鑰為:
節(jié)點Vi將自己的投票公鑰進行公布,若其他節(jié)點發(fā)現(xiàn)新的投票公鑰出現(xiàn),則更新投票組公鑰為:
系統(tǒng)每周期初始化完成后,當在競選階段或投票階段有節(jié)點Vi+1加入時,生成一個新的符合條件的di+1,并更新Primes。此節(jié)點的投票公鑰為,產(chǎn)生私鑰后更新投票組公私鑰為:
將該節(jié)點的公鑰廣播,由此從競選階段之后繼續(xù)。若節(jié)點Vi+1離開時,同理進行除法,更新投票組公私鑰后刪除di+1并更新Primes。
算法1 Initialization。
輸入(K,n,t);
輸出(Primes,node)。
2.2.2 競選階段
報名競選的節(jié)點Ci在報名成功后,會生成一個(info,Addr)的信息包,同時在該信息包附上(Sig,U)的相關(guān)信息,Sig 為簽名,U 為給該信息包簽過名的節(jié)點投票公鑰積,兩者的初始化值均為0,Ci將該信息包序列化后廣播。
算法2 Campaign stage。
輸入 Candidatenode;
輸出M。
2.2.3 投票階段
1)子秘密的分割。
在節(jié)點Vi隨機生成投票私鑰的同時隨機生成一個用于分享的子秘密,在[0,(D/p-1)/n]區(qū)間隨機生成一個素數(shù)。為保證秘密的安全性,將其變式為:
隨之將其分割為n份子秘密份額,分別發(fā)送給其他對應節(jié)點,分割如下:
sonShareij的意義是節(jié)點Vi關(guān)于dj的子秘密份額發(fā)送給Vj。
2)投票簽名。
節(jié)點Vj在收到來自其他節(jié)點或自己的n份sonShareji(j=1,2,…,n)后計算:
3)簽名合成。
合成簽名后更新并廣播。
算法3 Voting stage。
2.2.4 驗證階段
任意參與節(jié)點通過投票公鑰Cpk,以及U 可驗證簽名結(jié)果的合法性,驗證公式為:
若驗證合法,則中的競選節(jié)點Ci成功當選為權(quán)益節(jié)點。
算法4 Verification stage。
輸入M_list;
輸出 Stackholders。
針對CRT-Election 投票模型,設(shè)計一個多投機制,做出以下幾個設(shè)定:
設(shè)定1 若系統(tǒng)總共有n個參與節(jié)點,n-s個競選節(jié)點,s個投票節(jié)點,設(shè)定每個投票節(jié)點至多能夠投m票。
設(shè)定2 每個投票節(jié)點對每個競選節(jié)點至多只能投1 票。
酒過數(shù)巡,說到秦鐵崖的神勇無敵,酒到七成的秦鐵崖道:“秦某身經(jīng)百戰(zhàn),至今未落敗,奧秘何在?說出來諸位或許不信,奧秘就是,不怕受傷,不怕死!”
2.3.1 設(shè)定1分析
若系統(tǒng)原來選出權(quán)益節(jié)點是n-s個競選節(jié)點競爭s枚票數(shù),假設(shè)在投票節(jié)點給競選節(jié)點投票的概率相同的理想情況下,那么選出第i個權(quán)益節(jié)點的概率為:
其中:Pv是投票節(jié)點給競選節(jié)點投票的概率,sum(i-1)為前i-1 個權(quán)益節(jié)點獲得的總票數(shù)。由式(12)可知,當i越大,后面權(quán)益節(jié)點選出的概率越小。在Pv不相同時,也不影響最終選出概率的趨勢變化。權(quán)益節(jié)點未能選出會影響后續(xù)區(qū)塊的生成和交易記賬。
若每個投票節(jié)點能夠投m票,相當于每個競選節(jié)點競爭s枚票數(shù),此時選出第i個權(quán)益節(jié)點的概率為:
由式(13)可以看出,隨著i的變化,的概率保持穩(wěn)定。同時對于投票節(jié)點來說,若支持的競選節(jié)點能夠成功出塊,讓區(qū)塊上鏈,則其也會有更多的誠實行為記錄。多投機制讓它支持的成功率從1/(n-s)上升至m/(n-s),由此激勵投票節(jié)點的投票積極性。
2.3.2 設(shè)定2分析
假若投票節(jié)點可以將自己的全部選票都投給一個競選節(jié)點,很明顯當競選節(jié)點通過賄賂部分投票節(jié)點,或者參與節(jié)點之間合謀時,很容易操縱投票過程,因此設(shè)定投票節(jié)點只能對不同的節(jié)點進行投票,避免敵手以此惡意競選是必要的。
與原來依靠資源競爭出塊和記賬不同,在本投票模型中,節(jié)點們通過自身的誠實記錄數(shù)提升競爭力。在共識的每一周期,根據(jù)上一周期節(jié)點的記錄數(shù)競爭本輪的出塊記賬權(quán),其具體設(shè)定如下:
2)對于投票節(jié)點:其誠實的記錄在于周期內(nèi)有效投票的記錄數(shù)量,有效投票即所支持的競選節(jié)點成為記賬節(jié)點后有成功出塊記錄。
在本輪競爭過程中,節(jié)點們其最終計算方式為:競爭/投票節(jié)點上輪有效記錄數(shù)×競爭/投票計算權(quán)重,以權(quán)重來調(diào)節(jié)當前系統(tǒng)的資源差異化,避免壟斷。
在CRT-PoT 的共識機制中,按時間分為一系列周期T,每一周期包括權(quán)益節(jié)點的選出,區(qū)塊生成以及區(qū)塊上鏈。具體的過程如下。
在n個節(jié)點參與共識下,通過投票系統(tǒng)選出m個權(quán)益節(jié)點需要分兩種情況:
1)啟動時期。
當該機制剛剛開始,周期處在起始周期0。在各節(jié)點的歷史記錄都為零的情況下,為了獲得更多的獎勵費,眾節(jié)點比起成為投票節(jié)點更愿意成為競選節(jié)點,導致競選節(jié)點可能難以獲得超過門限t的簽名數(shù),從而難以有競選節(jié)點產(chǎn)生,最終導致系統(tǒng)啟動失敗。為此,在啟動階段,引入PoW 機制的算力證明,節(jié)點通過算力挖一個簡單難度的區(qū)塊,率先挖出區(qū)塊的前m個節(jié)點成為起始周期的權(quán)益節(jié)點。
2)穩(wěn)定時期。
在起始周期過后,各節(jié)點的記錄有了變化。為激勵參與節(jié)點成為投票節(jié)點積極投票,同時也保證系統(tǒng)每周期能成功選出m個權(quán)益節(jié)點,采用多投機制。
算法5 Stackholders selection。
輸入 Participant node;
輸出 Stackholders。
如圖2 是區(qū)塊生成的示意圖。在每個周期中又分為多個時隙(slot),一個時隙只生成一個區(qū)塊。在每一時隙開始,由礦工通過簡單難度的PoW 挖出一個空的區(qū)塊頭,包含上一區(qū)塊哈希值(HashprevB)、隨機值(nonce)、當前鏈高度(height)、時間戳(timestamp),但是不包含交易。
圖2 區(qū)塊生成示意圖Fig.2 Schematic diagram of block generation
每一周期前,系統(tǒng)通過投票模型選出m個權(quán)益代表,每時隙中從m個權(quán)益代表前m-1 個負責交易管理,第m個Stackholder 負責打包交易進塊中。Stackholders 通過判定該區(qū)塊頭合法后,用私鑰對該區(qū)塊簽名,并采用經(jīng)典的PBFT 的2/3 的投票原則:只有超過2/3 的Stackholders 在該區(qū)塊上簽字,該區(qū)塊才有上鏈的資格。
抗壟斷性就是保證在一定周期后,權(quán)益節(jié)點的選出不被部分節(jié)點掌握,其他節(jié)點仍然有機會成為權(quán)益節(jié)點,即在一定周期后節(jié)點之間的競爭權(quán)益節(jié)點依靠的資源分布是否聚集于某一部分節(jié)點。本節(jié)從理論層面分析PoT 和CRT-PoT的抗壟斷化性,比較PoT 和CRT-PoT 中擁有更多資源的節(jié)點和普通節(jié)點成功競選權(quán)益節(jié)點的概率比ρ隨著共識周期的變化。
在PoT 的起始周期0 中,若總共有n個競選節(jié)點,每個節(jié)點的未花費的satoshi 幣的分別為(coin1,coin2,…,coinn),要從中選出m個權(quán)益節(jié)點。根據(jù)PoT 的競選規(guī)則,每個競選節(jié)點被選中的概率為:
根據(jù)式(14)可知,在PoT 剛開始時擁有更多幣的參與節(jié)點成為Stackholder 概率更大。上一周期就是Stackholder 的節(jié)點再次成為Stackholder 的概率為:
其中:是在周期0 內(nèi)每一時隙成功出塊后節(jié)點的代幣收益,K是本周期內(nèi)節(jié)點成功出塊的個數(shù),是m個權(quán)益節(jié)點的總代幣收益,sum(slot)是一周期內(nèi)的時隙總數(shù)。而前一周期的普通節(jié)點成為這周期Stackholder 的概率為:
由式(15)(16)可知,擁有更多資源的節(jié)點在起始周期獲得更高概率成為權(quán)益節(jié)點之后,再次成為權(quán)益節(jié)點的概率總是比普通節(jié)點的概率高,其概率比,由此看概率比其實就是資源比值。只要節(jié)點誠實出塊,起始擁有更多資源的節(jié)點成為權(quán)益節(jié)點的概率總會高于普通節(jié)點,積累代幣收益越來越多,最終ρ會越來越小,形成壟斷化。
在CRT-PoT 起始周期0 中,成為權(quán)益節(jié)點的方法是依靠簡單的工作量證明,擁有更多算力資源的節(jié)點能獲得更多機會,每個參與節(jié)點被選中的概率為:
其中cali為節(jié)點i的算力資源。在起始周期之后,節(jié)點通過自身積累的誠實行為記錄獲得其他節(jié)點的投票,記錄越多,被投的機會越大。起始周期當選權(quán)益節(jié)點的節(jié)點再次成為權(quán)益節(jié)點的概率為:
由此可知,在PoT 中擁有更多資源的節(jié)點在后期成為權(quán)益節(jié)點的概率會越來越大,資源節(jié)點和普通節(jié)點的競選成功的概率比值ρ越來越小,而CRT-PoT 中ρ會維持一個相對穩(wěn)定,普通節(jié)點有更公平的機會,因而能有效解決壟斷化的問題。
自私挖礦的原理就在于惡意礦工挖到區(qū)塊后,不立即將其公布出去,而是在這之后繼續(xù)挖礦,在某一段時間之后將一段連續(xù)的區(qū)塊公布,而此時誠實礦工挖到的區(qū)塊因為長度不夠,不能作為主鏈而作廢。長此以往,以吸引其他礦工加入,加大挖取私鏈的幾率。
對于這種攻擊,CRT-PoT 采用的是記賬上鏈權(quán)和挖塊權(quán)分開,礦工只需要通過簡單的數(shù)學難題挖到空塊,塊中的記賬權(quán),以及該塊是否能夠上主鏈由每一個周期的Stackholder節(jié)點們投票決定。一旦礦工一次性發(fā)布私鏈,Stackholder 節(jié)點們會判斷該區(qū)塊是否合法,決定是否投票,通過投票比重決定該塊是否最終能夠上鏈。對于惡意礦工來說,即使自己挖到的私鏈長度夠長,也不能確保一定能夠上鏈。
雙花攻擊就是字面上的意思就是一筆金額,花費兩次。其形成的原理就是若在區(qū)塊鏈中,有礦工同時挖到區(qū)塊,獲得該區(qū)塊的記賬權(quán)時,在區(qū)塊鏈上就會因此造成分叉,分成兩條鏈,只有出塊速度更高的分叉鏈才會形成主鏈。因此惡意節(jié)點在某區(qū)塊花費一筆金額后,在交易成功前,在該區(qū)塊上惡意分叉,重新構(gòu)造一筆新交易,那么該筆金額就會成功花費兩次。
在PoW 或是PoS 中,若能成功分叉,就得掌握51%的算力或是51%的幣齡。而在CRT-PoT 中,節(jié)點的記賬權(quán)不在礦工手中,在于競選成功的節(jié)點。區(qū)塊能否上鏈也是由競選成功的節(jié)點投票決定。因此,若想操控區(qū)塊鏈分叉,首先得至少得獲得門限t個投票節(jié)點的支持,成為Stackholder 節(jié)點;其次得操控至少2/3 的Stackholder 節(jié)點,支持該塊成功上鏈。在CRT-PoT 中分叉的難度是非常大的,若將t設(shè)置得足夠大,要想獲得這么多投票節(jié)點的支持,也是一個長期誠實行為的積累。其行為時時刻刻受到投票節(jié)點的監(jiān)督,一旦有惡意行為,將很難再次獲得投票節(jié)點的支持。對于理性節(jié)點來說,這將是得不償失的。
在PoW 中,礦工通過解決數(shù)學難題挖到區(qū)塊上鏈,從而獲得該區(qū)塊的記賬權(quán)。隨著區(qū)塊難度的增大,區(qū)塊產(chǎn)生的時延越大。在比特幣中,每隔大約10 min 產(chǎn)生一個區(qū)塊。為了保證區(qū)塊鏈系統(tǒng)安全,也不能以降低難度而提高區(qū)塊生成速度,因此在PoW 中,共識的時延是比較高的。
在PoS 中,仍然是解決數(shù)學難題,采用幣齡(持幣數(shù)量×持幣時間)使該數(shù)學難題的難度減小。雖然在一定程度解決了PoW 的問題,提高了時延,但極大依賴于幣齡。如果幣齡大,挖塊簡單;否則,其難度和PoW 也相差無幾。因此,PoS在一定程度上提高了共識速度,但卻治標不治本。
在CRT-PoT 中,只需解決一個簡單數(shù)學難題,礦工挖到空塊頭,區(qū)塊上鏈交由Stackholder 節(jié)點投票決定,而Stackholder 節(jié)點只要在線就能進行投票操作,其在線率又受到投票節(jié)點的監(jiān)督,大幅降低了共識時延。
從PoT 和本文的方案來看,共識總共可以分為三部分:權(quán)益節(jié)點選出、區(qū)塊挖出和區(qū)塊上鏈,為便于分析性能,其時間消耗分別取為:共識時延(conDelay)、權(quán)益節(jié)點選出時延(SDelay)、區(qū)塊挖出時延(GDelay)和區(qū)塊上鏈時延(VDelay)。由于都是讓礦工通過簡單的工作量證明挖出區(qū)塊頭后交由權(quán)益節(jié)點記賬,因此兩個方案中GDelay 是一樣的。對于區(qū)塊的上鏈時延,由于本共識機制是基于PoT 改進其權(quán)益節(jié)點的選出方案,因此設(shè)置VDelayCRT?PoT=VDelayPoT,本文就將PoT 和CRT-PoT 的共識時延對比著重于權(quán)益節(jié)點選出時延對比上,具體的分析如下:
PoT 的權(quán)益節(jié)點選出采用的是跟隨幣機制:每一周期,有意參與的節(jié)點將自己所有的未花費的satoshi 幣,即UTXO(Unspent Transaction Outputs)按字典的順序排序組成列表,系統(tǒng)通過將區(qū)塊頭的哈希值與當前要選的權(quán)益節(jié)點的序號值進行哈希得出x,遍歷列表直到找出最小的大于x的satoshi 幣屬于的節(jié)點。若列表中未花費satoshi 幣的記錄有e1 條,排序算法的時間復雜度為O(e12),加上在最壞的情況下至少需要遍歷全部列表才找出一個權(quán)益節(jié)點的情況,若總共參與了n個節(jié)點,其時間復雜度為nO(e1),由于e1 ?n,最終sDelayPoT=O(n2)。
在CRT-PoT 的投票選出權(quán)益節(jié)點模型中,起始周期0 簡單的基于算力挖礦其復雜度可視為O(1),因此這一期間的時間復雜度可忽略不計,權(quán)益節(jié)點選出的時延主要來自穩(wěn)定時期且投票機制的時延主要來源于計算的復雜度:
1)在節(jié)點的投票公私鑰生成期間,由式(1)(2)可知,一個節(jié)點有一次模冪運算(Kp),一次模乘運算(Km),節(jié)點加入或離開,由式(3)可知,節(jié)點加入或離開網(wǎng)絡時,信息的更新都是簡單的乘除計算,其復雜度都為O(1),可忽略不計。若有n個節(jié)點參與,則這一階段cal1=nKp+nKm。
2)在投票階段,由式(6)(8)可知,一個節(jié)點有一次模逆運算(Ki),兩次模乘運算。雖然在其他式中有普通的模運算,但相比起模乘、模冪和模逆運算,普通模運算算法簡單,時延可以忽略不計,因此若門限為t(t≤n),由于每個權(quán)益節(jié)點獲得的支持數(shù)不少于t,每個投票階段的tKi+2tKm≤cal2≤nKi+2nKm。
3)驗證階段,由式(11)可知,一個消息M驗證有兩次模冪運算,一次模乘運算,即cal3=2(n-s)Kp+(n-s)Km,其中s是投票節(jié)點數(shù)量,n-s為為競選節(jié)點的數(shù)量。
根據(jù)以上分析,最終投票機制的計算復雜度為:
根據(jù)快速冪取模算法Kp的時間復雜度為O(loge2),其中e2 為冪的大小,在本算法中近似于投票模型中的Primes 基礎(chǔ)數(shù)據(jù)的大小。模乘實際上相當于簡單的模冪,因此Km的時間復雜度也為O(loge3)(e3 ?e2),根據(jù)拓展歐幾里得求逆方法可得Ki的時間復雜度為O(loge4)(e2 綜上所得,在參與競選節(jié)點數(shù)的增加時,CRT-PoT 權(quán)益節(jié)點選出的時間相較于PoT 增長更緩慢,如圖3 所示。 圖3 PoT和CRT-PoT選出權(quán)益節(jié)點的時延趨勢Fig.3 Time delay trends of PoT and CRT-PoT in selecting stackholders 本實驗的實驗環(huán)境為Intel Core i5-6300HQ CPU 2.30 GHz 和12 GB 內(nèi)存,采用的操作系統(tǒng)為64 位Windows 10,測試工具有:Goland 2021.1、go1.16.2。 6.2.1 探究primes以及參與節(jié)點數(shù)對CRT-Election的影響 在CRT-PoT 的CRT-Election 模型中,投票節(jié)點的投票公私鑰以及競選節(jié)點最終得到的總簽名的安全性均取決于Primes 中的基礎(chǔ)數(shù)據(jù)位數(shù):其位數(shù)越大,投票節(jié)點的公私鑰以及總簽名的長度越長,在有惡意節(jié)點試圖破解密鑰以及偽造總簽名時的難度就越大,但與此同時也會帶來一個計算方面的時間消耗代價。與此同時,CRT-Election 模型的時間消耗還與參與節(jié)點數(shù)有關(guān),因此設(shè)置參與節(jié)點作為自變量,探究在不同的Primes 的基礎(chǔ)數(shù)據(jù)位數(shù)下,對CRT-PoT 的權(quán)益節(jié)點選出算法時延的影響。 實驗1 設(shè)置參與節(jié)點總數(shù)N分別為:5、10、15、20、25、30、35、40、45、50,參與節(jié)點中有N4 個競選節(jié)點。其中設(shè)置CRT-PoT 中Primes 的基礎(chǔ)數(shù)據(jù)位數(shù)分別為50、150、250。 由圖4 可知,在基礎(chǔ)位數(shù)相同下,隨著參與節(jié)點數(shù)的增多,柱形圖隨著節(jié)點數(shù)的橫向趨勢走向呈現(xiàn)一個線性趨勢。在同一參與節(jié)點數(shù)下,柱形圖的縱向漲勢隨著Primes 基礎(chǔ)數(shù)據(jù)的位數(shù)增多而大致均勻增長。因此,盡管CRT-PoT 的投票方案帶來了一定的計算開銷,但是其影響可控,整個系統(tǒng)也更加安全。同時,在實際的區(qū)塊鏈系統(tǒng)共識中,Primes 基礎(chǔ)位數(shù)并不是實時變動,在這種情況下,隨著參與節(jié)點數(shù)的增多,CRT-PoT 投票方案的時延可以認為是一個線性增長。 圖4 Primes中基礎(chǔ)數(shù)據(jù)的位數(shù)以及參與節(jié)點數(shù)對CRT-Election的影響Fig.4 Influence of the number of bits of basic data and the number of participating nodes in Primes on CRT-Election 為了保證投票密鑰的安全性與變化性,也可以定期通過合理調(diào)整Primes 的大小來提高系統(tǒng)的安全性或共識速度。 6.2.2 探究CRT-PoT的抗壟斷性 實驗2 設(shè)置相同的參與競選資源節(jié)點和普通節(jié)點,比較其資源比ρ隨著共識周期的變化來比較抗壟斷化,設(shè)置總共有10 個節(jié)點參與競選,10 個節(jié)點中,設(shè)置4 個資源節(jié)點,6個普通節(jié)點。其起始競爭資源分別為:5、5、5、5、1、1、1、1、1、1,若節(jié)點們都是誠實出塊,比較其資源比ρ隨時間的變化。 如圖5 所示,隨著周期數(shù)的變化,PoT 中資源比ρ的值越來越大,意味著資源節(jié)點和普通節(jié)點之間的資源差距越來越大,記賬權(quán)被起始擁有更多資源的節(jié)點掌握;而CRT-PoT 的資源比ρ隨著時間變化逐漸趨于1,較為穩(wěn)定。以上結(jié)果說明CRT-PoT 比PoT 有良好的抗壟斷性。需要說明的是,時間0 就是節(jié)點們參與區(qū)塊挖礦共識之前,資源節(jié)點和普通節(jié)點的資源差距比,就是實驗設(shè)置的起始競爭資源比。 圖5 PoT和CRT-PoT的抗壟斷性對比Fig.5 Antimonopoly comparison between PoT and CRT-PoT 6.2.3 探究CRT-PoT的共識性能 共識的過程是從礦工挖到區(qū)塊,選出記賬節(jié)點,記賬節(jié)點將交易寫入?yún)^(qū)塊,節(jié)點們對該區(qū)塊合法性檢驗,最后區(qū)塊上鏈的過程。在經(jīng)典共識機制中,PoW 和PoS 中的共識過程與CRT-PoT 在區(qū)塊挖礦難度,記賬節(jié)點的選出方式,以及上鏈方式均有差異,因此從全局共識角度設(shè)置多輪共識,探究隨著共識輪數(shù)的變化,經(jīng)典共識機制與CRT-PoT 的共識時延變化。本文方案基于PoT 的方案進行改進,因此將重點放在權(quán)益節(jié)點的選出方案上,探究隨著參與共識節(jié)點的數(shù)量變化,PoT 和CRT-PoT 的共識時延變化。 為了更加嚴謹?shù)厝嫣骄緾RT-PoT 的共識性能,本節(jié)將分為兩個實驗分別探究與經(jīng)典共識機制PoW、PoS 以及與PoT 的共識時延對比。 實驗3 與經(jīng)典共識機制的時延對比。 設(shè)置50 個節(jié)點參與共識,區(qū)塊挖塊的難度值Diff 為20,共進行20 輪共識,測試PoW、PoS、CRT-PoT 每輪的共識時延變化,總共測試數(shù)據(jù)10 組,求取平均值,如圖6 所示。 圖6 CRT-PoT和PoW、PoS不同共識輪數(shù)時的時延對比Fig.6 Time delay comparison of CRT-PoT,PoW and PoS with different numbers of consensus rounds 從圖6 可知,由于哈希碰撞的不確定性,PoS 和PoW 的波動比較大,但總體上呈現(xiàn)CRT-PoT 的時延要低于PoW 和PoS,處于一個較穩(wěn)定狀態(tài)。因為CRT-PoT 解決的是一個簡單的數(shù)學難題,其上鏈難度主要取決于Stackholder 節(jié)點,因此在第一輪選出Stackholder 節(jié)點時延波動較大,第一輪之后都趨于穩(wěn)定。 實驗4 與PoT 相比的時延對比。 設(shè)置參與節(jié)點總數(shù)N分別為:5、10、15、20、25、30、35、40、45、50,參與節(jié)點中有N4 個競選節(jié)點。其中設(shè)置CRTPoT 中Primes 的基礎(chǔ)數(shù)據(jù)位數(shù)為250,比較PoT 和CRT-PoT 的時延。 如圖7 所示,隨著參與競選節(jié)點數(shù)的增加,PoT 的時延增長率顯然快于CRT-PoT 的增長率。CRT-PoT 增長率始終呈緩慢的線性增長,而PoT 的增長率越來越大。CRT-PoT 的共識時延相較于PoT 有著顯著的下降,因此,在競選節(jié)點數(shù)比較多的時候,本文的方案更顯優(yōu)異。 圖7 PoT和CRT-PoT不同參與節(jié)點數(shù)時的時延對比Fig.7 Time delay comparison of PoT and CRT-PoT with different numbers of participating nodes 本文為解決PoT 存在的記賬權(quán)壟斷化以及競爭權(quán)益節(jié)點數(shù)量增多時共識時延增長較快的問題,在PoT 的基礎(chǔ)上提出了基于中國剩余定理投票模型的共識機制,即CRT-PoT。以投票機制以及多投機制來解決壟斷化問題,該機制也同時保證了共識時延隨著競選節(jié)點增多而增長緩慢。最后從理論和實驗的角度來證明本文方案在抗壟斷化和共識速度上優(yōu)于PoT 算法,更加適應如今的區(qū)塊鏈系統(tǒng)。 雖然本文提出的CRT-PoT 算法在記賬權(quán)抗壟斷化和共識效率上有優(yōu)勢,但是也存在一些其他方面的問題,如競爭機制誠信積累考慮的場景不夠、投票節(jié)點與權(quán)益節(jié)點之間誠信獎勵不夠細化等。未來將在這個方向繼續(xù)研究,考慮在一些博弈場景下,搭建誠信獎勵模型,以求能達到激勵節(jié)點的同時,讓節(jié)點的收益均衡。6 實驗分析
6.1 實驗環(huán)境
6.2 實驗內(nèi)容
7 結(jié)語