王 纘 田有亮 岳朝躍 張 鐸
1(貴州省公共大數據重點實驗室(貴州大學)貴陽 550025)2(貴州大學計算機科學與技術學院 貴陽 550025)3(貴州大學數學與統計學院 貴陽 550025)4(貴州大學密碼學與數據安全研究所 貴陽 550025)(vinheres@163.com)
近年來,隨著比特幣等虛擬貨幣持續火爆,區塊鏈技術的研究呈現出井噴式增長態勢,被譽為未來10年內最有可能提高人類社會生成力的新科技之一.2008年比特幣電子現金系統被提出[1],實現了真正意義上的去中心化可信任的P2P自組織網絡[2]交易平臺.在該文獻中,區塊鏈被描述為用于記錄比特幣交易的一種分布式賬本技術[3].該技術利用數字簽名技術實現點對點的交易,通過對交易和時間戳等信息進行隨機Hash,并將Hash結果利用工作量證明機制(proof of work,PoW)寫入一個可以無限延伸的鏈式數據結構中,并通過發放代幣(比特幣)來激勵全網節點共同維護區塊鏈系統.但是區塊鏈的應用不僅僅局限于比特幣等電子貨幣系統[4],現在人們在隱私保護[5]、物聯網[6]、供應鏈[7]、醫療健康[8]等眾多領域不斷進行區塊鏈應用場景的研究與應用開發.
區塊鏈是一種分布式的系統,系統中的所有節點共同保障該系統的正常運行.在這種分布式系統中,區塊鏈為解決網絡延時、傳輸錯誤、去中心化導致的數據分歧(拜占庭節點)等問題,需要一種共識機制來使各個節點達成共識,保證數據的最終一致性,其主要思想是解決區塊鏈分布式賬本的一致性和記賬權問題,其目標是使所有的誠實節點保存一致的區塊鏈賬本.由此可見,共識機制是區塊鏈技術的核心所在.
“共識機制”一詞近幾年被頻繁使用,其名主要由工作量證明機制而得來.隨著對分布式賬本一致性問題的不斷探索,很多算法被提出來,其中有很多算法回歸了對傳統分布式一致性算法的改進,其在算法思路上已經跳出了“證明”的語義,故可以進一步概括為共識機制.因此,可以將共識機制研究熱點概括為2個方向:傳統分布式一致性算法的改進算法和證明機制算法.如Paxos和Raft算法就是傳統分布式一致性算法的代表,它們一般不能直接作為區塊鏈的共識機制使用[9],這是由于其假設系統中每個節點都是誠實的、不作惡的,而實際的去中心化的區塊鏈網絡中,節點之間互不了解、互不信任,存在欺騙和作惡的可能.而在這種情況下,不得不提到適用于聯盟鏈的BPFT(practical Byzantine fault tolerance)算法[10],它可以在拜占庭節點數不超過全網節點數量1/3的情況下保障數據的一致性,但是其效率與參與共識的節點數量相關,并不適用于節點數量過多的公有區塊鏈系統,并不具備良好的擴展性;另一類是證明機制算法,如基于工作量證明的PoW共識算法[11-12],嚴重浪費資源(電力消耗),且長達10 min的交易確認時間使其不適用于中小額交易的場景;基于權益證明的PoS(proof of stake)共識算法,在2012年8月應用于電子貨幣系統點點幣(peercoin)[13],在其共識機制中,節點消耗的幣齡(代幣數量乘以擁有代幣時長)越多,其產生區塊的難度就越低。這也導致某些節點積累幣齡,長時間不參加記賬,同時較PoW算法也更容易引起區塊鏈分叉,而且其本質仍采用“挖礦”機制來產生區塊,同樣還面臨性能瓶頸;基于PoW和PoS算法的有機結合算法,如權益速度證明(proof of stake velocity,PoSV)[14]、燃燒證明(proof of burn,PoB)[15]、行動證明(proof of activity,PoA)[16]和2跳共識算法[17]等.為解決PoS中“屯幣”現象,2014年4月Ren提出了PoSV共識算法,在這份蝸牛幣(reddcoin,RDD)白皮書中,其改進了PoS中幣齡是時間的線性函數的問題,在PoSV算法前期使用PoW實現代幣分配,在后期則使用PoSV維護網絡長期安全;2014年5月基于PoW和PoS提出了PoB共識算法,并發行了Slimcoin.PoB共識算法通過“燃燒”礦工持有的Slimcoin(把Slimcoin發送至特定的無法找回的地址)來競爭新區塊的記賬權,燃燒的Slimcoin越多則挖到新區塊的可能性就越大;2014年12月提出的PoA共識機制,采用PoW挖出的部分代幣以抽獎的方式分發給所有活躍節點,而節點擁有的權益越高,其被抽中的概率也就越大,Bentov等人[16]不僅提出了PoA共識機制,還指出了PoW共識機制在比特幣系統后期帶來的“公地悲劇”問題,但并沒有結合博弈論給出分析與證明;2017年4月2跳共識被提出,其解決思路是在PoW算力的基礎上引入PoS權益,使得新區塊的產生依賴于誠實節點占有大多數的聯合資源(算力+權益).綜上而言,這些共識算法都致力于取長補短、解決PoW與PoS存在的能源消耗與安全風險問題,在能源消耗、安全風險、吞吐量與性能等方面都有所突破,但都沒有跳出“挖礦”式共識模式.
因此,本文針對比特幣系統后期可能出現的“公地悲劇”問題、系統的性能瓶頸及“挖礦”的資源消耗等問題,首先利用博弈論分析比特幣系統后期“公地悲劇”現象,在此基礎上提出了一種基于門限密碼方案[18]的共識機制(a consensus mechanism based on threshold cryptography,TCCM).在TCCM共識機制中,本文利用門限群簽名理論[19-21]構建了記賬節點保證金模型,獲得區塊鏈記賬權的節點可以通過該模型提交保證金,同時該模型也保證了保證金的安全.其次,本文還利用門限加解密理論[22-23]構造了區塊鏈記賬權競價模型,該模型通過節點競價的方式產生記賬節點,獲得記賬權的節點提交保證金來實現節點信用背書.最后,重構獎勵機制,讓收益能夠獎勵給存儲、驗證、傳播區塊的節點,使得更多的節點參與到共識的全過程中.
本文的主要貢獻有4個方面:
1)結合博弈論分析并證明了比特幣系統后期“公地悲劇”的存在性,解釋了“公地悲劇”所引發的比特幣系統后期的安全問題;
2)設計了基于門限群簽名方案的保證金模型,該模型不僅為節點能夠誠實地產生新區塊提供背書,也設計了一種特殊的交易形式以確保保證金的安全;
3)設計了基于門限加解密理論的區塊鏈記賬權競價模型,該模型使得節點通過競價拍賣的方式獲得記賬權,并能夠保證記賬節點產生的隨機性,有效地防止記賬權壟斷現象;
4)重構了區塊鏈的獎勵規則,使得越來越多的節點參與到共識的各個環節,能讓更多的非記賬節點通過系統獲利,解決了“公地悲劇”問題,新共識機制打破了原有的“挖礦”式共識模式,有效地降低了資源消耗.
在文獻[16]中,Bentov等人指出PoW共識機制在比特幣系統后期會導致“公地悲劇”問題,主要指:當區塊獎勵可以忽略不計時,即獎勵(幾乎)完全是交易費用組成,比特幣系統會出現顯著的利潤減少.由于節點存在自私的心理,都想盡可能不花費更多費用去使用系統的公共資源(礦工算力),比如轉賬、支付等.于是,使用者都不愿意把費用支付給“礦工”用于系統維護,大量低價值交易就不斷出現.這必然導致“礦工”挖出來的交易費越來越少,于是造成網絡算力下降,敵手攻擊成本降低,系統越來越不安全,越來越多的使用者(節點)離開,網絡節點數下降,直至整個比特幣網絡系統崩潰,這就是“公地悲劇”問題.為解決該問題,Bentov等人[16]認為礦工可以嘗試形成只接受高額交易的協議,設置每個塊中的交易傳遞的總價值上限、限制塊的大小等,但沒有從博弈論的角度給出分析.本文在此基礎上,結合博弈論具體分析并證明了比特幣系統的“公地悲劇”的存在性.
在區塊鏈系統中,假設有m個節點維護系統,且每個節點都是理性的參與者.gi∈[0,+)表示節點i產生的交易數量,代表m個節點每輪(1次共識過程)產生交易的總數;v表示每筆交易的交易費用.假設是v是G的函數,v=v(G).因為每筆交易至少有一定比特幣的交易費用才會吸引節點由于利益的驅使去進行“挖礦”,如若不然,整個比特幣系統的安全性就會受到挑戰.假設每輪系統存在最大的交易總數Gmax,當G

(1)
如圖1所示:

Fig.1 The fee for each transaction decreases as the total number of transactions increases圖1 每筆交易的交易費隨著交易總數增加而下降
在系統中,節點會根據收集的交易費總價值來確定是否競爭“挖礦”.假設進行Hash計算時,每筆交易的平均資源消耗為c,對于“挖礦”成功的節點s,其利潤函數為
(2)

(3)
其中,fail≠s.式(2)(3)的一階導數分別為

(4)

(5)

S′(g1,g2,…,gm)=ξ(pi×S(g1,g2,…,gm)+
(1-pi)×Q(g1,g2,…,gm)),i=1,2,…,m,
(6)
式(6)的最優化的一階條件是

(7)
式(7)可以解釋為增加一筆交易有正負2方面的效應,正的效應是這筆交易產生交易費v(G),負的效應是這筆交易會導致該輪每筆交易的交易費都降低.
m個節點一階條件定義了m個反應函數:
g*=gi(g1,…,gi-1,gi+1,…,gm),
i=1,2,…,m,
(8)
因為:

(9)

(10)
所以根據隱函數存在定理可得:

(11)

將m個節點的一階條件(即式(7))相加,可得:

(12)
系統最優的目標是最大化:

(13)
其中,?表示系統實際情況下參與“挖礦”的節點數量且滿足? 式(13)的最優化的一階條件為 v(G**)+G**v′(G**)=?c, (14) 這里,G**是比特幣系統最優的交易數量,比較整個系統最優(見式(14))與單個節點最優的一階條件(見式(12))可以看出,G*>G**,即系統實際運行時產生的交易數量過多,系統負荷過大,系統的礦工數量不足以滿足交易數量,公共資源(礦工算力)被過度使用,從而引起比特幣系統安全性的擔憂. 本節主要提出了節點保證金模型和區塊鏈記賬權競價模型. 為了防止參與共識節點的作弊、無故離線、頻繁分叉等拜占庭行為,本文提出了一種基于門限群簽名理論的保證金模型,旨在通過抵押保證金抑制節點的拜占庭行為,利用門限群簽名技術提高保證金的安全. 如圖2所示,該保證金系統模型的參與方包括:可信中心(trust center,TC)(這一般由區塊鏈系統監管機構負責);繳納保證金的節點ID0;簽名合成者(signature combiner,SC);保證金管理節點集合T={T1,T2,…,Tn},其身份信息分別為ID1,ID2,…,IDn.本文將繳納和退還保證金的行為看成是一種特殊的交易,在該交易中,由繳納保證金的節點ID0向T(由區塊鏈系統中多個節點構成)繳納保證金.每一位繳納保證金的節點需要通過對前一次交易(一般交易)和下一位擁有者(保證金管理者集合)的公鑰簽署一份隨機散列的數字簽名,并將這個簽名附加在保證金的末尾,那么保證金就提交給了T.當繳納保證金的節點誠實地完成了1輪或者多輪區塊鏈共識,由保證金管理者集合T對前一次交易(特殊的交易)和下一位擁有者(需返還保證金的節點ID0)利用門限群簽名技術簽署一份隨機散列的數字簽名,并將這個簽名附加在返回的保證金的末尾,保證金就返還給了之前繳納保證金的節點ID0. Fig.2 The schematic diagram of margin model圖2 保證金模型示意圖 該保證金模型包含保證金繳納和保證金退,對于繳納保證金部分與比特幣系統類似,只是將下一位擁有者的公鑰替換成金管理節點集合T的群公鑰gp,故不作詳細闡述;保證金退還部分利用了門限群簽名技術,在文獻[24]的方案基礎上做出了調整與修改,具體包含系統初始化、簽名、簽名驗證3個部分.每個部分具體為: 1)初始化setup(t,n) ① 設置系統參數 ② 設定相關密鑰及參數 ③ 密鑰分發 TC為保證金管理節點集合頒發另一部分私鑰,這一過程需要節點和TC交互執行: 首先,TC計算節點的另一部分私鑰: yi=f(IDi), (15) 將yi通過秘密通道發送給相應的節點,并廣播αiG的值. 節點接收到私鑰yi后,驗證: (16) 如果式(16)成立,節點則接收yi為其另一部分私鑰;反之,拒絕接收并要求TC重新生成另一部分私鑰. 至此,節點生成了私鑰di=xi+yi=xi+f(IDi),公鑰Di=diG,并公開節點公鑰Di和用戶身份信息IDi. 2)簽名 ① 節點生成份額簽名Sign(Ti,IDi,di,preTr,Df) 為了防止簽名被敵手追蹤,本文使用SC的公鑰PKSC加密自身的身份,同時選取一個隨機值Random使每次加密后的密文均不相同: (17) ② 合成門限群簽名Combine(ri,si,Di,preTr,Df) 本過程由簽名合成者SC完成,包括份額簽名驗證和簽名合成2個方面. 3)簽名驗證 其他節點接收到門限群簽名(R,S)后,根據z=h(preTr+Df)計算z,并驗證SG+z(gp+W)=R是否成立.如果成立則接收簽名,即將其放入交易池中;否則拒絕該門限群簽名,即拋棄該筆交易,意味著保證金返還失敗. 關于區塊鏈記賬權問題,本文考慮到區塊鏈網絡中可能存在拜占庭節點,提出了一種基于門限加密方案的記賬權競價模型,旨在通過參與共識的節點之間相互競價來產生區塊鏈的記賬節點,同時利用多方參與決策來抑制拜占庭節點的惡意行為. Fig.3 The bidding model of the right of accounting圖3 記賬權競價模型 記賬權競價模型如圖3所示,設參與共識節點集合U={U1,U2,…,Um},其身份信息分別為ID1,ID2,ID3,…,IDm,解密服務器節點集合T={T1,T2,T3,…,Tn},其中,T?U,且解密服務器集合即保證金節點集合,由n個解密服務器利用自己的私鑰聯合產生秘密份額和系統公鑰,參與共識的節點利用產生的系統公鑰加密競價金額得到密文,同時利用自己私鑰對密文和上一輪記賬節點編號的Hash值進行簽名,并在區塊鏈系統中廣播簽名和密文.當解密服務器節點收到密文和簽名,先根據密文驗證簽名的正確性,如果不正確,則丟棄簽名;如果正確,利用自己的秘密份額解密出解密因子,并在全網廣播解密因子,任何收到t個解密因子的解密服務器節點驗證解密因子的正確性后,就可以通過組合解密出競價金額.值得注意的是t>f,f為解密服務器節點集合中拜占庭節點個數,且假設: f<└(n-1)/3」. 與(k,n)門限加密方案類似,該記賬權競價模型由5個步驟組成: 1)系統初始化 設秘密選定一個大素數p,Fp表示有限域,E(a,b)為Fp上的橢圓曲線,G為橢圓曲線的基點,q為G的階(p,q為奇素數).公開E(a,b)和G.這與保證金模型初始化系統參數類似,橢圓曲線采用E. 2)設置秘密份額及公鑰 由Ti運行,每個解密服務節點執行步驟: ①Ti隨機選擇一個整數di?[1,q-1]作為私鑰,并計算公鑰Qi=diG. ②Ti產生隨機整數集{ai,k|k=1,2,…,t-1}?Fp且ai,t-1≠0,構造t-1次多項式: fi(x)=di+ai,1x+…+ai,1xt-1modq, (18) 其中,fi(0)=di. ③Ti計算fi(IDj)并發送給Tj(j≠i),fi(IDj)保留.同時計算并廣播驗證參數: aik=aikG,k∈{1,2,…,t-1}, (19) 當Tj(j≠i)接到其他n-1個解密服務器節點的廣播信息后,驗證fi(IDj)的有效性為 (20) 若式(20)成立,則fi(IDj)有效;否則Tj拒絕接收fi(IDj)并要求Pi重新發送. ④Ti收到其他n-1個解密服務器節點Tj發送的fi(IDj)之后,自己的秘密份額F(IDi)可計算為 (21) Ti計算Yi=F(IDi)Gmodq,并廣播Yi. ⑤ 由Lagrange插值法,利用公開信息Yi計算解密服務器節點組公鑰: (22) 公開解密服務器節點組公鑰y. 3)加密 將競價金額Mo(明文)映射為有限域FP上的一個元素M,并分割成2個部分M=m1+m2.設競價區塊鏈記賬權節點Ui. ①Ui選取一個隨機數k,1≤k≤q-1. ②Ui進行計算: c0=kG, (23) ③ 利用ECC進行簽名: σ=Sign(h((c0,(c1,c2)),IDpr),SKui), (24) 其中,SKui為競價節點的私鑰,h(·)為單向函數,IDpr為上一次記賬節點的編號. ④ 將密文CM=(c0,(c1,c2))和σ發送給T. 4)部分解密 由Ti運行,設T中t個解密服務器節點集合為W={T1,T2,…,Tt},W中的成員Ti收到密文CM后,計算: hashValue=h(CM,IDpr), (25) 通過解密簽名,得到: τ=Unsign(σ,Pu). (26) 比較hashValue和τ,如果不相等,則選擇丟棄密文CM與簽名σ;反之,Ti使用自己的秘密份額F(IDi),計算各自的解密因子Si: (27) 5)組合與比較 由W中的解密服務器節點運行.該步驟包括2個部分,驗證解密因子Si的真實性和組合Si恢復明文M. ①W中的節點彼此交換Si,并驗證解密因子Si的真實性: (28) 若式(28)成立,則Ti提交的Si是正確的,否則要求重新Ti重新發送解密因子. ② 當W中解密服務器收到t份正確的Si后,就按步驟計算m1和m2以此來解密明文M: (29) ③ 通過映射關系,根據M求得競價金額Mo. 本節主要從初始化、區塊構建、區塊驗證和區塊鏈組裝4個部分闡述共識機制(TCCM). 當節點收到新區塊并通過驗證(round輪共識結束),節點中的偽隨機數生成程序就會自動運行,并以round輪記賬節點的身份編號作為隨機種子從參與共識的節點中選出n個解密服務器節點,需要注意的是該程序產生的n個偽隨機值是在1~m(m為參與共識節點的個數)之間,具有良好的隨機性.因為隨機種子為round輪記賬節點的ID,所以產生的n個解密服務器節點具有一致性. 當round+1輪的記賬權競價正式開始后,決定競爭記賬權的節點們,通過區塊鏈記賬權競價模型提交報價金額.如算法1所示,當報價階段結束后,所有解密服務器節點i會廣播自己保存的最大的競價金額Moi(理論上可以是ε位小數,0<ε<+)和競價節點編號N,round輪記賬節點通過廣播收到這些競價金額和競價節點編號,選取最大的競價金額的節點,并通過簽名的形式提議獲得此次記賬權的節點.當解密服務器節點收到round輪記賬節點的提議后,如果發現它該報價金額的確是最大的(即該記賬金額大于等于它保存的競價金額),它也會繼續提議由自己重新簽名的信息.當round+1輪記賬節點接收到至少t條這樣的提議信息后,并驗證簽名的正確性后,就通過保證金模型提交保證金.需要注意的是,保證金金額一般要大于單個區塊交易總價值上限1/2,這也是為了保證交易的安全性并提高獲取記賬權的門檻.同時,當記賬節點沒有在規定的時間產生新區塊,round輪的記賬節點再次廣播競價金額次之的節點編號,以此類推,直至在提交保證金的情況下產生新區塊. 算法1.記賬權競價算法. /*廣播階段*/ ①Moi=節點i的報價金額; ② ifMoi為解密服務器節點Tx解密的最大金額then ③ 廣播 “Moi+競價節點編號N”+其簽名; ④ end if /*提議階段*/ ⑤ ifMoj為round輪記賬節點接收到最大金額then ⑥ 提議“Moj+競價節點編號N”+其簽名; ⑦ end if ⑧ if解密服務器節點Ty解密金額不大于Mojthen ⑨ 提議“Moj+競價節點編號N”+其簽名; ⑩ else 構建區塊是區塊數據的填充過程.本文將由節點產生的含有代幣的數據稱為“交易”.所有的節點都需要檢查交易的合法性,再將交易保存在交易池.本節首先定義了區塊頭的數據結構: nVersion,區塊版本號,4 B; hashPrevBlock,上一個區塊的區塊頭的Hash值,32 B; hashMerkleRoot,由區塊中所有交易構造的Merkle根,32 B; nTime,Unix時間戳,4 B. 為了避免比特幣后期會導致的“公地悲劇”問題,本文對區塊的交易填充做了詳細規定:1)設置每個區塊中交易傳遞的總價值上限;2)在滿足條件規定1的前提下,規定每個區塊中的交易總量不得超過G**.G**代表了系統最優情況下的交易量,即保證區塊鏈網絡安全的交易量. 由于區塊收入是整體網絡安全的基礎,在“公地悲劇”的情況下,系統安全性將會很弱.因此,維護健康的網絡需要一些協議執行的規則來保護參與共識的節點作為一個群體,例如設置每個塊中的交易量上限.如果適當選擇上限,礦工實際上可以通過這種上限獲得更多的收益,從而保證了區塊鏈系統的安全.通過這種方式使得塊空間成為稀少資源,交易費就會上漲;為了將交易填充到區塊中必須與其他節點競爭,并支付更高的交易費用.設置每個塊中的交易總量,使得記賬節點不能通過接受低收費交易來打破市場,因為記賬節點只能把這么多的交易放到塊中.同時,單筆交易的交易費具有波動性會導致交易的總費用是一個不確定的,即區塊收入不確定,節點無法準確估計競價金額Mo,這也給節點競爭區塊鏈記賬權帶來了挑戰. 當記賬節點完成了區塊數據的正確填充,就會立刻將新區塊發送給其所有相鄰節點.這些相鄰節點成功驗證并接受這個新區塊后,也會繼續以類似的方式傳播該區塊. 新區塊在網絡中以廣播的方式進行擴散,其驗證由節點獨立進行,確保只有有效的區塊才會在網絡中傳播,從而獲得獎勵.反之,由于區塊的無效性會導致節點失去獎勵,并扣押保證金.記賬節點的獎勵R: R=AllTrExp-Mo, (30) 其中,AllTrExp表示該區塊的交易費總價值,Mo表示競價金額,且新區塊的交易費總價值是由記賬節點自己獨立收集,由于網絡原因存在差異. 當節點收到新區塊時,它會按照標準驗證清單對該區塊進行一一核查,其標準一般包括: 1)驗證記賬節點的合法性.在提交保證金的前提下,通過執行區塊鏈記賬權競價模型中最后一步,利用收集到的廣播的解密因Si合成競價金額,核實競價金額的節點身份信息. 2)驗證區塊數據填充的有效性. 3)區塊大小在長度限制之內. 若沒有通過驗證,這個區塊將被拒絕,同時廣播所有驗證數據.當n個解密服務器節點中,有t個解密服務器節點通過對驗證數據的計算,發現該區塊是不合法的,這t個解密服務器節點就可以通過保證金模型,與參與共識的節點瓜分保證金.同時,重新產生記賬節點.反之,如果驗證通過了,本輪將通過保證金模型返還上一輪記賬節點的保證金,同時由參與共識的節點通過保證金模型分享競價金額. 需要注意的是,返回保證金的交易并沒有打包到當前區塊中,而是區塊鏈系統會在產生足夠多區塊后,才會觸發保證金模型返回保證金,這是為了保證記賬節點的誠實性,不會發起區塊鏈“分叉”攻擊而導致“雙花”問題. 同時,本文借鑒了“閃電網絡”的思想[25],只有參與共識的節點積累了足夠的獎勵,才會啟動保證金模型進行獎勵分發,這是為了減少區塊鏈網絡中小額交易數量,緩解節點的通信與計算壓力. 在區塊的裝配階段,主要是將新區塊裝配至區塊鏈主鏈中.當某個節點接收并驗證通過了新區塊,它會將新區塊連接到現有的區塊鏈上,將它們組裝起來.由于新共識機制明確規定了記賬節點,故不存區塊鏈的分叉問題,也就不存在由于分叉而導致的區塊鏈系統資源的浪費. 隨著越來越多的節點加入區塊鏈系統,單位時間的交易量也會持續增加,節點為了競爭區塊空間,勢必會提高交易費,區塊收入也會相應增加.由于區塊收入是整體網絡安全的基礎,區塊收入的增加必將帶來區塊鏈系統安全性的提高. 本節我們主要對TCCM共識機制的安全性進行分析,并從中小額交易、激勵機制等方面進行討論. 首先考慮2個節點競爭區塊鏈記賬權,i=1,2.令bi≥0是競價節點的競價金額,vi為該輪區塊的交易費總價值.由于各個節點收集的交易并不相同且不確定,所以對于不同競價節點vi是一個不確定的值,且任意倆競價節點都不知道對方的競價金額bi.但可以確定的是,vi(被標準化)在[0,1]區間均勻獨立分布,競價節點i的效用函數如下(如果2節點的競價金額相同,節點以等概率獲得記賬權): (31) 設節點i的出價bi(vi)是關于其價值vi的嚴格遞增可微函數.從理性前提出發,沒有節點愿意支付高于交易費總價值的競價金額,即bi>1≥vi不可能是最優的情況.由于該博弈是對稱的,故只需要考慮對稱出價戰略:b=b*(v).給定v和b,節點i的期望效用為 ui=(v-b)Prob(bj (32) 其中,bj是節點j的出價策略,Prob(·)代表bj 根據對稱性,bj=b*(vj),有: Prob{bjProb{vj (33) 這里Φ(b)=b*-1(b)是b*的逆函數(節點選擇b時他的價值是Φ(b)).在式(33)中,由于v在區間[0,1]均勻分布,Φ(b)∈[0,1],則Prob(vj<Φ(b))=Φ(b).因此,節點i面臨的問題是: (34) 最優化的一階條件是: -Φ(b)+(v-b)Φ′(b)=0. (35) 如果b*(·)是節點i的最優戰略,Φ(b)=v.因此: (Φ(b)-b)Φ′(b)=Φ(b), (36) 式(36)微分方程可以寫成: (37) 解式(37)偏微分方程可得: b*=v/2, (38) 如式(38)所示,這里的貝葉斯均衡為,每個節點的出價是它在該輪收集到的交易費總價值的一半.根據出價最高的節點獲得區塊鏈記賬權,去除競價金額,記賬節點還是獲得一半的交易費,這對于眾多驗證、存儲、傳播的節點來說是不公平的. 但是,節點出價與實際單個區塊的總交易費之間的差距隨著競價節點個數的增加而遞減.設有m個節點,每個節點開始對于vi是不確定的,但都在[0,1]區間上的均勻分布,如果最終收集到的交易費總價值vi的節點i出價為b,則期望效用函數為 (39) 最優化的一階條件為 -Φm-1(b)+(v-b)(m-1)Φm-2Φ′(b)=0, (40) 解式(40)微分得: (41) 如圖4所示(v=1),b*(v)隨著m的增加而增加.當m→時,b*→v.即參與共識的競價節點越多,記賬所花費的競價金額就越高.可見,當m趨于無窮時,記賬節點由于高昂的競價金額而幾乎分不到交易費. Fig.4 The trend of the bidding amount with the number of bidding nodes圖4 競價節點數量與競價金額變化趨勢 綜上,一方面,m趨于無窮這種情況也是不可能存在的,由于節點提交的保證金對于大多數節點來說是個門檻,很多節點沒有那么多保證金,所以會選擇參與驗證、存儲等非記賬過程.另一方面,更多節點參與競爭記賬權,競價金額就會越高,用于非記賬行為的獎勵就會越高,就會吸引更多的節點參與區塊的驗證、存儲等非記賬過程,有利于區塊鏈系統的利益分配.新的激勵機制會導致越來越多的節點參與共識過程,不會出現“節點少交易多”的情況,能達到抑制“公地悲劇”的目的,區塊鏈系統也會變得更加安全可靠. 抗“壟斷”性質主要是指競爭區塊鏈記賬權具有隨機性.以PoW算法為例,它并不具有良好的隨機性,主要是其記賬權依賴算力競爭,算力越來,獲得記賬權的概率就越大.至目前為止,全球大部分算力被礦池壟斷,全球前5的大礦池共計擁有超50%的算力.共識機制安全的一個關鍵因素就是記賬節點的隨機性(抗“壟斷”). 在TCCM共識機制中,由于每個節點都是自私且理性的,都希望用最小的代價獲得記賬權來使得自己利益最大化.在拍賣記賬權的過程中,競爭區塊記賬權的節點無法提前預知本輪共識的交易費總量且各個節點收集的交易費具有不確定性(見3.2節),所以節點無法準確給出競價金額Mo;其次Mo表示一個理論值是ε(0<ε<+)位小數,在一個合理區間有無數種可能.在這種理性前提下,這些都導致沒有節點可以壟斷記賬權. 在中小額交易方面,TCCM共識機制是PoW共識機制的良好擴展;對于大額交易,TCCM共識機制有所欠缺,這是由于保證金的金額只大于單個區塊交易總價值上限1/2,當單筆金額或者新區塊中某賬戶累計金額超過單個區塊交易總價值上限1/2時,出于安全考慮,仍采用PoW共識機制.幸運的是,在區塊鏈系統中大額交易很少,中小額交易占大多數,顯然依賴大量計算資源消耗的PoW共識機制并不適用,而TCCM共識機制在資源消耗方面更有優勢,且更適用于中小額交易的處理,有利于提高交易處理效率. TCCM共識機制改進了區塊鏈系統的激勵機制.在PoW共識機制中,交易費只支付給創建區塊的礦工,而傳播、驗證和存儲交易的成本是由網絡中的所有節點分擔,并沒有給予獎勵,這就導致礦工(礦池)盡可能自己保持每筆交易來收取費用,盡可能地避免傳播自己產生的交易.在TCCM共識機制中,雖然每個區塊都設置價值上限,但是對于解決“公地悲劇”問題幫助不大,因為整個用戶仍然希望發送大量的低價值交易.因此,3.3節考慮給予獎勵給每個參與共識驗證的節點,這使得節點更愿意參與節點驗證工作,進一步提高系統安全. 本文將從時間開銷、吞吐量等指標分析該共識機制的性能. 假設TMUL表示模乘法運算的時間開銷,TEC_MUL表示橢圓曲線上乘法運算的時間開銷,TEC_ADD表示橢圓曲線上加法運算的時間開銷,TH表示Hash運算的時間開銷,Tblock表示區塊產生時間.根據文獻[20],有TEC_MUL≈29TMUL,TEC_ADD≈0.12TMUL.由于模加法和模減法的計算開銷很低,可忽略不計.本文所提出的共識機制時間開銷為:歸還保證金Tmon、產生記賬節點Tacc、產生區塊Tblock.假設參與記賬權競爭的節點個數為J. 歸還保證金的開銷為 Tmon=(4t+2)TEC_MUL+2(t-1+2)TEC_ADD+ 產生記賬節點的時間開銷為 Tacc=(2+2t)JTEC_MUL+TH+(2t+1)JTEC_ADD= 則總的時間開銷為 Tsum=Tmon+Tacc+Tblock= 根據官方文檔和已有的測試,本文對比了PoW和PoS公有鏈共識算法與TCCM共識機制,如表1所示,發現TCCM共識機制在TPS、時延、交易確認時間、交易不可更改時間、資源消耗、時間復雜度等方面都具有優勢. Table 1 Performance Indicators of PoW,PoS,TCCM表1 PoW,PoS,TCCM性能指標 針對區塊鏈共識機制比較了PBFT算法和TCCM共識機制(解密服務器節點集合T在安全范圍內盡量小)的吞吐量.吞吐量是衡量系統單位時間內處理交易的能力.本文適用每秒交易數 (transac-tion per second,TPS)來表示.區塊鏈應用中交易吞吐量指單位時間內交易從產生到被確認并寫入區塊鏈中的交易總數: TPSΔt=SumTransactionsΔt/Δt, (42) 其中,Δt為交易產生到區塊被確認的時間間隔,即出塊時間;SumTransactionsΔt為該時間間隔內被確認區塊中包含的交易總數. 本文取Δ時間間隔分別為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共識機制一種良好的擴展.在新的共識機制中,設計的保證金模型既能夠保證記賬節點能誠實地產生區塊,也確保了保證金的安全轉移;設計的記賬權競價模型不但為競價拍賣提供了安全的環境,而且記賬節點的產生具良好的隨機性,有效地防止了記賬權壟斷.在此基礎上,本文重新設計了節點的激勵機制,利用記賬節點的競價金額對區塊驗證、傳播和存儲等活動進行獎勵,極大地維護了區塊鏈系統的安全,避免了“公地悲劇”問題.同時,TCCM共識機制能更好地處理中小額交易,極大地提高了區塊鏈系統的吞吐量,但TCCM在大額交易方面需要PoW協議的介入以保證交易安全,后續工作將對其改進與完善.2 系統模型
2.1 保證金模型








2.2 記賬權競價模型


(x1,y1)=k×y,
c1=(x1,m1)modp,
c2=(y1,m2)modp.
3 共識機制設計
3.1 初始化階段
3.2 區塊構建
3.3 區塊校驗
3.4 區塊裝配
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 總 結