摘要:本文對(duì)POW、POS、DPOS、PBFT共識(shí)算法的基本原理進(jìn)行闡述和分析,并分析其中一些共識(shí)算法的缺陷。共識(shí)算法是區(qū)塊鏈技術(shù)的關(guān)鍵技術(shù),在區(qū)塊鏈安全、效率等方面有著決定性的作用,它決定了區(qū)塊鏈中區(qū)塊的生成規(guī)則,常用的共識(shí)算法主要有POW、POS、DPOS、PBFT。
關(guān)鍵詞:區(qū)塊鏈;識(shí)算法;加密技術(shù)
2019年1月10日,國(guó)家互聯(lián)網(wǎng)信息辦公室發(fā)布《區(qū)塊鏈信息服務(wù)管理規(guī)定》。2019年10月24日,在中央政治局第十八次集體學(xué)習(xí)時(shí),習(xí)近平總書(shū)記強(qiáng)調(diào):“區(qū)塊鏈技術(shù)的集成應(yīng)用在新的技術(shù)和產(chǎn)業(yè)變革中起著重要的作用,我們要把區(qū)塊鏈作為核心技術(shù)自主創(chuàng)新的重要突破口,明確主攻方向,加大投入力度,著力攻克一批關(guān)鍵核心技術(shù),加快推動(dòng)區(qū)塊鏈技術(shù)和產(chǎn)業(yè)創(chuàng)新發(fā)展?!?/p>
“區(qū)塊鏈”技術(shù)已逐漸走入大眾的生活,成為社會(huì)的關(guān)注焦點(diǎn)。區(qū)塊鏈源于比特幣,利用加密鏈?zhǔn)絽^(qū)塊結(jié)構(gòu)存儲(chǔ)數(shù)據(jù),其中共識(shí)算法是區(qū)塊鏈技術(shù)的一個(gè)核心問(wèn)題,利用共識(shí)算法來(lái)生成、驗(yàn)證數(shù)據(jù),可以有效的解決互聯(lián)網(wǎng)上信任與價(jià)值的可靠傳遞難題。
1 區(qū)塊鏈的技術(shù)和發(fā)展
1.1 技術(shù)起源階段
通過(guò)網(wǎng)絡(luò)點(diǎn)對(duì)點(diǎn)技術(shù)U1區(qū)塊鏈上對(duì)等節(jié)點(diǎn)的網(wǎng)絡(luò)進(jìn)行連接。同時(shí),采用非對(duì)稱的加密算法,在加密算法中,公鑰和私鑰是成對(duì)出現(xiàn)的,但是由于加密和解密的密鑰不同,所以稱為非對(duì)稱算法,區(qū)塊鏈?zhǔn)褂眠@種算法保證節(jié)點(diǎn)間的保密通信。
1.2 區(qū)塊鏈1.0階段
在區(qū)塊鏈1.0階段中,主要特點(diǎn)是采用分布式賬本技術(shù),分布式賬本技術(shù)可以看作是一個(gè)可以在多個(gè)節(jié)點(diǎn)不同地理位置或者多個(gè)組織機(jī)構(gòu)組成的網(wǎng)絡(luò)數(shù)據(jù)庫(kù)。區(qū)塊鏈1.0采用塊鏈?zhǔn)降臄?shù)據(jù)結(jié)構(gòu),保證交易數(shù)據(jù)的防篡改。
1.3 區(qū)塊鏈2.0階段
采用一套數(shù)字形式的定義承諾,由計(jì)算機(jī)自動(dòng)執(zhí)行。承諾中包含合約參與者約定的權(quán)力和義務(wù),通過(guò)引入智能合約,使用者類似發(fā)起一筆轉(zhuǎn)賬交易,要求執(zhí)行指定合約的相關(guān)規(guī)則,從而使得區(qū)塊鏈系統(tǒng)演變成一個(gè)區(qū)中心的計(jì)算平臺(tái)。
區(qū)塊鏈技術(shù)目前已經(jīng)廣泛應(yīng)用到各個(gè)領(lǐng)域,在科學(xué)技術(shù)方面,區(qū)塊鏈可以協(xié)助很多學(xué)科解決科學(xué)技術(shù)的問(wèn)題,如區(qū)塊鏈+互聯(lián)網(wǎng),區(qū)塊鏈+密碼學(xué),區(qū)塊鏈+金融等等。從區(qū)塊鏈的應(yīng)用性來(lái)看,區(qū)塊鏈采用分布式的計(jì)算方式,實(shí)現(xiàn)賬本的共享和數(shù)據(jù)信息的共享。使用區(qū)塊鏈技術(shù),實(shí)現(xiàn)信息的不再是中心化,數(shù)據(jù)信息安全性提高、保證數(shù)據(jù)的公開(kāi)和透明等特點(diǎn)。從而使區(qū)塊鏈的安全性得到普遍的認(rèn)同。區(qū)塊鏈具有豐富的應(yīng)用場(chǎng)景,對(duì)于信息不對(duì)稱的問(wèn)題,區(qū)塊鏈技術(shù)采用兩套加密技術(shù),公共數(shù)據(jù)可以透明化進(jìn)行實(shí)現(xiàn)。
在區(qū)塊鏈系統(tǒng)中,共識(shí)算法具有重要作用。它不僅協(xié)助節(jié)點(diǎn)保持?jǐn)?shù)據(jù)一致,同時(shí)還對(duì)代幣發(fā)行,攻擊防范具有一定功能。從2009年第一個(gè)區(qū)塊鏈系統(tǒng)誕生至今,隨著區(qū)塊鏈技術(shù)的成熟,區(qū)塊鏈共識(shí)算法也在不斷發(fā)展與完善,到如今己演變出多種分支。
伴隨著區(qū)塊鏈產(chǎn)業(yè)的迅猛發(fā)展,區(qū)塊鏈的安全性逐漸得到區(qū)塊鏈應(yīng)用和研發(fā)人員的重視,區(qū)塊鏈技術(shù)的算法中,可以交易不再圍繞中心的機(jī)構(gòu),同時(shí)還能保證全網(wǎng)數(shù)據(jù)的一致性,從而實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)的交易,這些交易的規(guī)則設(shè)計(jì)顯得尤為重要。在區(qū)塊鏈技術(shù)的研究中,共識(shí)算法作為其技術(shù)的核心內(nèi)容,對(duì)區(qū)塊鏈的使用起著決定性的作用,其中包括區(qū)塊鏈的安全、效率等方面。
2 區(qū)塊鏈的特征
區(qū)塊鏈具有去中心化的特點(diǎn),說(shuō)明區(qū)塊鏈不再以中心節(jié)點(diǎn)為主要依賴對(duì)象,對(duì)數(shù)據(jù)實(shí)現(xiàn)分布式的記錄方式,同時(shí)對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)和更新。在傳統(tǒng)的網(wǎng)絡(luò)中,以中心化為技術(shù)特征,業(yè)務(wù)的執(zhí)行要依賴于中心節(jié)點(diǎn)的可信性和穩(wěn)健性。在區(qū)塊鏈中,區(qū)塊鏈的分布式結(jié)構(gòu)使全網(wǎng)的節(jié)點(diǎn)進(jìn)行均勻分布,系統(tǒng)中的數(shù)據(jù)由全網(wǎng)共同進(jìn)行維護(hù)。
區(qū)塊鏈中的所有公開(kāi)節(jié)點(diǎn)具有開(kāi)放性,任何節(jié)點(diǎn)可以通過(guò)公開(kāi)的接口進(jìn)行數(shù)據(jù)的查詢或者開(kāi)發(fā)應(yīng)用,整個(gè)系統(tǒng)是開(kāi)放的。
在區(qū)塊鏈系統(tǒng)中,公開(kāi)節(jié)點(diǎn)的信息所有的數(shù)據(jù)都可以被訪問(wèn),但交期時(shí)的私有信息時(shí)通過(guò)哈希函數(shù)加密處理的,所以數(shù)據(jù)交換和交易時(shí)在匿名的情況下進(jìn)行的。
區(qū)塊鏈技術(shù)采用兩套加密技術(shù),用來(lái)防止區(qū)塊鏈中的記錄被篡改。一套是默克爾樹(shù)的方式進(jìn)行記錄;另一套是在創(chuàng)建新的區(qū)塊前放入一個(gè)哈希值。這兩種加密機(jī)制使區(qū)塊鏈中的數(shù)據(jù)具有極高的穩(wěn)定性和可靠性。
從區(qū)塊鏈的開(kāi)放程度上看,區(qū)塊鏈可以分為聯(lián)盟鏈、私有鏈和公有鏈。如圖1所示,每個(gè)鏈中包含不同的算法,本文主要對(duì)共識(shí)算法中的公鏈進(jìn)行研究。伴隨著區(qū)塊鏈技術(shù)的不斷發(fā)展,區(qū)塊鏈中每種類型的鏈之間的界限也將變得模糊,隨著節(jié)點(diǎn)上運(yùn)行的智能合約越來(lái)越復(fù)雜,私有鏈上的節(jié)點(diǎn)有些必須開(kāi)放才能執(zhí)行相應(yīng)的業(yè)務(wù)邏輯,而部分的共識(shí)節(jié)點(diǎn)僅會(huì)向許可節(jié)點(diǎn)保證其開(kāi)放性,各鏈之間的業(yè)務(wù)界限會(huì)逐漸模糊。
3 共識(shí)算法的基本原理
3.1 工作量證明(POW,Proof of Work)
工作量證明是區(qū)塊鏈技術(shù)中較早產(chǎn)生的一種算法,在2009年最早的應(yīng)用到區(qū)塊鏈技術(shù)中。在區(qū)塊鏈技術(shù)中,工作量證明的主要的方法是節(jié)點(diǎn)間進(jìn)行算力的競(jìng)爭(zhēng)來(lái)分配記賬權(quán)和獎(jiǎng)勵(lì)。
工作量證明流程如圖2所示。
在工作量證明中,首先收集在一個(gè)區(qū)塊上產(chǎn)生的待確認(rèn)的交易,當(dāng)交易驗(yàn)證通過(guò)時(shí),將其計(jì)入節(jié)點(diǎn)內(nèi)存池,更新計(jì)算出交易的默克爾根值,寫(xiě)入到這個(gè)區(qū)塊的頭部信息,標(biāo)注區(qū)塊的版本號(hào)以及前一個(gè)區(qū)塊計(jì)算的哈希值、該區(qū)塊產(chǎn)生的近似時(shí)間、當(dāng)前的哈希值、隨機(jī)數(shù)等信息。根據(jù)隨機(jī)數(shù)的取值范圍,計(jì)算區(qū)塊頭部的哈希值,當(dāng)區(qū)塊頭部的哈希值小于或等于目標(biāo)值的時(shí)候,對(duì)這個(gè)區(qū)塊進(jìn)行打包并廣播,待其他節(jié)點(diǎn)驗(yàn)證后完成記賬。共識(shí)算法的區(qū)塊頭部信息如表1所示。
3.2 權(quán)益證明( POS,Proof of Stake)
在權(quán)益證明中,數(shù)字貨幣有了幣齡的概念:
幣齡一持有數(shù)量×持有時(shí)間
權(quán)益證明鼓勵(lì)比特幣的持有人增加比特幣的持有時(shí)間,并通過(guò)幣齡的概念,使區(qū)塊鏈的證明不再依靠工作量的計(jì)算。同時(shí),區(qū)塊鏈的價(jià)值越大,安全性越高,當(dāng)攻擊者想要對(duì)區(qū)塊鏈進(jìn)行攻擊時(shí),需要積攢大量的幣齡,從而增加了攻擊的難度,增加了區(qū)塊鏈的安全性。說(shuō)明在權(quán)益證明機(jī)制中,區(qū)塊鏈的價(jià)值與區(qū)塊鏈的安全性成正比。
3.3 股份授權(quán)證明機(jī)制( DPOS,Delegated Proof of Stake)
在上一個(gè)共識(shí)算法中,每個(gè)節(jié)點(diǎn)都可以根據(jù)自己擁有股份權(quán)益投票選取代表,整個(gè)網(wǎng)絡(luò)中,參與投票且獲得票數(shù)最多的節(jié)點(diǎn),將獲得記賬權(quán)。這些節(jié)點(diǎn)按照預(yù)先決定的順序,通過(guò)決定的順序產(chǎn)生區(qū)塊,同時(shí)獲得相應(yīng)的獎(jiǎng)勵(lì)。在獲得記賬權(quán)中,其節(jié)點(diǎn)需要繳納一定數(shù)量的保證金,且必須保證一定的在線時(shí)間,如果某個(gè)時(shí)刻需要此節(jié)點(diǎn)產(chǎn)生區(qū)塊,而該節(jié)點(diǎn)并未履行職責(zé),那么這個(gè)節(jié)點(diǎn)將會(huì)被取消記賬權(quán),系統(tǒng)繼續(xù)投票,選出新的節(jié)點(diǎn)代表來(lái)取代他。
3.4 拜占庭容錯(cuò)算法( BPFT,Delegated Proof of Stake)
拜占庭容錯(cuò)技術(shù)在分布式系統(tǒng)中,主要用于解決對(duì)應(yīng)結(jié)點(diǎn)的故障和傳輸錯(cuò)誤的問(wèn)題,在拜占庭容錯(cuò)算法中,應(yīng)用到視圖的概念,在每個(gè)視圖中,只需要定義一個(gè)主節(jié)點(diǎn),其他結(jié)點(diǎn)都定義為備份結(jié)點(diǎn),所有的結(jié)點(diǎn)都在相同的配置環(huán)境下運(yùn)行。其中,主節(jié)點(diǎn)負(fù)責(zé)將客戶端的請(qǐng)求進(jìn)行排序,并按照排序結(jié)果發(fā)送給備份結(jié)點(diǎn)。接收到排序結(jié)果后,此時(shí)備份結(jié)點(diǎn)需要檢查主節(jié)點(diǎn)發(fā)送的請(qǐng)求排序是否正常,如果發(fā)現(xiàn)異常,就會(huì)觸發(fā)試圖替換機(jī)制,更換下一個(gè)編號(hào)的結(jié)點(diǎn)作為主節(jié)點(diǎn),從而進(jìn)入到視圖。在拜占庭容錯(cuò)算法中,當(dāng)客戶端發(fā)出請(qǐng)求收到答復(fù)的流程圖如圖3所示。
4 共識(shí)算法的缺陷
在共識(shí)算法中,根據(jù)其算法的分析,存在著一些安全性或者擴(kuò)展性的不足,本文對(duì)幾種具有代表性的算法進(jìn)行討論。
4.1 拜占庭容錯(cuò)算法
拜占庭容錯(cuò)算法,通過(guò)異步通信機(jī)制達(dá)成共識(shí),同時(shí)由N個(gè)節(jié)點(diǎn)組成的異步網(wǎng)絡(luò)系統(tǒng)中,能容忍F個(gè)拜占庭故障節(jié)點(diǎn),其中F
4.2 工作量證明
工作量證明產(chǎn)生在區(qū)塊鏈的第一個(gè)階段中,在算法上,塊間隔時(shí)間較長(zhǎng),并且區(qū)塊間隔時(shí)間較長(zhǎng),導(dǎo)致交易確認(rèn)速度較慢。
哈希運(yùn)算是一種最常見(jiàn)的工作量證明機(jī)制。工作量證明機(jī)制主要利用哈希運(yùn)算,運(yùn)用其復(fù)雜度,給定初始的哈希值,進(jìn)行簡(jiǎn)單的值遞增運(yùn)算,利用哈希算法求解,直到找到滿足條件的碰撞值。不同的哈希算法求得的碰撞值長(zhǎng)度不同,所需工作量和安全性能也不同。碰撞值的長(zhǎng)度越長(zhǎng),則所需的工作量越大。對(duì)于同一個(gè)哈希算法,可以設(shè)定哈希值前N位為0的個(gè)數(shù)來(lái)調(diào)節(jié)運(yùn)算難度,比特幣就是根據(jù)這一原理調(diào)節(jié)挖礦難度的。工作量證明需要先確認(rèn)后共識(shí),這種方法要耗費(fèi)大量的算力,從而造成能源浪費(fèi),確認(rèn)時(shí)間長(zhǎng),交易吞吐量有限。
5 結(jié)論
本文主要對(duì)當(dāng)前區(qū)塊鏈技術(shù)的發(fā)展和特點(diǎn)進(jìn)行了闡述,并且對(duì)區(qū)塊鏈的關(guān)鍵技術(shù):共識(shí)算法進(jìn)行研究分析,闡述了四種主要的共識(shí)算法(POW、POS、DOPS和PBFT)的基本原理及各自的特點(diǎn),并對(duì)一些算法進(jìn)行了算法缺陷分析:
(1)拜占庭容錯(cuò)算法不適用于大型公有鏈網(wǎng)絡(luò)及網(wǎng)絡(luò)速度較低的網(wǎng)絡(luò)環(huán)境。
(2)工作量證明雖然算法簡(jiǎn)單,但是造成能源浪費(fèi)。
參考文獻(xiàn)
[1]馬小峰.區(qū)塊鏈技術(shù)原理與實(shí)現(xiàn)[M].機(jī)械工業(yè)出版社,2020 (01).
[2]黃宇翔,梁志宏,黃芯,孫永科.基于區(qū)塊鏈的供應(yīng)鏈可信數(shù)據(jù)管理[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2018 (12).
[3]邵奇峰,金澈清,張召,錢(qián)衛(wèi)寧,周傲英.區(qū)塊鏈技術(shù):架構(gòu)及進(jìn)展[J].計(jì)算機(jī)學(xué)報(bào),2018 (05).
作者簡(jiǎn)介
郭雨(1988-),女,吉林省人。碩士學(xué)位,吉林建筑科技學(xué)院助教。研究方向?yàn)樗惴ㄑ芯颗c分析。