王瑞錦,郭上銅,邱瑋鴻,張鳳荔
(電子科技大學(xué)信息與軟件工程學(xué)院 成都 610054)
區(qū)塊鏈作為一種分布式數(shù)據(jù)庫,最基本也是最核心的要求是所有的節(jié)點(diǎn)能對所保存的數(shù)據(jù)達(dá)成一致,因此共識機(jī)制一直是被研究的重點(diǎn)。區(qū)塊鏈共識算法[1-3]主要有工作量證明算法(proof-of-work,PoW)、權(quán)益證明算法(proof of stake, PoS)、股權(quán)權(quán)益證明算法(delegated proof-of-stake, DPoS)及拜占庭容錯(cuò)算法(practical Byzantine fault tolerance, PBFT)。其中,PBFT 算法不適用于節(jié)點(diǎn)規(guī)模龐大的公共鏈;DPoS 算法存在周期過長、不能及時(shí)清理惡意節(jié)點(diǎn)的問題;PoW 算法存在大量算力浪費(fèi)及電力浪費(fèi)的問題,同時(shí)在交易吞吐量、延遲、確認(rèn)時(shí)間等方面有較大缺陷;PoS 算法在一定程度上減輕了PoW 算法資源浪費(fèi)、出塊時(shí)間長等問題,但“幣齡”[4]的出現(xiàn)也帶來了“富者愈富”的問題,同時(shí)該算法對代幣有較大依賴。
現(xiàn)有的區(qū)塊鏈可以分為公有鏈、私有鏈及聯(lián)盟鏈3 類。在公有鏈中,節(jié)點(diǎn)可以自由地加入或退出,無需身份審核,如比特幣、以太坊等平臺。私有鏈搭建在本地,不做公開用途。聯(lián)盟鏈的節(jié)點(diǎn)接入需要獲得許可,能在一定程度上保證網(wǎng)絡(luò)中節(jié)點(diǎn)的可靠性。但現(xiàn)有的區(qū)塊鏈平臺幾乎都是相互獨(dú)立的,每一個(gè)平臺之間的數(shù)據(jù)不能相互傳遞,形成事實(shí)上的“信息孤島”,不僅造成資源浪費(fèi)也不利于區(qū)塊鏈整體行業(yè)的發(fā)展,跨鏈因此成為區(qū)塊鏈研究的一個(gè)重點(diǎn)方向。
針對上述情況,本文提出了一種基于信用投票共識機(jī)制(proof of vote and trust, PoVT)的跨鏈方案,并進(jìn)行了測試,結(jié)果表明PoVT 的交易處理性能有較大提高,同時(shí)對權(quán)益粉碎攻擊、賄賂攻擊及自私挖礦攻擊等都有較好的防御能力。本文的主要工作有:1) 構(gòu)建了一個(gè)主從多鏈的分層跨鏈模型,實(shí)現(xiàn)了從鏈與從鏈之間的數(shù)據(jù)跨鏈;2) 提出了一種基于信用投票機(jī)制的共識算法(PoVT),解決了PoS 共識可能出現(xiàn)的權(quán)益粉碎攻擊、“富者愈富”問題以及通過投票和隨機(jī)選擇出塊者的方式解決了通過算力競爭記賬權(quán)的問題;3) 從鏈的所有區(qū)塊信息在主鏈上通過PBFT 算法完成共識,保證了從鏈區(qū)塊信息的安全性和不可篡改性,實(shí)現(xiàn)從鏈到主鏈的單向數(shù)據(jù)傳遞。
PoW 算法通過算力競爭將記賬權(quán)分配給全網(wǎng)所有節(jié)點(diǎn),獲得記賬權(quán)的誠實(shí)節(jié)點(diǎn)能得到一定的數(shù)字貨幣作為貢獻(xiàn)算力等資源的獎(jiǎng)勵(lì)。但PoW 算法也浪費(fèi)了大量的算力與電力資源,且10 min 一個(gè)的出塊速度也限制了其商業(yè)價(jià)值。除此之外,PoW算法還容易遭到自私挖礦(selfish mining)[5]攻擊,攻擊者不需要掌握超過51%的算力,只需要掌握全網(wǎng)1/3 的算力即可發(fā)起攻擊。本文提出的基于信用投票機(jī)制的共識算法通過引入投票機(jī)制來決定記賬權(quán)的歸屬問題,解決了PoW 中自私挖礦、51%攻擊等問題,在保證系統(tǒng)的穩(wěn)定性與公平性的同時(shí)解決了由算力競爭帶來的資源浪費(fèi)等問題。
PoS 共識的出現(xiàn)對解決PoW 共識所消耗的大量算力與電力起到了一定的緩解作用,且加速出塊時(shí)間也能提高對交易的處理速度和吞吐量,但PoS 本質(zhì)上還是需要通過哈希運(yùn)算來競爭記賬權(quán),且“幣齡”的存在也降低了數(shù)字貨幣的流通性。對PoS 算法的研究有:文獻(xiàn)[6]提出了PoC(proof of credit)共識機(jī)制,在PoS 共識的基礎(chǔ)上引入信用值作為一種特殊的權(quán)益,通過提出的選舉人機(jī)制、自我審計(jì)機(jī)制以及混合激勵(lì)機(jī)制使系統(tǒng)能夠抵御雙花攻擊以及自私挖礦攻擊;文獻(xiàn)[7]提出了一種基于PoS 的抽獎(jiǎng)共識機(jī)制來選擇出塊者,節(jié)點(diǎn)將自己擁有的權(quán)益分成更小的單元,然后通過哈希算法得到一個(gè)哈希值,而擁有與哈希值最接近的單元的節(jié)點(diǎn)成為出塊節(jié)點(diǎn),通過這種方法徹底解決了PoS 本質(zhì)上還是要通過哈希運(yùn)算來競爭記賬權(quán)的缺點(diǎn),同時(shí)也增加了PoS 的可擴(kuò)展性。
PoS 通過引入“幣齡”來解決PoW 中的51%攻擊以及資源浪費(fèi)等問題。原理是,持幣越多的人越希望系統(tǒng)能夠穩(wěn)定從而使自己的利益不受損害,但“幣齡”的存在同樣也帶來一些問題,如持幣越多的人越容易得到記賬權(quán),導(dǎo)致“富者越富”,從而使得像權(quán)益粉碎攻擊、賄賂攻擊等更頻繁發(fā)生。而本文提出的基于信用投票機(jī)制的共識算法通過給節(jié)點(diǎn)賦予信用值的方式降低了權(quán)益的影響,同時(shí)也降低了上述攻擊對系統(tǒng)產(chǎn)生的影響。
本文提出了PoVT 共識算法。該共識通過引入投票機(jī)制和信用值,提高了共識效率的同時(shí)保證了系統(tǒng)的安全性。在此基礎(chǔ)上,構(gòu)建了一個(gè)從鏈基于PoVT 共識,主鏈基于PBFT 共識的主從多鏈分層跨鏈模型。
模型中的節(jié)點(diǎn)被分成4 種角色:普通節(jié)點(diǎn)No、投票節(jié)點(diǎn)Nv、生產(chǎn)節(jié)點(diǎn)Np、候補(bǔ)節(jié)點(diǎn)Nc、代表節(jié)點(diǎn)Nm。同時(shí)將時(shí)間劃分為一個(gè)個(gè)時(shí)間片段,每一個(gè)時(shí)間片為一個(gè)時(shí)隙,從鏈在每個(gè)時(shí)隙完成校驗(yàn)、出塊到上鏈的全過程,而一個(gè)周期則由許多個(gè)時(shí)隙組成,此外在每一個(gè)周期的最后一個(gè)時(shí)隙結(jié)束后,代表節(jié)點(diǎn)將該周期所有已確認(rèn)的區(qū)塊數(shù)據(jù)上傳至主鏈網(wǎng)絡(luò)中。在每一個(gè)周期開始前會根據(jù)節(jié)點(diǎn)的權(quán)益以及信用值(STrust 值)從希望參與共識的節(jié)點(diǎn)中選擇一些節(jié)點(diǎn)組成一個(gè)共識節(jié)點(diǎn)集合N={(A1,S1,STrust1), (A2,S2, STrust2), ···, (An,Sn, STrustn)}。該集合中的節(jié)點(diǎn)由生產(chǎn)節(jié)點(diǎn)、投票節(jié)點(diǎn)、候補(bǔ)節(jié)點(diǎn)3 種角色組成。其中生產(chǎn)節(jié)點(diǎn)從交易池中取出交易并打包組裝成區(qū)塊;投票節(jié)點(diǎn)對數(shù)據(jù)進(jìn)行驗(yàn)證并投票;候補(bǔ)節(jié)點(diǎn)負(fù)責(zé)在生產(chǎn)節(jié)點(diǎn)或投票節(jié)點(diǎn)因?yàn)槟承┰驘o法繼續(xù)提供服務(wù)時(shí),遞補(bǔ)成為該角色繼續(xù)行使使命,保證了系統(tǒng)的安全性與穩(wěn)定性。在集合N形成后,通過PoVT 共識來決定每一個(gè)時(shí)隙產(chǎn)生區(qū)塊的生產(chǎn)節(jié)點(diǎn)編號,同時(shí)在這個(gè)過程中通過運(yùn)行梅森旋轉(zhuǎn)算法[8]生成一個(gè)偽隨機(jī)數(shù)來產(chǎn)生組成主鏈的代表節(jié)點(diǎn)的編號。集合N中的節(jié)點(diǎn)允許同時(shí)擁有主鏈和從鏈的雙重身份,主鏈節(jié)點(diǎn)負(fù)責(zé)將其所在主體每一周期內(nèi)已被確認(rèn)的區(qū)塊數(shù)據(jù)上傳至主鏈網(wǎng)絡(luò)中,主鏈節(jié)點(diǎn)之間再通過PBFT 算法對數(shù)據(jù)達(dá)成共識,形成一條主鏈。系統(tǒng)的結(jié)構(gòu)如圖1 所示。
圖1 系統(tǒng)結(jié)構(gòu)圖
2.2.1 準(zhǔn)備階段
在集合N={(A1,S1, STrust1), (A2,S2, STrust2), ···,(An,Sn, STrustn)}中,節(jié)點(diǎn)的個(gè)數(shù)|N|=Nump+Numv+Numc,A為節(jié)點(diǎn)的公鑰地址,S為節(jié)點(diǎn)的權(quán)益,STrust 值為節(jié)點(diǎn)的信用值,Nump為生產(chǎn)節(jié)點(diǎn)的個(gè)數(shù),Numv為投票節(jié)點(diǎn)的個(gè)數(shù),Numc為候補(bǔ)節(jié)點(diǎn)的個(gè)數(shù)。將集合中的節(jié)點(diǎn)進(jìn)行編號,編號1~Nump的節(jié)點(diǎn)成為生產(chǎn)節(jié)點(diǎn),編號Nump+1~Nump+Numv的節(jié)點(diǎn)為投票節(jié)點(diǎn),剩下的個(gè)數(shù)為Numc的節(jié)點(diǎn)成為候補(bǔ)節(jié)點(diǎn),普通節(jié)點(diǎn)No不參與共識但需同步最新數(shù)據(jù)塊至本地。
2.2.2 基于投票和信用機(jī)制的PoVT 共識
PoVT 共識中的投票機(jī)制[9]避免了節(jié)點(diǎn)之間的算力競爭,引入的信用機(jī)制能夠保證參與共識的節(jié)點(diǎn)的可靠性,同時(shí)降低權(quán)益對記賬權(quán)分配的影響,從而增大對系統(tǒng)發(fā)起權(quán)益粉碎攻擊、雙花攻擊、自私挖礦攻擊等的難度。
1)共識流程
網(wǎng)絡(luò)中的普通節(jié)點(diǎn)產(chǎn)生交易數(shù)據(jù),① 在周期開始前,根據(jù)節(jié)點(diǎn)的權(quán)益及STrust 值形成一個(gè)共識節(jié)點(diǎn)集合。② 在集合中從范圍為(1, 2, ···, Nump)的生產(chǎn)節(jié)點(diǎn)中選擇編號與隨機(jī)數(shù)R相同的節(jié)點(diǎn)成為出塊節(jié)點(diǎn),該節(jié)點(diǎn)從交易池中取出一些交易打包并組裝成區(qū)塊,隨后將區(qū)塊廣播給投票節(jié)點(diǎn)并準(zhǔn)備接受投票節(jié)點(diǎn)的反饋消息。在這一階段,如果要產(chǎn)生的區(qū)塊是創(chuàng)世區(qū)塊的話,則R為1。如果為非創(chuàng)世區(qū)塊的話,隨機(jī)數(shù)由上一生產(chǎn)節(jié)點(diǎn)在生成新區(qū)塊的過程中產(chǎn)生。③ 投票節(jié)點(diǎn)在收到生產(chǎn)節(jié)點(diǎn)發(fā)出的區(qū)塊驗(yàn)證請求后,對區(qū)塊中的數(shù)據(jù)進(jìn)行驗(yàn)證,驗(yàn)證無誤后簽名并加蓋時(shí)間戳(timestamp),并廣播確認(rèn)信息。若發(fā)現(xiàn)數(shù)據(jù)有誤,則廣播一個(gè)拒絕消息。④ 生產(chǎn)節(jié)點(diǎn)在收到Numv/2+1 個(gè)投票節(jié)點(diǎn)的確認(rèn)消息后則表明已對該區(qū)塊達(dá)成共識,生成一個(gè)記錄此時(shí)時(shí)間的時(shí)間戳,然后對該區(qū)塊進(jìn)行后續(xù)的簽名、廣播等操作。反之,若網(wǎng)絡(luò)中存在超過Numv/2+1 個(gè)投票節(jié)點(diǎn)發(fā)出拒絕消息則判定該生產(chǎn)節(jié)點(diǎn)有惡意行為,立即取消該節(jié)點(diǎn)的共識資格并由編號為R+1的生產(chǎn)節(jié)點(diǎn)繼續(xù)進(jìn)行共識流程(若R+1>Nump,則從第一個(gè)生產(chǎn)節(jié)點(diǎn)開始),同時(shí)在候補(bǔ)節(jié)點(diǎn)中根據(jù)編號順序遞補(bǔ)成為新的生產(chǎn)節(jié)點(diǎn)。⑤ 每個(gè)被選擇的生產(chǎn)節(jié)點(diǎn)都被要求在一個(gè)時(shí)間Tb內(nèi)完成出塊,若超過這個(gè)時(shí)間還沒能完成出塊則由編號為R+1(若R+1>Nump,則從第一個(gè)生產(chǎn)節(jié)點(diǎn)開始)的生產(chǎn)節(jié)點(diǎn)繼續(xù)完成下一個(gè)區(qū)塊的產(chǎn)生。⑥ 在每一輪周期結(jié)束后,成功參與共識的節(jié)點(diǎn)會獲得STrust值獎(jiǎng)勵(lì)。相應(yīng)地,有惡意行為的節(jié)點(diǎn)也會受到降低STrust 值的懲罰,則該節(jié)點(diǎn)后續(xù)想要參與共識的難度增加。共識流程如圖2 所示。
圖2 共識流程圖
2)隨機(jī)數(shù)R的產(chǎn)生
除了生成創(chuàng)世區(qū)塊的R值默認(rèn)為1 之外,每一個(gè)生產(chǎn)節(jié)點(diǎn)生成區(qū)塊的同時(shí)也產(chǎn)生一個(gè)記錄在區(qū)塊中的隨機(jī)數(shù)R來決定誰是下一個(gè)生產(chǎn)節(jié)點(diǎn),隨機(jī)數(shù)R生成的過程如下:
生產(chǎn)節(jié)點(diǎn)在向投票節(jié)點(diǎn)提交區(qū)塊后同時(shí)收集投票節(jié)點(diǎn)的反饋消息,即Signature[i](1≤i≤Numv),同時(shí)根據(jù)時(shí)間戳TimeStamp 由式(1)得到Rsource:
通過這種方式隨機(jī)地選擇生產(chǎn)節(jié)點(diǎn),避免了當(dāng)前生產(chǎn)節(jié)點(diǎn)出于利益考慮而干擾下一生產(chǎn)節(jié)點(diǎn)的選擇,能夠有效地預(yù)防節(jié)點(diǎn)之間地共謀攻擊,也保證了共識過程的公平與穩(wěn)定。
信用機(jī)制通過綜合考慮一個(gè)節(jié)點(diǎn)的有效出塊數(shù)、有效投票數(shù)、參與度等因素,使用STrust 值來定量地描述一個(gè)節(jié)點(diǎn)的可信度,再結(jié)合節(jié)點(diǎn)本身的權(quán)益來決定節(jié)點(diǎn)是否能夠參與共識過程。
1) 節(jié)點(diǎn)有效出塊數(shù)。即生產(chǎn)節(jié)點(diǎn)在整個(gè)周期內(nèi)生成的有效區(qū)塊的數(shù)量。若一個(gè)生產(chǎn)節(jié)點(diǎn)在屬于它的時(shí)隙內(nèi)成功生成一個(gè)通過驗(yàn)證的區(qū)塊,則認(rèn)定該節(jié)點(diǎn)生成一個(gè)有效區(qū)塊。反之,為無效區(qū)塊。節(jié)點(diǎn)有效投票數(shù)γ 表示為:
2) 節(jié)點(diǎn)有效投票數(shù)。即節(jié)點(diǎn)在整個(gè)周期內(nèi)投出的有效票數(shù)。若節(jié)點(diǎn)在正確驗(yàn)證區(qū)塊及數(shù)據(jù)無誤后按要求簽名確認(rèn)則認(rèn)定為有效投票。與此同時(shí),若節(jié)點(diǎn)對某一區(qū)塊投出了確認(rèn)票,但在該時(shí)隙內(nèi)網(wǎng)絡(luò)中存在超過Numv/2+1 個(gè)拒絕消息,則認(rèn)定該節(jié)點(diǎn)的此次投票無效。節(jié)點(diǎn)的有效投票數(shù)表示為:
式中,Vis表示節(jié)點(diǎn)i在第s個(gè)時(shí)隙內(nèi)是否投出有效票,若是則為1,不是則為-1;m為該周期內(nèi)總的時(shí)隙數(shù);n為節(jié)點(diǎn)i在該周期內(nèi)實(shí)際參與的時(shí)隙數(shù);b(b∈[0,1])為權(quán)重。
3) 節(jié)點(diǎn)參與度。即節(jié)點(diǎn)參與交易的情況。節(jié)點(diǎn)參與度λ 可表示為:
式中,trans表示的是節(jié)點(diǎn)i在第s個(gè)時(shí)隙內(nèi)產(chǎn)生的區(qū)塊中參與的交易數(shù),若節(jié)點(diǎn)i是交易發(fā)送者或接收者其中一方則為1,否則為0;f(f∈[0,1])為權(quán)重。
4) 歷史信用影響度。節(jié)點(diǎn)的歷史信用影響度是指節(jié)點(diǎn)的信用值受其歷史信用值與權(quán)益的影響。節(jié)點(diǎn)的歷史信用影響度ε 可表示為:
5) 懲罰因子。為確保系統(tǒng)能夠安全穩(wěn)定地運(yùn)行,需要采取措施對節(jié)點(diǎn)的一些惡意行為進(jìn)行懲罰。懲罰因子θ 表示為:
6) 節(jié)點(diǎn)信任度更新公式
周期結(jié)束后,系統(tǒng)會根據(jù)公式評價(jià)共識節(jié)點(diǎn)的行為,更新其信用值。信用值更新公式可表示為:
同時(shí),若節(jié)點(diǎn)因?yàn)樽鲪憾鴮?dǎo)致STrust 值降至系統(tǒng)設(shè)定的閾值以下,則會被限制為每隔若干個(gè)周期才能參與一次共識,且若節(jié)點(diǎn)持續(xù)作惡直至STrust 值降為0,則該節(jié)點(diǎn)將會永久喪失參與共識的資格。
主鏈節(jié)點(diǎn)從集合N中選擇,利用從鏈生產(chǎn)節(jié)點(diǎn)計(jì)算隨機(jī)數(shù)R的過程中得到的中間數(shù)據(jù)R′作為梅森旋轉(zhuǎn)算法(MT19937-32)的種子得到一個(gè)隨機(jī)數(shù)Rm,再從集合N中選擇編號與Rm相同的節(jié)點(diǎn)作為代表節(jié)點(diǎn)構(gòu)成主鏈。Rm的計(jì)算過程如下:
首先將R′作為種子賦值給MT[0],根據(jù)式(10)遞推得到剩下的623 個(gè)狀態(tài),完成全部624 個(gè)狀態(tài)的填充。
然后對得到的旋轉(zhuǎn)鏈進(jìn)行遍歷并根據(jù)式(11)對每一個(gè)狀態(tài)位進(jìn)行處理:
式中,m的取值為397;||表示將MT[i]的高1 位和MT[i+1]的低31 位組合,設(shè)組合后的數(shù)字為x,則xA的運(yùn)算規(guī)則為:
式中,|N|是指集合N中生產(chǎn)節(jié)點(diǎn)、投票節(jié)點(diǎn)、候補(bǔ)節(jié)點(diǎn)的數(shù)量總和。選取節(jié)點(diǎn)編號與Rm相同的節(jié)點(diǎn)成為主鏈節(jié)點(diǎn),再由主鏈節(jié)點(diǎn)構(gòu)建一條主鏈,完成主鏈上的事務(wù)處理。
在從鏈的生產(chǎn)節(jié)點(diǎn)生成了隨機(jī)數(shù)Rm后將之寫進(jìn)新生成的區(qū)塊中,在每一周期最后一個(gè)從鏈區(qū)塊產(chǎn)生后,集合N中所有編號與寫入各區(qū)塊中的Rm相同的節(jié)點(diǎn)成為代表節(jié)點(diǎn),代表節(jié)點(diǎn)將自己所在從鏈中已確認(rèn)的區(qū)塊數(shù)據(jù)上傳至主鏈網(wǎng)絡(luò)中,隨后參與共識并將主鏈區(qū)塊保存至本地。為了保證主鏈上保存的從鏈區(qū)塊數(shù)據(jù)都是真實(shí)完整、未被篡改的,代表節(jié)點(diǎn)在打包之前會檢查被上傳的從鏈區(qū)塊數(shù)據(jù)的上傳次數(shù),只有被不少于其所在從鏈中一半以上的代表節(jié)點(diǎn)上傳過的從鏈區(qū)塊數(shù)據(jù)才能被主鏈節(jié)點(diǎn)打包上鏈。當(dāng)主鏈節(jié)點(diǎn)確保所打包信息都符合要求后,在主鏈上通過PBFT 共識算法達(dá)成共識,完成信息在主鏈上的完整上鏈過程。
如圖1 所示,每一周期被選擇成為主鏈節(jié)點(diǎn)的各從鏈代表節(jié)點(diǎn)(P1、P2)會將自己所在從鏈本周期產(chǎn)生的區(qū)塊(A1、B1、C1、D1)上傳至主鏈網(wǎng)絡(luò)中,同時(shí)參與主鏈共識,在共識完成后各代表節(jié)點(diǎn)同樣保存主鏈區(qū)塊至本地網(wǎng)絡(luò)中,每一個(gè)代表節(jié)點(diǎn)(P1、P2)保存的主鏈區(qū)塊中都包含來自不同從鏈的區(qū)塊數(shù)據(jù)(A2、B2、A3、B3···)供其所在從鏈其余節(jié)點(diǎn)(A1、B1、C1、D1)查詢,從而完成不同從鏈之間的數(shù)據(jù)跨鏈。
在PoS 網(wǎng)絡(luò)中,擁有較低權(quán)益的節(jié)點(diǎn)挖出區(qū)塊的可能性同樣很低。另一方面,擁有較低權(quán)益的節(jié)點(diǎn)就更有可能去嘗試分叉,因?yàn)樵赑oS 網(wǎng)絡(luò)中節(jié)點(diǎn)產(chǎn)生區(qū)塊并不需要投入大量的算力等資源,即使分叉失敗也只是損失較小的權(quán)益,而一旦攻擊成功則能獲取大量利益。在PoVT 中,生產(chǎn)者只負(fù)責(zé)組裝區(qū)塊,還要經(jīng)過投票節(jié)點(diǎn)的確認(rèn)才能發(fā)布區(qū)塊,且一個(gè)時(shí)隙內(nèi)一個(gè)生產(chǎn)者最多只被允許產(chǎn)生一個(gè)區(qū)塊,所以攻擊者是無法發(fā)起權(quán)益粉碎攻擊的。
自私挖礦的攻擊者在挖出區(qū)塊后選擇不將挖出的區(qū)塊發(fā)布出去,而是在已挖出的區(qū)塊上繼續(xù)挖出新的區(qū)塊,當(dāng)自己的秘密分叉超過主鏈的長度時(shí),就將秘密分叉發(fā)布出來取代原來的主鏈成為新的最長鏈,使自己獲得更多的收益。這種攻擊不僅嚴(yán)重?fù)p害了原來主鏈上的誠實(shí)礦工的權(quán)利,而且還會造成數(shù)據(jù)丟失等危害區(qū)塊鏈穩(wěn)定性的情況。但在PoVT機(jī)制下,出塊者是在生產(chǎn)節(jié)點(diǎn)中通過投票機(jī)制隨機(jī)選擇出來的,同時(shí)生產(chǎn)節(jié)點(diǎn)的選擇則受到STrust值的影響,且生產(chǎn)節(jié)點(diǎn)如果不能在規(guī)定的時(shí)間內(nèi)產(chǎn)生區(qū)塊的話不僅得不到STrust 值的獎(jiǎng)勵(lì)反而STrust 值會下降,這樣導(dǎo)致節(jié)點(diǎn)之后成為共識節(jié)點(diǎn)的概率降低,從而使攻擊難以成功:
雙花攻擊是所有區(qū)塊鏈網(wǎng)絡(luò)都必須要解決的威脅。傳統(tǒng)的雙花攻擊的步驟是:1) 攻擊者發(fā)起一個(gè)交易;2) 在交易上鏈后,攻擊者在該交易之前的一個(gè)區(qū)塊上建立一個(gè)包含新交易的分叉;3) 而當(dāng)分叉的長度超過原主鏈時(shí),攻擊者將其發(fā)布從而取代原主鏈成為新的最長鏈,此時(shí)原交易被新的交易所取代。而在主從多鏈分層跨鏈系統(tǒng)中,從鏈的區(qū)塊數(shù)據(jù)不僅會被保存在從鏈節(jié)點(diǎn)上,還會通過代理節(jié)點(diǎn)上傳至主鏈中,在經(jīng)過主鏈共識后形成主鏈區(qū)塊保存至主鏈節(jié)點(diǎn)中。若想發(fā)起雙花攻擊,不僅需要改變從鏈的區(qū)塊信息,同時(shí)還要改變相應(yīng)的主鏈節(jié)點(diǎn)上的區(qū)塊信息,成本巨大,攻擊難以實(shí)現(xiàn)。
實(shí)驗(yàn)在Docker18.10 上搭建了一個(gè)從鏈基于PoVT,主鏈基于Fabric 的主從多鏈分層跨鏈原型系統(tǒng),實(shí)驗(yàn)的操作系統(tǒng)為Ubuntu18.04。實(shí)驗(yàn)的主要測試目的是測試該主從多鏈跨鏈分層共識機(jī)制的每秒交易處理速度、節(jié)點(diǎn)信用值增加以及節(jié)點(diǎn)作惡后信用值受到的懲罰。本文將實(shí)驗(yàn)的節(jié)點(diǎn)設(shè)置為11 個(gè),分別是5 個(gè)投票節(jié)點(diǎn)、4 個(gè)生產(chǎn)節(jié)點(diǎn)、2 個(gè)候補(bǔ)節(jié)點(diǎn),同時(shí)將一個(gè)周期劃分為10 個(gè)時(shí)隙,每個(gè)時(shí)隙經(jīng)歷出塊到上鏈的全過程。將STrust 的閾值設(shè)置為30,當(dāng)節(jié)點(diǎn)的STrust 值低于30 時(shí),設(shè)定為節(jié)點(diǎn)必須要每隔5 個(gè)周期才能參與以此共識。
為了能夠更加靈活地調(diào)整系統(tǒng)節(jié)點(diǎn)的信用值增長,本文對參與信用值評價(jià)的參數(shù)都設(shè)置了權(quán)重。每一輪周期參與共識的節(jié)點(diǎn)以及節(jié)點(diǎn)參與共識所扮演的角色都不盡相同,所以選取了某一個(gè)節(jié)點(diǎn)在不同的權(quán)重下參與共識的信用值增長。
如圖3 所示,本文權(quán)重分別取值為1、0.5、0.1??梢缘玫?,權(quán)重能對節(jié)點(diǎn)STrust 值的增長有一個(gè)較好的調(diào)節(jié),權(quán)重較高時(shí),節(jié)點(diǎn)的STrust 值能快速上升,最終達(dá)到設(shè)定的最大STrust 值300。同時(shí),隨著權(quán)重的減小,節(jié)點(diǎn)的STrust 值的增長變得緩慢,但最終也能達(dá)到最大值。這保障了不同節(jié)點(diǎn)規(guī)模的系統(tǒng)的穩(wěn)定性,當(dāng)節(jié)點(diǎn)規(guī)模較小時(shí),可以將權(quán)重加大,而在節(jié)點(diǎn)規(guī)模較大的網(wǎng)絡(luò)則將權(quán)重降低,這樣網(wǎng)絡(luò)中的節(jié)點(diǎn)的STrust 的增長速度能保持大致相同,不至于產(chǎn)生少數(shù)節(jié)點(diǎn)的STrust 值增長過快從而危及系統(tǒng)安全性和穩(wěn)定性的情況。
圖3 節(jié)點(diǎn)信用值增長
節(jié)點(diǎn)正常參與共識時(shí)STrust 值會保持一個(gè)增長的狀態(tài),但如果節(jié)點(diǎn)在參與共識時(shí)有作惡行為,如投票節(jié)點(diǎn)未能誠實(shí)投票及出塊節(jié)點(diǎn)打包的區(qū)塊中包含被篡改的交易等情況時(shí),節(jié)點(diǎn)會立即喪失本周期共識資格,同時(shí)在周期結(jié)束時(shí)受到STrust 值降低的懲罰。如圖4 所示,Δ 線表示節(jié)點(diǎn)正常參與共識時(shí)STrust 值的變化情況,可以看到在第40 個(gè)周期時(shí)節(jié)點(diǎn)的STrust 值達(dá)到最大值。*線在前15 個(gè)周期時(shí)正常參與共識,而在第15 個(gè)周期時(shí)節(jié)點(diǎn)開始作惡,這時(shí)節(jié)點(diǎn)的Strust 值快速下降到30 以下,此后節(jié)點(diǎn)被限制為每隔5 個(gè)周期才能參與一次共識,此時(shí)若節(jié)點(diǎn)還是持續(xù)作惡,當(dāng)STrust 值降至0 時(shí)節(jié)點(diǎn)將被永久剝奪參與共識的資格,而從●線可以看到節(jié)點(diǎn)在第35 個(gè)周期時(shí)開始正常參與共識,但直到第45 個(gè)周期才將STrust值升至30 以上,而此時(shí)正常參與共識的節(jié)點(diǎn)的STrust 早已達(dá)到最大值,所以由此可以看出節(jié)點(diǎn)若作惡,將付出巨大的STrust 值代價(jià),從而影響節(jié)點(diǎn)參與共識的難度,是一種得不償失的行為。
圖4 節(jié)點(diǎn)信任度懲罰對比
每秒交易處理量(transaction per second, TPS)即用區(qū)塊打包的交易數(shù)除以區(qū)塊的生成時(shí)間,系統(tǒng)的每秒交易處理量能夠衡量系統(tǒng)的交易處理性能。本文一共進(jìn)行了50 個(gè)周期共識,產(chǎn)生500 個(gè)區(qū)塊。實(shí)驗(yàn)中的以太坊網(wǎng)絡(luò)采用標(biāo)準(zhǔn)的設(shè)置,平均每15 s 生成一個(gè)區(qū)塊,同時(shí)設(shè)置從鏈的Tb值為10,即每10 s 產(chǎn)生一個(gè)區(qū)塊,實(shí)驗(yàn)結(jié)果如圖5 所示。在采用標(biāo)準(zhǔn)以太坊網(wǎng)絡(luò)中的TPS 平均值為49,而在采用PoVT 的單挑從鏈中的TPS 在60 左右波動(dòng),平均值為63。而在采用PBFT 共識的主鏈網(wǎng)絡(luò)中的TPS 在45 左右波動(dòng),平均值為47。可以看到采用PoVT 的從鏈的交易處理速度是要優(yōu)于以太坊網(wǎng)絡(luò)的以及整個(gè)跨鏈模型的交易處理速度是比較理想的。
圖5 節(jié)點(diǎn)每秒交易處理量
近年來,區(qū)塊鏈的發(fā)展取得了長足進(jìn)步。但單一的共識機(jī)制仍然存在一定程度的缺陷,并且單鏈形式已經(jīng)不足以滿足區(qū)塊鏈的發(fā)展。本文提出了一種基于信用投票機(jī)制的共識算法,能夠在避免算力競爭的條件下更加公平地分配節(jié)點(diǎn)的記賬權(quán),并且通過對節(jié)點(diǎn)賦予信用值來激勵(lì)節(jié)點(diǎn)積極參與共識,同時(shí)也能對節(jié)點(diǎn)的惡意行為做出相應(yīng)懲罰。但PoVT 共識仍然存在一些不足,下一步的工作將針對信用值調(diào)節(jié)以及交易處理速度穩(wěn)定性方面進(jìn)行優(yōu)化。
本文研究工作還得到網(wǎng)絡(luò)與數(shù)據(jù)安全四川省重點(diǎn)實(shí)驗(yàn)室開放課題(NDSMS201606)的資助,在此表示感謝。