原文標題:《Effective Scheme against 51% Attach on Proof-of-Work Blockchain with History Weighted Information》
原文作者:楊歆樂 陳揚 陳小虎
翻譯申明:本文翻譯作業得到李曉強大力協助。翻譯完成后未經原作者審核,如發現錯誤,讀者可留言反饋。
【摘要】PoW(作業量證明)是區塊鏈系統中廣泛使用的協議,用于解決雙花難題。但是,如果攻擊者擁有超過全網哈希算力的一半,那么該攻擊者就可以發起雙花攻擊或51%攻擊。如果哈希算力足夠強大,那么發起攻擊的成本會低的驚人,這將會對眾多PoW區塊鏈造成巨大威脅。
我們提出了一種技術方案,將礦工的挖礦歷史權重資訊與總計算難度相結合,以達到緩解51%攻擊的問題。分析表明,使用這種新技術,將會使傳統攻擊的成本增加兩個數量級。
【關鍵詞】區塊鏈 51%攻擊 挖礦 雙花攻擊
1.介紹
位元幣由中本聰于2009年開發,是第一個去中心化的公共賬本系統,自那時起,出現了許多基于區塊鏈的加密貨幣。區塊鏈是一個分布式資料處理協議,用于在P2P網路中保存一個公共分布式賬本。交易資料記錄在區塊中,這些區塊形成一個鏈表,網路中的每個節點都存盤并維護一個完整的賬本副本,而無需中心化授權。在基于區塊鏈的加密貨幣中,每個塊都包含前一個塊的哈希值,導致很難操縱內部交易。通常采用共識協議來保證區塊鏈P2P網路節點間的資料完整性,不同型別的區塊鏈,會采用不同的共識協議。
PoW(作業量證明)是當前基于區塊鏈的加密貨幣中最常用的共識協議。主流區塊鏈如位元幣和以太坊,就是使用的PoW共識協議。在POW協議中,每個節點競爭著找到一個nonce的值來生成滿足特定條件的哈希,找到這樣的一個nonce值的難度可以根據哈希值的條件來計算。當找到這樣的一個nonce值時,將生成一個塊并向P2P網路廣播。根據協議的不同型別,對等節點通常會接受最長的鏈或總難度最大的鏈來不斷地擴展區塊鏈,POW利用這一機制來確定哪個節點有資格打包一個塊,這個程序也稱為挖礦。
在這種機制中,計算速度較大(有時稱為哈希算力)的節點可以比計算速度較慢的節點更快地計算出nonce值,從而有更高的概率獲得打包資格。然而,這種機制有一個缺點:一個自私節點的哈希算力比其余節點哈希算力的總和還要高,就會導致雙花問題和自私挖礦,從而危害區塊鏈系統,這通常被稱為51%攻擊。一些學者已經提出了避免此類攻擊的方法,Eyal和Sirer在2014年提出了一個兩階段PoW(2P-PoW)的解決方案,防止了具有巨大哈希算力的礦場的形成。在這個方案中,第二階段的PoW需要挖礦地址的私鑰簽名,第二階段的PoW非常困難,礦池操作者必須向礦工開放這個私鑰,以便于比其他節點更快地進行計算。Ruffing et al. 等人在2015年提出了一份合約來懲罰實施雙花攻擊的攻擊者。Solat和Potop-Butucaru在2016年提出了ZeroBlock,在ZeroBlock機制中,要求一個塊在塊的時間戳之后的特定時間間隔內被對等節點接受,否則該塊就會過期無效。這種機制可以防止攻擊節點在很長一段時間內進行自私挖掘。J. Bae和H. Lim在2018年提出了一種解決方案,隨機選擇某一組礦工,讓他們有權挖出下一個區塊。
在本篇論文中,我們提出一種通過歷史權重難度決定區塊鏈總難度的新解決方案。在這個優化過的演算法中,一個分支區塊鏈上的礦工如果在之前的區塊中有更高的打包出塊率,它就在這個分支區塊鏈上擁有更高的總歷史權重。該演算法會使進行51%攻擊的財力成本和時間成本增加兩個數量級。
2.51%攻擊和成本
首先,讓我們回顧一下51%攻擊的圖謀。假設當前的哈希算力是Po,攻擊者有更強的哈希算力Pa(Pa>Po),并且通過這種更強的哈希算力計算出了一個隱藏分支Ba,攻擊者就在兩個分支上造成了雙花攻擊。然后攻擊者暴露較長的隱藏分支Ba,并使原始分支Bo中的所有交易無效,這就是所謂的51%攻擊,產生的成本如下:

P是token在交易所的價格,R是塊的獎勵,f是塊的生成速度,t代表攻擊的持續時間。做一個該成本的簡化估算,這里我們假設挖礦token的價格接近挖礦的成本。對于許多小區塊鏈來說,執行這樣的攻擊只需要幾百或幾千美元。
另一個讓情況變得更糟的因素是,任何能夠支付合適價格的人都可以很容易地獲得哈希算力,NiceHash為哈希算力交換提供了一個開放的市場,任何人都可以輕松地使用加密貨幣付費租用哈希算力在目標區塊鏈挖礦。因此一個攻擊者可以在短時間內累積哈希算力以超過51%的閾值。攻擊者可以通過中心化交易將token雙花。整個流程只需要大約50-500個塊。之后,攻擊者可以釋放所租用的哈希算力并帶走利潤。
最近,以太坊經典受到了攻擊。攻擊的分支長度大約在50 ~ 150,大量的ETC被雙花。
3.歷史權重難度
我們提出了一種改進計算分支總難度的方法,這種技術考慮到了挖礦地址在區塊鏈的最后一定數量塊中的分布情況。我們將這種協議稱為基于歷史權重難度的作業量證明(HWD-PoW)。假設在一個誠實的區塊鏈分支中,新區塊的挖礦者很可能是之前某些區塊的挖礦者,其分布情況將反映歷史挖礦的比率。而在一個惡意區塊鏈分支中,新區塊的挖礦者分布情況很有可能被攻擊者控制,這與歷史上常規的挖礦者分布情況不同。因此,當考慮歷史礦工的分布時,人們可以很容易地將誠實的區塊鏈分支與惡意的區塊鏈分支區分開來。
在這種機制下,在以前的塊中具有較少代表性的分支將在總難度計算中獲得更少的權重。因此,要執行51%的攻擊,惡意的礦工有兩種選擇:要么挖掘一個更長的分支,要么在以前的塊中建立礦工形象從而建立信譽。
現在,讓我們看看歷史權重難度模式是如何防衛51%攻擊的:
a)首先,在歷史視窗期W記錄每個礦工的塊生成頻率:

這里:

b)然后,每個塊由挖礦者的私鑰簽名。這樣,挖礦者就不能偽造礦工身份。雖然這可能會暴露礦工的私鑰;不過也有方法解決,只要token一被挖出,馬上把token從挖礦者的賬戶轉到冷錢包里。
c)當檢測到分叉裂時,通過下面的方法來計算每個節點上的每個分支的歷史權重難度(HWD):
對于B分支中的唯一礦工K,

Rk是歷史視窗期W中塊的生成頻率,Dk是塊k的難度,L是分支長度。
請注意,只進行了一個礦工的生成頻率計算。如果一個礦工地址挖掘多個塊,它只計算一次。通過抑制單一的高哈希算力的礦工,從而鼓勵了采礦的分散化。這也就增加了攻擊的難度。
d)每個節點都會比較來自兩個分支的兩個不同HWD值,帶有更高HWD值的分支將會被選中。
這種機制的結果很明確:如果攻擊者增加新的臨時哈希算力,但新分支的礦工對系統來說是相對較新的,其區塊的ri值會非常低,相應的HWD相對于原始分支會非常小。原始分支中的任何節點都不會切換到攻擊者分支。這個方案可以很容易地防范”rent and attach攻擊。
如果攻擊者想讓節點切換到他的惡意分支,他就需要產生更高的HWD值。攻擊者需要在原始分支中挖一段時間,使自己包含在歷史中。因此,當它切換到隱藏分支時,它的HWD會更高。
假設Pa是攻擊者的哈希算力,Po是原始的誠實礦工的哈希算力:

在原分支中,攻擊者需要花費哈希算力Pa和時間t, Pa的最優開銷為W/2周期,然后在攻擊的時候將Pa切換到隱藏分支,如圖Fig.1所示;為了攻擊成功,我們需要滿足:

結果,公開的惡意分支Ba將比原來的分支Bo長,在公布時,原始分支的HWD為:

其中δ為節點接受的最小邊緣差分。所以,惡意分支的HWD是:

因此,我們需要:

因為Da和Do在這種情況下無限接近,我們可以簡化方程:

并且可以得出:

總之,攻擊者的最小代價是在時間視窗 ( W - L) 開銷哈希算力 Po * ( 1/2 + l/( 4W - 21 ))。
對于典型的攻擊,需要大約50-500個塊才能使token從token交易所套現。從下面的分析來看,礦工的切換并不頻繁,我們可以很容易地設定W > 1個月來增加歷史權重。當W = 100,000塊時,對攻擊的魯棒性(編者注:指系統在擾動或不確定的情況下仍能保持它們的特征行為)提高了100倍以上。
雖然我們不能完全避免51%攻擊,但是我們可以大幅增加攻擊者的資金成本和時間成本到兩個數量級以上。由于攻擊者需要花費相當長的時間來準備,所以攻擊發生的可能性要小得多,因為長時間的攻擊會導致大量的機會成本和不確定性。上述的HWD方案對比,額外的改善方案進一步增加了攻擊成本。
4.額外的改善方案
以上是HWD方案,額外的改善方案會在之前的基礎上更多地增加攻擊者的成本。
與第一種方案是發布Ri < Rc的上限,這意味著即使在歷史視窗中生成了更多的塊,單個礦工的數量也不會超過Rc。這種方法將鼓勵更多樣化的礦池。同時,礦工可以有目的地將挖礦哈希算力分割為多個挖礦者,以確保每個挖礦者都低于Rc。這將繞過多樣化需求,但這仍然是有效的,它增加了攻擊者維護多個礦工賬戶的成本。
第二種方案是在兩個分叉的分支之間增加一個礦工重疊(miner overlap)需求。為了將攻擊成本降到最低,攻擊者通常會將其所有的哈希算力都放在惡意分支中。重疊需求則要求一些采礦者同時在兩個分支挖礦。在這種情況下,為了實作分支切換,不僅需要滿足HWD條件:

同時,兩組礦工之間的重疊度需要大于s:

其中Ri為原始分支的礦工頻率,Rk為攻擊者分支的礦工頻率,s為重疊閾值。
這意味著,該系統不鼓勵哈希算力突然從一組礦工切換到另一組不同的礦工。
有了這樣一個增強的要求,如果 s = 0.25,則攻擊者需要在持續時間w內擁有當前哈希算力的三倍。這意味著攻擊者需要在原始分支中保留一些哈希算力,并在惡意分支中保留兩倍以上的哈希算力。因此,通過引入這樣一個方案,我們將執行對原始的歷史權重難度演算法的攻擊的時間成本和金錢成本分別提高了一倍和兩倍。對于更高的s值,攻擊者甚至需要花費更多的哈希算力。
5.HWD演算法
在本節中,我們將介紹基于分支選擇的HWD演算法。
下面是計算HWD的偽代碼:

6.來自以太坊的真實資料統計
我們選擇了一個著名的PoW區塊鏈平臺(以太坊)Ethereum。我們分析了前6,000,000個區塊的區塊資訊,這些大約有3年的開采歷史。第一個任務是找出具有較大哈希算力的礦工的分布情況。分析表明,礦工分布與過去的歷史有很強的相關性。在塊 # 2,000,000、# 4,000,000、#6,000,000處,分析了其下的360個塊。在這360塊和2M塊中的礦工權重如下所示:



360塊挖礦者的總權重與歷史視窗的分布有很強的相關性,即使我們使用的歷史是200萬塊(M)長(大約一年)。結果如下圖所示:

這支持了我們的假設,誠實礦工的參與率是相對穩定的。因此,礦工的歷史權重是一個有價值的資訊,我們可以利用它來對抗51%的攻擊。我們還觀察到,新礦工與前200萬塊的相關性逐步增強,表明以太坊礦挖礦正走向集中化。
請注意,在table II中,一個地址為0x829b....a830的礦工的權重在這360個區塊之中的2M-4M范圍里發生了較大的變化。然而,之前200萬塊礦工的總權重仍然在70%以上。這表明,個別的礦工可能會大幅度地改變他們的開采參與率,但這并沒有改變一個真實分支的總的歷史權重。
我們進一步模擬了51%攻擊,在塊#2M、 #4M 和 #6M上進行模擬攻擊,并監聽計算了1M和2M視窗的結果。如果攻擊分支的HWD高于原始分支的HWD,則視為成功的攻擊。
在理想情況下,準備作業至少應該比指定的視窗時間長。但是,考慮到分布的相關性,準備周期略短。我們對每個視窗進行了多次模擬,以獲得平均累積成本。在這里,我們忽略了隨著時間的推移挖礦獎勵減半的效應。結果如下圖所示:

結果表明,在HWD方案中,如果將視窗大小設定為1M或2M塊,攻擊以太坊主網區塊鏈的代價將增加100倍以上。在實際應用中,視窗可以更短,以加快行程。我們建議視窗大小至少是100萬,使攻擊的成本增加100倍以上。
7.結論
在本篇論文中,我們提出了一種基于PoW區塊鏈協議的方案,以增加攻擊者成功進行雙花攻擊和51%攻擊的成本。該方案利用計算歷史區塊中的礦工分布比率和歷史權重難度總數來確定是否有切換分支的必要。我們在三個真實的以太坊主網場景中的實驗結果證明,采用HWD-PoW方案,攻擊成本提高了100多倍。
我們的HWD-PoW方案可以應用于所有基于PoW的區塊鏈。這可以大大提高較小的區塊鏈的安全性,且易于整合。
致謝
這項作業得到了MOAC基金會和MOAC區塊鏈技術公司的支持。我們感謝Andrew Champagne幫助我們進行校對。
文獻參考
略。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/31792.html
標籤:區塊鏈技術
上一篇:Filestorm創始人傅獻農:去中心化的應用需要去中心化的存盤
下一篇:應用型公鏈挖礦應回歸到普適性時代
