王 纘 田有亮 岳朝躍 張 鐸
1(貴州省公共大數(shù)據(jù)重點實驗室(貴州大學)貴陽 550025)2(貴州大學計算機科學與技術學院 貴陽 550025)3(貴州大學數(shù)學與統(tǒng)計學院 貴陽 550025)4(貴州大學密碼學與數(shù)據(jù)安全研究所 貴陽 550025)(vinheres@163.com)
近年來,隨著比特幣等虛擬貨幣持續(xù)火爆,區(qū)塊鏈技術的研究呈現(xiàn)出井噴式增長態(tài)勢,被譽為未來10年內(nèi)最有可能提高人類社會生成力的新科技之一.2008年比特幣電子現(xiàn)金系統(tǒng)被提出[1],實現(xiàn)了真正意義上的去中心化可信任的P2P自組織網(wǎng)絡[2]交易平臺.在該文獻中,區(qū)塊鏈被描述為用于記錄比特幣交易的一種分布式賬本技術[3].該技術利用數(shù)字簽名技術實現(xiàn)點對點的交易,通過對交易和時間戳等信息進行隨機Hash,并將Hash結(jié)果利用工作量證明機制(proof of work,PoW)寫入一個可以無限延伸的鏈式數(shù)據(jù)結(jié)構(gòu)中,并通過發(fā)放代幣(比特幣)來激勵全網(wǎng)節(jié)點共同維護區(qū)塊鏈系統(tǒng).但是區(qū)塊鏈的應用不僅僅局限于比特幣等電子貨幣系統(tǒng)[4],現(xiàn)在人們在隱私保護[5]、物聯(lián)網(wǎng)[6]、供應鏈[7]、醫(yī)療健康[8]等眾多領域不斷進行區(qū)塊鏈應用場景的研究與應用開發(fā).
區(qū)塊鏈是一種分布式的系統(tǒng),系統(tǒng)中的所有節(jié)點共同保障該系統(tǒng)的正常運行.在這種分布式系統(tǒng)中,區(qū)塊鏈為解決網(wǎng)絡延時、傳輸錯誤、去中心化導致的數(shù)據(jù)分歧(拜占庭節(jié)點)等問題,需要一種共識機制來使各個節(jié)點達成共識,保證數(shù)據(jù)的最終一致性,其主要思想是解決區(qū)塊鏈分布式賬本的一致性和記賬權問題,其目標是使所有的誠實節(jié)點保存一致的區(qū)塊鏈賬本.由此可見,共識機制是區(qū)塊鏈技術的核心所在.
“共識機制”一詞近幾年被頻繁使用,其名主要由工作量證明機制而得來.隨著對分布式賬本一致性問題的不斷探索,很多算法被提出來,其中有很多算法回歸了對傳統(tǒng)分布式一致性算法的改進,其在算法思路上已經(jīng)跳出了“證明”的語義,故可以進一步概括為共識機制.因此,可以將共識機制研究熱點概括為2個方向:傳統(tǒng)分布式一致性算法的改進算法和證明機制算法.如Paxos和Raft算法就是傳統(tǒng)分布式一致性算法的代表,它們一般不能直接作為區(qū)塊鏈的共識機制使用[9],這是由于其假設系統(tǒng)中每個節(jié)點都是誠實的、不作惡的,而實際的去中心化的區(qū)塊鏈網(wǎng)絡中,節(jié)點之間互不了解、互不信任,存在欺騙和作惡的可能.而在這種情況下,不得不提到適用于聯(lián)盟鏈的BPFT(practical Byzantine fault tolerance)算法[10],它可以在拜占庭節(jié)點數(shù)不超過全網(wǎng)節(jié)點數(shù)量1/3的情況下保障數(shù)據(jù)的一致性,但是其效率與參與共識的節(jié)點數(shù)量相關,并不適用于節(jié)點數(shù)量過多的公有區(qū)塊鏈系統(tǒng),并不具備良好的擴展性;另一類是證明機制算法,如基于工作量證明的PoW共識算法[11-12],嚴重浪費資源(電力消耗),且長達10 min的交易確認時間使其不適用于中小額交易的場景;基于權益證明的PoS(proof of stake)共識算法,在2012年8月應用于電子貨幣系統(tǒng)點點幣(peercoin)[13],在其共識機制中,節(jié)點消耗的幣齡(代幣數(shù)量乘以擁有代幣時長)越多,其產(chǎn)生區(qū)塊的難度就越低。這也導致某些節(jié)點積累幣齡,長時間不參加記賬,同時較PoW算法也更容易引起區(qū)塊鏈分叉,而且其本質(zhì)仍采用“挖礦”機制來產(chǎn)生區(qū)塊,同樣還面臨性能瓶頸;基于PoW和PoS算法的有機結(jié)合算法,如權益速度證明(proof of stake velocity,PoSV)[14]、燃燒證明(proof of burn,PoB)[15]、行動證明(proof of activity,PoA)[16]和2跳共識算法[17]等.為解決PoS中“屯幣”現(xiàn)象,2014年4月Ren提出了PoSV共識算法,在這份蝸牛幣(reddcoin,RDD)白皮書中,其改進了PoS中幣齡是時間的線性函數(shù)的問題,在PoSV算法前期使用PoW實現(xiàn)代幣分配,在后期則使用PoSV維護網(wǎng)絡長期安全;2014年5月基于PoW和PoS提出了PoB共識算法,并發(fā)行了Slimcoin.PoB共識算法通過“燃燒”礦工持有的Slimcoin(把Slimcoin發(fā)送至特定的無法找回的地址)來競爭新區(qū)塊的記賬權,燃燒的Slimcoin越多則挖到新區(qū)塊的可能性就越大;2014年12月提出的PoA共識機制,采用PoW挖出的部分代幣以抽獎的方式分發(fā)給所有活躍節(jié)點,而節(jié)點擁有的權益越高,其被抽中的概率也就越大,Bentov等人[16]不僅提出了PoA共識機制,還指出了PoW共識機制在比特幣系統(tǒng)后期帶來的“公地悲劇”問題,但并沒有結(jié)合博弈論給出分析與證明;2017年4月2跳共識被提出,其解決思路是在PoW算力的基礎上引入PoS權益,使得新區(qū)塊的產(chǎn)生依賴于誠實節(jié)點占有大多數(shù)的聯(lián)合資源(算力+權益).綜上而言,這些共識算法都致力于取長補短、解決PoW與PoS存在的能源消耗與安全風險問題,在能源消耗、安全風險、吞吐量與性能等方面都有所突破,但都沒有跳出“挖礦”式共識模式.
因此,本文針對比特幣系統(tǒng)后期可能出現(xiàn)的“公地悲劇”問題、系統(tǒng)的性能瓶頸及“挖礦”的資源消耗等問題,首先利用博弈論分析比特幣系統(tǒng)后期“公地悲劇”現(xiàn)象,在此基礎上提出了一種基于門限密碼方案[18]的共識機制(a consensus mechanism based on threshold cryptography,TCCM).在TCCM共識機制中,本文利用門限群簽名理論[19-21]構(gòu)建了記賬節(jié)點保證金模型,獲得區(qū)塊鏈記賬權的節(jié)點可以通過該模型提交保證金,同時該模型也保證了保證金的安全.其次,本文還利用門限加解密理論[22-23]構(gòu)造了區(qū)塊鏈記賬權競價模型,該模型通過節(jié)點競價的方式產(chǎn)生記賬節(jié)點,獲得記賬權的節(jié)點提交保證金來實現(xiàn)節(jié)點信用背書.最后,重構(gòu)獎勵機制,讓收益能夠獎勵給存儲、驗證、傳播區(qū)塊的節(jié)點,使得更多的節(jié)點參與到共識的全過程中.
本文的主要貢獻有4個方面:
1)結(jié)合博弈論分析并證明了比特幣系統(tǒng)后期“公地悲劇”的存在性,解釋了“公地悲劇”所引發(fā)的比特幣系統(tǒng)后期的安全問題;
2)設計了基于門限群簽名方案的保證金模型,該模型不僅為節(jié)點能夠誠實地產(chǎn)生新區(qū)塊提供背書,也設計了一種特殊的交易形式以確保保證金的安全;
3)設計了基于門限加解密理論的區(qū)塊鏈記賬權競價模型,該模型使得節(jié)點通過競價拍賣的方式獲得記賬權,并能夠保證記賬節(jié)點產(chǎn)生的隨機性,有效地防止記賬權壟斷現(xiàn)象;
4)重構(gòu)了區(qū)塊鏈的獎勵規(guī)則,使得越來越多的節(jié)點參與到共識的各個環(huán)節(jié),能讓更多的非記賬節(jié)點通過系統(tǒng)獲利,解決了“公地悲劇”問題,新共識機制打破了原有的“挖礦”式共識模式,有效地降低了資源消耗.
在文獻[16]中,Bentov等人指出PoW共識機制在比特幣系統(tǒng)后期會導致“公地悲劇”問題,主要指:當區(qū)塊獎勵可以忽略不計時,即獎勵(幾乎)完全是交易費用組成,比特幣系統(tǒng)會出現(xiàn)顯著的利潤減少.由于節(jié)點存在自私的心理,都想盡可能不花費更多費用去使用系統(tǒng)的公共資源(礦工算力),比如轉(zhuǎn)賬、支付等.于是,使用者都不愿意把費用支付給“礦工”用于系統(tǒng)維護,大量低價值交易就不斷出現(xiàn).這必然導致“礦工”挖出來的交易費越來越少,于是造成網(wǎng)絡算力下降,敵手攻擊成本降低,系統(tǒng)越來越不安全,越來越多的使用者(節(jié)點)離開,網(wǎng)絡節(jié)點數(shù)下降,直至整個比特幣網(wǎng)絡系統(tǒng)崩潰,這就是“公地悲劇”問題.為解決該問題,Bentov等人[16]認為礦工可以嘗試形成只接受高額交易的協(xié)議,設置每個塊中的交易傳遞的總價值上限、限制塊的大小等,但沒有從博弈論的角度給出分析.本文在此基礎上,結(jié)合博弈論具體分析并證明了比特幣系統(tǒng)的“公地悲劇”的存在性.
在區(qū)塊鏈系統(tǒng)中,假設有m個節(jié)點維護系統(tǒng),且每個節(jié)點都是理性的參與者.gi∈[0,+)表示節(jié)點i產(chǎn)生的交易數(shù)量,代表m個節(jié)點每輪(1次共識過程)產(chǎn)生交易的總數(shù);v表示每筆交易的交易費用.假設是v是G的函數(shù),v=v(G).因為每筆交易至少有一定比特幣的交易費用才會吸引節(jié)點由于利益的驅(qū)使去進行“挖礦”,如若不然,整個比特幣系統(tǒng)的安全性就會受到挑戰(zhàn).假設每輪系統(tǒng)存在最大的交易總數(shù)Gmax,當G
(1)
如圖1所示:
Fig.1 The fee for each transaction decreases as the total number of transactions increases圖1 每筆交易的交易費隨著交易總數(shù)增加而下降
在系統(tǒng)中,節(jié)點會根據(jù)收集的交易費總價值來確定是否競爭“挖礦”.假設進行Hash計算時,每筆交易的平均資源消耗為c,對于“挖礦”成功的節(jié)點s,其利潤函數(shù)為
(2)
(3)
其中,fail≠s.式(2)(3)的一階導數(shù)分別為
(4)
(5)
S′(g1,g2,…,gm)=ξ(pi×S(g1,g2,…,gm)+
(1-pi)×Q(g1,g2,…,gm)),i=1,2,…,m,
(6)
式(6)的最優(yōu)化的一階條件是
(7)
式(7)可以解釋為增加一筆交易有正負2方面的效應,正的效應是這筆交易產(chǎn)生交易費v(G),負的效應是這筆交易會導致該輪每筆交易的交易費都降低.
m個節(jié)點一階條件定義了m個反應函數(shù):
g*=gi(g1,…,gi-1,gi+1,…,gm),
i=1,2,…,m,
(8)
因為:
(9)
(10)
所以根據(jù)隱函數(shù)存在定理可得:
(11)
將m個節(jié)點的一階條件(即式(7))相加,可得:
(12)
系統(tǒng)最優(yōu)的目標是最大化:
(13)
其中,?表示系統(tǒng)實際情況下參與“挖礦”的節(jié)點數(shù)量且滿足? 式(13)的最優(yōu)化的一階條件為 v(G**)+G**v′(G**)=?c, (14) 這里,G**是比特幣系統(tǒng)最優(yōu)的交易數(shù)量,比較整個系統(tǒng)最優(yōu)(見式(14))與單個節(jié)點最優(yōu)的一階條件(見式(12))可以看出,G*>G**,即系統(tǒng)實際運行時產(chǎn)生的交易數(shù)量過多,系統(tǒng)負荷過大,系統(tǒng)的礦工數(shù)量不足以滿足交易數(shù)量,公共資源(礦工算力)被過度使用,從而引起比特幣系統(tǒng)安全性的擔憂. 本節(jié)主要提出了節(jié)點保證金模型和區(qū)塊鏈記賬權競價模型. 為了防止參與共識節(jié)點的作弊、無故離線、頻繁分叉等拜占庭行為,本文提出了一種基于門限群簽名理論的保證金模型,旨在通過抵押保證金抑制節(jié)點的拜占庭行為,利用門限群簽名技術提高保證金的安全. 如圖2所示,該保證金系統(tǒng)模型的參與方包括:可信中心(trust center,TC)(這一般由區(qū)塊鏈系統(tǒng)監(jiān)管機構(gòu)負責);繳納保證金的節(jié)點ID0;簽名合成者(signature combiner,SC);保證金管理節(jié)點集合T={T1,T2,…,Tn},其身份信息分別為ID1,ID2,…,IDn.本文將繳納和退還保證金的行為看成是一種特殊的交易,在該交易中,由繳納保證金的節(jié)點ID0向T(由區(qū)塊鏈系統(tǒng)中多個節(jié)點構(gòu)成)繳納保證金.每一位繳納保證金的節(jié)點需要通過對前一次交易(一般交易)和下一位擁有者(保證金管理者集合)的公鑰簽署一份隨機散列的數(shù)字簽名,并將這個簽名附加在保證金的末尾,那么保證金就提交給了T.當繳納保證金的節(jié)點誠實地完成了1輪或者多輪區(qū)塊鏈共識,由保證金管理者集合T對前一次交易(特殊的交易)和下一位擁有者(需返還保證金的節(jié)點ID0)利用門限群簽名技術簽署一份隨機散列的數(shù)字簽名,并將這個簽名附加在返回的保證金的末尾,保證金就返還給了之前繳納保證金的節(jié)點ID0. Fig.2 The schematic diagram of margin model圖2 保證金模型示意圖 該保證金模型包含保證金繳納和保證金退,對于繳納保證金部分與比特幣系統(tǒng)類似,只是將下一位擁有者的公鑰替換成金管理節(jié)點集合T的群公鑰gp,故不作詳細闡述;保證金退還部分利用了門限群簽名技術,在文獻[24]的方案基礎上做出了調(diào)整與修改,具體包含系統(tǒng)初始化、簽名、簽名驗證3個部分.每個部分具體為: 1)初始化setup(t,n) ① 設置系統(tǒng)參數(shù) ② 設定相關密鑰及參數(shù) ③ 密鑰分發(fā) TC為保證金管理節(jié)點集合頒發(fā)另一部分私鑰,這一過程需要節(jié)點和TC交互執(zhí)行: 首先,TC計算節(jié)點的另一部分私鑰: yi=f(IDi), (15) 將yi通過秘密通道發(fā)送給相應的節(jié)點,并廣播αiG的值. 節(jié)點接收到私鑰yi后,驗證: (16) 如果式(16)成立,節(jié)點則接收yi為其另一部分私鑰;反之,拒絕接收并要求TC重新生成另一部分私鑰. 至此,節(jié)點生成了私鑰di=xi+yi=xi+f(IDi),公鑰Di=diG,并公開節(jié)點公鑰Di和用戶身份信息IDi. 2)簽名 ① 節(jié)點生成份額簽名Sign(Ti,IDi,di,preTr,Df) 為了防止簽名被敵手追蹤,本文使用SC的公鑰PKSC加密自身的身份,同時選取一個隨機值Random使每次加密后的密文均不相同: (17) ② 合成門限群簽名Combine(ri,si,Di,preTr,Df) 本過程由簽名合成者SC完成,包括份額簽名驗證和簽名合成2個方面. 3)簽名驗證 其他節(jié)點接收到門限群簽名(R,S)后,根據(jù)z=h(preTr+Df)計算z,并驗證SG+z(gp+W)=R是否成立.如果成立則接收簽名,即將其放入交易池中;否則拒絕該門限群簽名,即拋棄該筆交易,意味著保證金返還失敗. 關于區(qū)塊鏈記賬權問題,本文考慮到區(qū)塊鏈網(wǎng)絡中可能存在拜占庭節(jié)點,提出了一種基于門限加密方案的記賬權競價模型,旨在通過參與共識的節(jié)點之間相互競價來產(chǎn)生區(qū)塊鏈的記賬節(jié)點,同時利用多方參與決策來抑制拜占庭節(jié)點的惡意行為. Fig.3 The bidding model of the right of accounting圖3 記賬權競價模型 記賬權競價模型如圖3所示,設參與共識節(jié)點集合U={U1,U2,…,Um},其身份信息分別為ID1,ID2,ID3,…,IDm,解密服務器節(jié)點集合T={T1,T2,T3,…,Tn},其中,T?U,且解密服務器集合即保證金節(jié)點集合,由n個解密服務器利用自己的私鑰聯(lián)合產(chǎn)生秘密份額和系統(tǒng)公鑰,參與共識的節(jié)點利用產(chǎn)生的系統(tǒng)公鑰加密競價金額得到密文,同時利用自己私鑰對密文和上一輪記賬節(jié)點編號的Hash值進行簽名,并在區(qū)塊鏈系統(tǒng)中廣播簽名和密文.當解密服務器節(jié)點收到密文和簽名,先根據(jù)密文驗證簽名的正確性,如果不正確,則丟棄簽名;如果正確,利用自己的秘密份額解密出解密因子,并在全網(wǎng)廣播解密因子,任何收到t個解密因子的解密服務器節(jié)點驗證解密因子的正確性后,就可以通過組合解密出競價金額.值得注意的是t>f,f為解密服務器節(jié)點集合中拜占庭節(jié)點個數(shù),且假設: f<└(n-1)/3」. 與(k,n)門限加密方案類似,該記賬權競價模型由5個步驟組成: 1)系統(tǒng)初始化 設秘密選定一個大素數(shù)p,F(xiàn)p表示有限域,E(a,b)為Fp上的橢圓曲線,G為橢圓曲線的基點,q為G的階(p,q為奇素數(shù)).公開E(a,b)和G.這與保證金模型初始化系統(tǒng)參數(shù)類似,橢圓曲線采用E. 2)設置秘密份額及公鑰 由Ti運行,每個解密服務節(jié)點執(zhí)行步驟: ①Ti隨機選擇一個整數(shù)di?[1,q-1]作為私鑰,并計算公鑰Qi=diG. ②Ti產(chǎn)生隨機整數(shù)集{ai,k|k=1,2,…,t-1}?Fp且ai,t-1≠0,構(gòu)造t-1次多項式: fi(x)=di+ai,1x+…+ai,1xt-1modq, (18) 其中,fi(0)=di. ③Ti計算fi(IDj)并發(fā)送給Tj(j≠i),fi(IDj)保留.同時計算并廣播驗證參數(shù): aik=aikG,k∈{1,2,…,t-1}, (19) 當Tj(j≠i)接到其他n-1個解密服務器節(jié)點的廣播信息后,驗證fi(IDj)的有效性為 (20) 若式(20)成立,則fi(IDj)有效;否則Tj拒絕接收fi(IDj)并要求Pi重新發(fā)送. ④Ti收到其他n-1個解密服務器節(jié)點Tj發(fā)送的fi(IDj)之后,自己的秘密份額F(IDi)可計算為 (21) Ti計算Yi=F(IDi)Gmodq,并廣播Yi. ⑤ 由Lagrange插值法,利用公開信息Yi計算解密服務器節(jié)點組公鑰: (22) 公開解密服務器節(jié)點組公鑰y. 3)加密 將競價金額Mo(明文)映射為有限域FP上的一個元素M,并分割成2個部分M=m1+m2.設競價區(qū)塊鏈記賬權節(jié)點Ui. ①Ui選取一個隨機數(shù)k,1≤k≤q-1. ②Ui進行計算: c0=kG, (23) ③ 利用ECC進行簽名: σ=Sign(h((c0,(c1,c2)),IDpr),SKui), (24) 其中,SKui為競價節(jié)點的私鑰,h(·)為單向函數(shù),IDpr為上一次記賬節(jié)點的編號. ④ 將密文CM=(c0,(c1,c2))和σ發(fā)送給T. 4)部分解密 由Ti運行,設T中t個解密服務器節(jié)點集合為W={T1,T2,…,Tt},W中的成員Ti收到密文CM后,計算: hashValue=h(CM,IDpr), (25) 通過解密簽名,得到: τ=Unsign(σ,Pu). (26) 比較hashValue和τ,如果不相等,則選擇丟棄密文CM與簽名σ;反之,Ti使用自己的秘密份額F(IDi),計算各自的解密因子Si: (27) 5)組合與比較 由W中的解密服務器節(jié)點運行.該步驟包括2個部分,驗證解密因子Si的真實性和組合Si恢復明文M. ①W中的節(jié)點彼此交換Si,并驗證解密因子Si的真實性: (28) 若式(28)成立,則Ti提交的Si是正確的,否則要求重新Ti重新發(fā)送解密因子. ② 當W中解密服務器收到t份正確的Si后,就按步驟計算m1和m2以此來解密明文M: (29) ③ 通過映射關系,根據(jù)M求得競價金額Mo. 本節(jié)主要從初始化、區(qū)塊構(gòu)建、區(qū)塊驗證和區(qū)塊鏈組裝4個部分闡述共識機制(TCCM). 當節(jié)點收到新區(qū)塊并通過驗證(round輪共識結(jié)束),節(jié)點中的偽隨機數(shù)生成程序就會自動運行,并以round輪記賬節(jié)點的身份編號作為隨機種子從參與共識的節(jié)點中選出n個解密服務器節(jié)點,需要注意的是該程序產(chǎn)生的n個偽隨機值是在1~m(m為參與共識節(jié)點的個數(shù))之間,具有良好的隨機性.因為隨機種子為round輪記賬節(jié)點的ID,所以產(chǎn)生的n個解密服務器節(jié)點具有一致性. 當round+1輪的記賬權競價正式開始后,決定競爭記賬權的節(jié)點們,通過區(qū)塊鏈記賬權競價模型提交報價金額.如算法1所示,當報價階段結(jié)束后,所有解密服務器節(jié)點i會廣播自己保存的最大的競價金額Moi(理論上可以是ε位小數(shù),0<ε<+)和競價節(jié)點編號N,round輪記賬節(jié)點通過廣播收到這些競價金額和競價節(jié)點編號,選取最大的競價金額的節(jié)點,并通過簽名的形式提議獲得此次記賬權的節(jié)點.當解密服務器節(jié)點收到round輪記賬節(jié)點的提議后,如果發(fā)現(xiàn)它該報價金額的確是最大的(即該記賬金額大于等于它保存的競價金額),它也會繼續(xù)提議由自己重新簽名的信息.當round+1輪記賬節(jié)點接收到至少t條這樣的提議信息后,并驗證簽名的正確性后,就通過保證金模型提交保證金.需要注意的是,保證金金額一般要大于單個區(qū)塊交易總價值上限1/2,這也是為了保證交易的安全性并提高獲取記賬權的門檻.同時,當記賬節(jié)點沒有在規(guī)定的時間產(chǎn)生新區(qū)塊,round輪的記賬節(jié)點再次廣播競價金額次之的節(jié)點編號,以此類推,直至在提交保證金的情況下產(chǎn)生新區(qū)塊. 算法1.記賬權競價算法. /*廣播階段*/ ①Moi=節(jié)點i的報價金額; ② ifMoi為解密服務器節(jié)點Tx解密的最大金額then ③ 廣播 “Moi+競價節(jié)點編號N”+其簽名; ④ end if /*提議階段*/ ⑤ ifMoj為round輪記賬節(jié)點接收到最大金額then ⑥ 提議“Moj+競價節(jié)點編號N”+其簽名; ⑦ end if ⑧ if解密服務器節(jié)點Ty解密金額不大于Mojthen ⑨ 提議“Moj+競價節(jié)點編號N”+其簽名; ⑩ else 構(gòu)建區(qū)塊是區(qū)塊數(shù)據(jù)的填充過程.本文將由節(jié)點產(chǎn)生的含有代幣的數(shù)據(jù)稱為“交易”.所有的節(jié)點都需要檢查交易的合法性,再將交易保存在交易池.本節(jié)首先定義了區(qū)塊頭的數(shù)據(jù)結(jié)構(gòu): nVersion,區(qū)塊版本號,4 B; hashPrevBlock,上一個區(qū)塊的區(qū)塊頭的Hash值,32 B; hashMerkleRoot,由區(qū)塊中所有交易構(gòu)造的Merkle根,32 B; nTime,Unix時間戳,4 B. 為了避免比特幣后期會導致的“公地悲劇”問題,本文對區(qū)塊的交易填充做了詳細規(guī)定:1)設置每個區(qū)塊中交易傳遞的總價值上限;2)在滿足條件規(guī)定1的前提下,規(guī)定每個區(qū)塊中的交易總量不得超過G**.G**代表了系統(tǒng)最優(yōu)情況下的交易量,即保證區(qū)塊鏈網(wǎng)絡安全的交易量. 由于區(qū)塊收入是整體網(wǎng)絡安全的基礎,在“公地悲劇”的情況下,系統(tǒng)安全性將會很弱.因此,維護健康的網(wǎng)絡需要一些協(xié)議執(zhí)行的規(guī)則來保護參與共識的節(jié)點作為一個群體,例如設置每個塊中的交易量上限.如果適當選擇上限,礦工實際上可以通過這種上限獲得更多的收益,從而保證了區(qū)塊鏈系統(tǒng)的安全.通過這種方式使得塊空間成為稀少資源,交易費就會上漲;為了將交易填充到區(qū)塊中必須與其他節(jié)點競爭,并支付更高的交易費用.設置每個塊中的交易總量,使得記賬節(jié)點不能通過接受低收費交易來打破市場,因為記賬節(jié)點只能把這么多的交易放到塊中.同時,單筆交易的交易費具有波動性會導致交易的總費用是一個不確定的,即區(qū)塊收入不確定,節(jié)點無法準確估計競價金額Mo,這也給節(jié)點競爭區(qū)塊鏈記賬權帶來了挑戰(zhàn). 當記賬節(jié)點完成了區(qū)塊數(shù)據(jù)的正確填充,就會立刻將新區(qū)塊發(fā)送給其所有相鄰節(jié)點.這些相鄰節(jié)點成功驗證并接受這個新區(qū)塊后,也會繼續(xù)以類似的方式傳播該區(qū)塊. 新區(qū)塊在網(wǎng)絡中以廣播的方式進行擴散,其驗證由節(jié)點獨立進行,確保只有有效的區(qū)塊才會在網(wǎng)絡中傳播,從而獲得獎勵.反之,由于區(qū)塊的無效性會導致節(jié)點失去獎勵,并扣押保證金.記賬節(jié)點的獎勵R: R=AllTrExp-Mo, (30) 其中,AllTrExp表示該區(qū)塊的交易費總價值,Mo表示競價金額,且新區(qū)塊的交易費總價值是由記賬節(jié)點自己獨立收集,由于網(wǎng)絡原因存在差異. 當節(jié)點收到新區(qū)塊時,它會按照標準驗證清單對該區(qū)塊進行一一核查,其標準一般包括: 1)驗證記賬節(jié)點的合法性.在提交保證金的前提下,通過執(zhí)行區(qū)塊鏈記賬權競價模型中最后一步,利用收集到的廣播的解密因Si合成競價金額,核實競價金額的節(jié)點身份信息. 2)驗證區(qū)塊數(shù)據(jù)填充的有效性. 3)區(qū)塊大小在長度限制之內(nèi). 若沒有通過驗證,這個區(qū)塊將被拒絕,同時廣播所有驗證數(shù)據(jù).當n個解密服務器節(jié)點中,有t個解密服務器節(jié)點通過對驗證數(shù)據(jù)的計算,發(fā)現(xiàn)該區(qū)塊是不合法的,這t個解密服務器節(jié)點就可以通過保證金模型,與參與共識的節(jié)點瓜分保證金.同時,重新產(chǎn)生記賬節(jié)點.反之,如果驗證通過了,本輪將通過保證金模型返還上一輪記賬節(jié)點的保證金,同時由參與共識的節(jié)點通過保證金模型分享競價金額. 需要注意的是,返回保證金的交易并沒有打包到當前區(qū)塊中,而是區(qū)塊鏈系統(tǒng)會在產(chǎn)生足夠多區(qū)塊后,才會觸發(fā)保證金模型返回保證金,這是為了保證記賬節(jié)點的誠實性,不會發(fā)起區(qū)塊鏈“分叉”攻擊而導致“雙花”問題. 同時,本文借鑒了“閃電網(wǎng)絡”的思想[25],只有參與共識的節(jié)點積累了足夠的獎勵,才會啟動保證金模型進行獎勵分發(fā),這是為了減少區(qū)塊鏈網(wǎng)絡中小額交易數(shù)量,緩解節(jié)點的通信與計算壓力. 在區(qū)塊的裝配階段,主要是將新區(qū)塊裝配至區(qū)塊鏈主鏈中.當某個節(jié)點接收并驗證通過了新區(qū)塊,它會將新區(qū)塊連接到現(xiàn)有的區(qū)塊鏈上,將它們組裝起來.由于新共識機制明確規(guī)定了記賬節(jié)點,故不存區(qū)塊鏈的分叉問題,也就不存在由于分叉而導致的區(qū)塊鏈系統(tǒng)資源的浪費. 隨著越來越多的節(jié)點加入?yún)^(qū)塊鏈系統(tǒng),單位時間的交易量也會持續(xù)增加,節(jié)點為了競爭區(qū)塊空間,勢必會提高交易費,區(qū)塊收入也會相應增加.由于區(qū)塊收入是整體網(wǎng)絡安全的基礎,區(qū)塊收入的增加必將帶來區(qū)塊鏈系統(tǒng)安全性的提高. 本節(jié)我們主要對TCCM共識機制的安全性進行分析,并從中小額交易、激勵機制等方面進行討論. 首先考慮2個節(jié)點競爭區(qū)塊鏈記賬權,i=1,2.令bi≥0是競價節(jié)點的競價金額,vi為該輪區(qū)塊的交易費總價值.由于各個節(jié)點收集的交易并不相同且不確定,所以對于不同競價節(jié)點vi是一個不確定的值,且任意倆競價節(jié)點都不知道對方的競價金額bi.但可以確定的是,vi(被標準化)在[0,1]區(qū)間均勻獨立分布,競價節(jié)點i的效用函數(shù)如下(如果2節(jié)點的競價金額相同,節(jié)點以等概率獲得記賬權): (31) 設節(jié)點i的出價bi(vi)是關于其價值vi的嚴格遞增可微函數(shù).從理性前提出發(fā),沒有節(jié)點愿意支付高于交易費總價值的競價金額,即bi>1≥vi不可能是最優(yōu)的情況.由于該博弈是對稱的,故只需要考慮對稱出價戰(zhàn)略:b=b*(v).給定v和b,節(jié)點i的期望效用為 ui=(v-b)Prob(bj (32) 其中,bj是節(jié)點j的出價策略,Prob(·)代表bj 根據(jù)對稱性,bj=b*(vj),有: Prob{bjProb{vj (33) 這里Φ(b)=b*-1(b)是b*的逆函數(shù)(節(jié)點選擇b時他的價值是Φ(b)).在式(33)中,由于v在區(qū)間[0,1]均勻分布,Φ(b)∈[0,1],則Prob(vj<Φ(b))=Φ(b).因此,節(jié)點i面臨的問題是: (34) 最優(yōu)化的一階條件是: -Φ(b)+(v-b)Φ′(b)=0. (35) 如果b*(·)是節(jié)點i的最優(yōu)戰(zhàn)略,Φ(b)=v.因此: (Φ(b)-b)Φ′(b)=Φ(b), (36) 式(36)微分方程可以寫成: (37) 解式(37)偏微分方程可得: b*=v/2, (38) 如式(38)所示,這里的貝葉斯均衡為,每個節(jié)點的出價是它在該輪收集到的交易費總價值的一半.根據(jù)出價最高的節(jié)點獲得區(qū)塊鏈記賬權,去除競價金額,記賬節(jié)點還是獲得一半的交易費,這對于眾多驗證、存儲、傳播的節(jié)點來說是不公平的. 但是,節(jié)點出價與實際單個區(qū)塊的總交易費之間的差距隨著競價節(jié)點個數(shù)的增加而遞減.設有m個節(jié)點,每個節(jié)點開始對于vi是不確定的,但都在[0,1]區(qū)間上的均勻分布,如果最終收集到的交易費總價值vi的節(jié)點i出價為b,則期望效用函數(shù)為 (39) 最優(yōu)化的一階條件為 -Φm-1(b)+(v-b)(m-1)Φm-2Φ′(b)=0, (40) 解式(40)微分得: (41) 如圖4所示(v=1),b*(v)隨著m的增加而增加.當m→時,b*→v.即參與共識的競價節(jié)點越多,記賬所花費的競價金額就越高.可見,當m趨于無窮時,記賬節(jié)點由于高昂的競價金額而幾乎分不到交易費. Fig.4 The trend of the bidding amount with the number of bidding nodes圖4 競價節(jié)點數(shù)量與競價金額變化趨勢 綜上,一方面,m趨于無窮這種情況也是不可能存在的,由于節(jié)點提交的保證金對于大多數(shù)節(jié)點來說是個門檻,很多節(jié)點沒有那么多保證金,所以會選擇參與驗證、存儲等非記賬過程.另一方面,更多節(jié)點參與競爭記賬權,競價金額就會越高,用于非記賬行為的獎勵就會越高,就會吸引更多的節(jié)點參與區(qū)塊的驗證、存儲等非記賬過程,有利于區(qū)塊鏈系統(tǒng)的利益分配.新的激勵機制會導致越來越多的節(jié)點參與共識過程,不會出現(xiàn)“節(jié)點少交易多”的情況,能達到抑制“公地悲劇”的目的,區(qū)塊鏈系統(tǒng)也會變得更加安全可靠. 抗“壟斷”性質(zhì)主要是指競爭區(qū)塊鏈記賬權具有隨機性.以PoW算法為例,它并不具有良好的隨機性,主要是其記賬權依賴算力競爭,算力越來,獲得記賬權的概率就越大.至目前為止,全球大部分算力被礦池壟斷,全球前5的大礦池共計擁有超50%的算力.共識機制安全的一個關鍵因素就是記賬節(jié)點的隨機性(抗“壟斷”). 在TCCM共識機制中,由于每個節(jié)點都是自私且理性的,都希望用最小的代價獲得記賬權來使得自己利益最大化.在拍賣記賬權的過程中,競爭區(qū)塊記賬權的節(jié)點無法提前預知本輪共識的交易費總量且各個節(jié)點收集的交易費具有不確定性(見3.2節(jié)),所以節(jié)點無法準確給出競價金額Mo;其次Mo表示一個理論值是ε(0<ε<+)位小數(shù),在一個合理區(qū)間有無數(shù)種可能.在這種理性前提下,這些都導致沒有節(jié)點可以壟斷記賬權. 在中小額交易方面,TCCM共識機制是PoW共識機制的良好擴展;對于大額交易,TCCM共識機制有所欠缺,這是由于保證金的金額只大于單個區(qū)塊交易總價值上限1/2,當單筆金額或者新區(qū)塊中某賬戶累計金額超過單個區(qū)塊交易總價值上限1/2時,出于安全考慮,仍采用PoW共識機制.幸運的是,在區(qū)塊鏈系統(tǒng)中大額交易很少,中小額交易占大多數(shù),顯然依賴大量計算資源消耗的PoW共識機制并不適用,而TCCM共識機制在資源消耗方面更有優(yōu)勢,且更適用于中小額交易的處理,有利于提高交易處理效率. TCCM共識機制改進了區(qū)塊鏈系統(tǒng)的激勵機制.在PoW共識機制中,交易費只支付給創(chuàng)建區(qū)塊的礦工,而傳播、驗證和存儲交易的成本是由網(wǎng)絡中的所有節(jié)點分擔,并沒有給予獎勵,這就導致礦工(礦池)盡可能自己保持每筆交易來收取費用,盡可能地避免傳播自己產(chǎn)生的交易.在TCCM共識機制中,雖然每個區(qū)塊都設置價值上限,但是對于解決“公地悲劇”問題幫助不大,因為整個用戶仍然希望發(fā)送大量的低價值交易.因此,3.3節(jié)考慮給予獎勵給每個參與共識驗證的節(jié)點,這使得節(jié)點更愿意參與節(jié)點驗證工作,進一步提高系統(tǒng)安全. 本文將從時間開銷、吞吐量等指標分析該共識機制的性能. 假設TMUL表示模乘法運算的時間開銷,TEC_MUL表示橢圓曲線上乘法運算的時間開銷,TEC_ADD表示橢圓曲線上加法運算的時間開銷,TH表示Hash運算的時間開銷,Tblock表示區(qū)塊產(chǎn)生時間.根據(jù)文獻[20],有TEC_MUL≈29TMUL,TEC_ADD≈0.12TMUL.由于模加法和模減法的計算開銷很低,可忽略不計.本文所提出的共識機制時間開銷為:歸還保證金Tmon、產(chǎn)生記賬節(jié)點Tacc、產(chǎn)生區(qū)塊Tblock.假設參與記賬權競爭的節(jié)點個數(shù)為J. 歸還保證金的開銷為 Tmon=(4t+2)TEC_MUL+2(t-1+2)TEC_ADD+ 產(chǎn)生記賬節(jié)點的時間開銷為 Tacc=(2+2t)JTEC_MUL+TH+(2t+1)JTEC_ADD= 則總的時間開銷為 Tsum=Tmon+Tacc+Tblock= 根據(jù)官方文檔和已有的測試,本文對比了PoW和PoS公有鏈共識算法與TCCM共識機制,如表1所示,發(fā)現(xiàn)TCCM共識機制在TPS、時延、交易確認時間、交易不可更改時間、資源消耗、時間復雜度等方面都具有優(yōu)勢. Table 1 Performance Indicators of PoW,PoS,TCCM表1 PoW,PoS,TCCM性能指標 針對區(qū)塊鏈共識機制比較了PBFT算法和TCCM共識機制(解密服務器節(jié)點集合T在安全范圍內(nèi)盡量小)的吞吐量.吞吐量是衡量系統(tǒng)單位時間內(nèi)處理交易的能力.本文適用每秒交易數(shù) (transac-tion per second,TPS)來表示.區(qū)塊鏈應用中交易吞吐量指單位時間內(nèi)交易從產(chǎn)生到被確認并寫入?yún)^(qū)塊鏈中的交易總數(shù): TPSΔt=SumTransactionsΔt/Δt, (42) 其中,Δt為交易產(chǎn)生到區(qū)塊被確認的時間間隔,即出塊時間;SumTransactionsΔt為該時間間隔內(nèi)被確認區(qū)塊中包含的交易總數(shù). 本文取Δ時間間隔分別為50 s,60 s,100 s,300 s等不同時間間隔,每個時間間隔測試20~30次,取其均值作為共識機制的TPS值.如圖5所示,本文通過Matlab繪制了TPS隨著間隔變化的趨勢圖. Fig.5 Comparison of throughput between PBFT algorithm and TCCM consensus mechanism圖5 PBFT算法和TCCM共識機制的吞吐量比較 本文提出了一種基于門限密碼方案的共識機制,它是PoW共識機制一種良好的擴展.在新的共識機制中,設計的保證金模型既能夠保證記賬節(jié)點能誠實地產(chǎn)生區(qū)塊,也確保了保證金的安全轉(zhuǎn)移;設計的記賬權競價模型不但為競價拍賣提供了安全的環(huán)境,而且記賬節(jié)點的產(chǎn)生具良好的隨機性,有效地防止了記賬權壟斷.在此基礎上,本文重新設計了節(jié)點的激勵機制,利用記賬節(jié)點的競價金額對區(qū)塊驗證、傳播和存儲等活動進行獎勵,極大地維護了區(qū)塊鏈系統(tǒng)的安全,避免了“公地悲劇”問題.同時,TCCM共識機制能更好地處理中小額交易,極大地提高了區(qū)塊鏈系統(tǒng)的吞吐量,但TCCM在大額交易方面需要PoW協(xié)議的介入以保證交易安全,后續(xù)工作將對其改進與完善.2 系統(tǒng)模型
2.1 保證金模型
2.2 記賬權競價模型
(x1,y1)=k×y,
c1=(x1,m1)modp,
c2=(y1,m2)modp.3 共識機制設計
3.1 初始化階段
3.2 區(qū)塊構(gòu)建
3.3 區(qū)塊校驗
3.4 區(qū)塊裝配
4 安全性分析與討論
4.1 抗“公地悲劇”攻擊
4.2 抗“壟斷”性
4.3 討 論
5 性能分析
3tTMUL+(t+1+1)TH=
(119.24t+58)TMUL+(t+2)TH,
(58.12+58.24t)JTMUL+TH,
(119.24t+58+58.12J+58.24tJ)
TMUL+(t+3)TH+Tblock.6 總 結(jié)