統(tǒng)觀點認為,比特幣的挖礦協(xié)議是激勵相容的,它可以抵御少數(shù)群體的合謀攻擊,并激勵礦工按照協(xié)議規(guī)定的方式進行挖礦。比特幣挖礦協(xié)議之所以能實現(xiàn)這一效果,是由于它基本可以保證礦工根據(jù)其算力占全網(wǎng)算力的比例而獲得相匹配的收益。
激勵相容:在市場經(jīng)濟中,每個理性經(jīng)濟人都會有自利的一面,其個人行為會按自利的規(guī)則行為行動;如果能有一種制度安排,使行為人追求個人利益的行為,正好與企業(yè)實現(xiàn)集體價值最大化的目標(biāo)相吻合,這一制度安排,就是“激勵相容”的。
但Eyal等學(xué)者在文獻[2]中表達了不同的觀點,他們認為上述傳統(tǒng)觀點是錯誤的,比特幣的挖礦協(xié)議并非是激勵相容的。為了論證其觀點,作者提出了一個挖礦策略,該策略可以讓少數(shù)礦池獲得比他們誠實執(zhí)行挖礦協(xié)議更多的收益,而這一策略便是“自私挖礦”(Selfish Mining)。
“自私挖礦”攻擊是一種針對比特幣挖礦與激勵機制的攻擊方式,它的目的不是破壞比特幣的運行機制,而是獲取額外的獎勵,并讓誠實礦工進行無效計算。簡而言之,“自私挖礦”攻擊的核心思想是“自私挖礦”礦池(下文中簡稱為“惡意礦池”)故意延遲公布其計算得到的新塊,并構(gòu)造一條自己控制的私有分支,造成鏈的分叉。
誠實礦工會繼續(xù)基于公開分支挖礦,而惡意礦池則基于其控制的私有分支挖礦。倘若惡意礦池計算得到了更多的塊,它們維護的私有分支長度自然領(lǐng)先于公開分支,此時,惡意礦池選擇不公開這些新塊,力求進一步提高挖礦收益。
但由于惡意礦池的算力限制,私有分支的長度優(yōu)勢將無法一直保持下去,當(dāng)公開分支接近私有分支長度時,惡意礦池將公布所得到的新塊,并獲得這些塊的獎勵。該攻擊直接導(dǎo)致了誠實礦工之前的計算變?yōu)榱藷o效計算。
當(dāng)然,在攻擊過程中,無論是“自私挖礦”礦工(下文中簡稱為“惡意礦工”)還是誠實礦工都有進行無效計算的可能,只是誠實礦工浪費了更多的計算,而惡意礦工從收益上得到了回報。此外,為了獲取“超額”的挖礦獎勵,會有越來越多的“理性”礦工轉(zhuǎn)而加入惡意礦池。
攻擊策略與收益
首先我們假設(shè)初始狀態(tài)下,公開分支與惡意礦池構(gòu)造的私有分支長度相同。下面就對“自私挖礦”的攻擊策略以及對應(yīng)收益情況進行分析。(本章節(jié)圖片摘自文獻[3]或基于[3]中圖片進行修改,黑色部分代表公開分支,紅色部分代表惡意礦池維護的私有分支。其中紅色虛線方塊代表私有分支中未公開的塊,而紅色實線方塊則代表已公開的塊)
(1)當(dāng)公開分支長于私有分支時,倘若僅通過惡意礦工的挖礦努力,由于惡意礦池與全網(wǎng)其他礦工的總算力差距,私有分支能夠追上并超過公開分支的機會是很小的。因此,此時惡意礦池采取的策略是,根據(jù)公開分支的變化,動態(tài)地更新私有分支,使得兩條分支長度相同,并進而基于更新后的私有分支繼續(xù)挖礦。在該情況下,惡意礦池?zé)o法獲得收益。
(2)當(dāng)惡意礦工計算得到一個新塊,并使得私有分支比公開分支長度多1個塊時,惡意礦池將選擇不立即公開該新塊,而是基于私有分支繼續(xù)挖礦。此時會產(chǎn)生兩種可能的情況。
a) 在情況一中,誠實礦工基于公開分支計算得到了下一個新塊。此時,私有分支失去長度優(yōu)勢。
b) 在情況二中,惡意礦工計算出下一個塊,私有分支繼續(xù)保持對于公開分支的長度優(yōu)勢。
(3)對于上述情況一而言,由于私有分支的優(yōu)勢被消除,惡意礦池將立即公開私有分支,兩條分支進入競爭狀態(tài),任何一條分支都有取勝的可能。此后,所有惡意礦工將基于私有分支繼續(xù)挖礦,而誠實礦工則會選擇其中的一條分支挖礦(誠實礦工的選擇取決于新塊通知的傳播速度)。
a) 倘若惡意礦工首先計算得到下一個塊,惡意礦池將直接公布私有分支,并獲得兩個塊的獎勵作為收益。
b) 倘若下一個塊被基于私有分支挖礦的誠實礦工計算得到,則此時惡意礦池將得到第一個塊的獎勵,而該誠實礦工將得到第二個塊的獎勵。
c) 倘若下一個塊被基于公開分支挖礦的誠實礦工計算得到,那么這兩個塊的獎勵則分屬于計算得到他們的誠實礦工,而惡意礦池將一無所獲。
(4)對于上述情況二而言,惡意礦工繼續(xù)領(lǐng)先計算出下一個塊,此時私有分支就建立了兩個塊長度的優(yōu)勢,這一優(yōu)勢是惡意礦池比較舒服的一個“安全墊”。惡意礦池會選擇進一步擴大收益,也即是延遲公開這兩個新塊,并繼續(xù)挖礦。
a) 接下來,每當(dāng)誠實礦工計算得到一個新塊,作為應(yīng)對,惡意礦池也隨之公開一個新塊。而倘若惡意礦工計算得到一個新塊,惡意礦池則繼續(xù)不公開該新塊。
b) 由于在算力上,惡意礦池相較其他礦工的總和處于劣勢地位,故它所控制的私有分支的長度優(yōu)勢大概率會逐漸變小,直至減少為1個塊。此時,惡意礦池會立即公布這條私有分支,使其成為當(dāng)前合法主鏈,系統(tǒng)再一次恢復(fù)到只有一條分支的狀態(tài)。而惡意礦池也將獲得其計算到得的全部新塊的獎勵。
攻擊效果
文獻中給出了“自私挖礦”攻擊的模擬效果,實驗背景大致設(shè)定如下。首先作者利用模擬器模擬了1000個節(jié)點,這些節(jié)點以相等概率進行挖礦。
在這1000個節(jié)點中,有1000α(α表示全部節(jié)點中“自私挖礦”節(jié)點的比例)個節(jié)點運行“自私挖礦”算法,而其他節(jié)點則是運行比特幣挖礦協(xié)議的誠實節(jié)點。接著,假設(shè)兩條分支處于等長狀態(tài),并將誠實礦工分為兩類,γ比例的誠實礦工基于私有分支挖礦,而剩下的γ比例的誠實礦工則基于公開分支挖礦。
從圖1中可以看到,γ等于0時,也即全部誠實礦工都基于公開分支挖礦的情形下,若想在挖礦收益上超過正常執(zhí)行比特幣挖礦協(xié)議時的收益,惡意礦池最低大約需要掌握1/3的全網(wǎng)算力。
而當(dāng)γ等于0.5時,也即誠實礦工中,一半人數(shù)基于私有分支挖礦,而另一半則基于公開分支挖礦時,惡意礦池實現(xiàn)“超額”收益的門檻則下降至全網(wǎng)算力的1/4。可見,相較于實施51%攻擊的算力要求而言,實施“自私挖礦”攻擊的門檻要低出不少。
后續(xù)研究
介紹到這,有關(guān)“自私挖礦”攻擊的故事其實還遠沒有說完。此后,許多針對“自私挖礦”策略優(yōu)化及擴展的工作相繼展開。2016年,Nayak等作者在文獻[4]中提出了一種新的挖礦策略“stubborn”,該策略對“自私挖礦”策略進行了擴展?;谠摬呗?,惡意礦池的收益相較于使用“自私挖礦”策略將提高13.94%。
不僅如此,在文中作者還進一步對“stubborn”策略進行了優(yōu)化,并提出了兩個新的策略,即“the EqualFork Stubborn”與“Trail Stubborn”。這兩個策略進一步提高了惡意礦池的挖礦收益。
在文獻中[5],Carlsten研究了交易手續(xù)費對于“自私挖礦”策略的影響。文獻[6]則進一步擴展了“自私挖礦”模型,即將惡意礦池與誠實社區(qū)之間的延時加入模型?;诖四P?,作者提出了一種通過監(jiān)測“孤立塊”比例來檢測“自私挖礦”異常行為的方法。
文獻[7]則考慮了一個更加通用的假設(shè),即利用貝葉斯博弈公式對“自私挖礦”礦工在策略中的選擇行為進行建模,進一步優(yōu)化了挖礦策略。
總結(jié)
隨著區(qū)塊鏈技術(shù)的快速發(fā)展,針對它的攻擊方式也逐漸增多,“自私挖礦”只是諸多攻擊中的一種。其他常見攻擊方式包括針對區(qū)塊鏈網(wǎng)絡(luò)層的BGP劫持攻擊與Eclipse攻擊等,針對POW共識算法與交易過程的平衡攻擊與活性攻擊等,以及針對智能合約的the DAO攻擊、“GovernMental”攻擊等。在后續(xù)的文章中,筆者將為大家分析這些攻擊方式。