學術向丨自私挖礦攻擊可行性與相應解決方案
譯者前言:自私挖礦是一種針對比特幣工作量證明(PoW)機制區塊鏈的挖礦策略,簡單說就是挖到區塊先不公佈,而是繼續挖礦,然後根據策略擇機公佈。而這種策略,根據研究者們的探討,實際上會降低網路驗證區塊的速度,同時會削弱誠實礦工的盈利能力,而在難度調整之前,這也會對自私礦工本身帶來不利影響。
可以說,在這種情況下,自私挖礦相當於是“殺敵一千 自損八百”的“七傷拳”。而只有在難度調整之後,自私挖礦才是有利可圖的。
由此,我們認為自私挖礦是針對比特幣協議的一種攻擊方式,這種攻擊利用了比特幣難度調整公式的缺陷。它在實際情況下雖然難以實現,但較51%攻擊而言卻是更可行的。對此,研究者CYRIL GRUNSPAN和RICARDO PEREZ-MARCO'提出了一種新的難度調整公式,它雖然無法消除自私挖礦的可能性,但即使是在發生難度調整的情況下,自私挖礦較誠實挖礦也不會具有優勢。
(圖片來自: ofollow,noindex" target="_blank">pexels.com )
論文標題:關於自私挖礦的盈利能力
論文作者:CYRIL GRUNSPAN和RICARDO PEREZ-MARCO'
譯者:灑脫喜
摘要:我們探討了比特幣網路當中可能存在的自私挖礦策略,並正確評估其攻擊成本及盈利能力。預期的攻擊持續時間,在很多相關文獻中被忽略掉了,但這是關鍵的。我們證明了,這種策略只有在網路調整難度後才能夠盈利。因此,這是一種針對難度調整演算法的攻擊。我們提出了一種改進協議,可使比特幣網路免受自私挖礦攻擊的可能。
一、簡介
比特幣協議[7]的穩定性, 依賴於其規則符合網路參與者的自身利益。它的基本規則之一是,區塊一旦得到驗證,礦工們就會選擇公佈它們。而“自私挖礦”則是一種異常的挖礦策略 [5],其中主要的礦工運營者選擇扣留挖礦區塊,並採取定時策略將其公佈,以使網路其餘礦工開採的最大數量區塊無效。文獻[5]的作者毫無根據地稱自私挖礦策略會破壞比特幣協議 [4],但在實踐當中,我們並沒有觀察到這種現象。
其他研究人員則提出了其它被認為是“最佳的”自私挖礦策略[9]。自私挖礦策略以課程和教科書的形式,呈現在比特幣書籍當中,例如 [1](該書籍的第5章內容,被稱為“臨時扣塊攻擊”)或者[10]。
然而,這些文獻都沒有對自私挖礦攻擊的成本進行適當的分析,並且,更重要的是,它們忽略了時間考慮。更確切地說,這些論文中使用的馬爾可夫模型,從一開始就是存在缺陷的,因為它沒有納入攻擊持續時間分析。而本文的主要目標,是實現分析自私挖礦的盈利能力,這是在文獻當中沒有的。事實證明,在沒有難度調整的情況下,這種自私挖礦策略是靠不住的。
二、自私挖礦策略
我們描述了文獻[5]中提出的自私挖礦策略。自私礦工通過驗證和不廣播區塊實施攻擊,然後繼續在這個區塊的頂部祕密地進行挖礦。然後這名礦工會如下進行操作:
(1)如果自私礦工的優勢是1個區塊,當誠實的礦工發現了一個區塊,然後自私礦工立即偷偷地廣播他已祕密挖到的區塊。然後接下來就是一場競賽,自私礦工在他公佈的區塊上進行挖礦任務。自私礦工與網路的其它參與者是有充分聯絡的,因此,誠實網路的0 ≤ γ ≤ 1佔比部分會接受他的區塊提議,並開始在他的區塊上進行挖礦任務。
(2)如果自私礦工的優勢是2個區塊,當誠實礦工發現了一個區塊,然後自私礦工立即偷偷地廣播他已祕密挖到的區塊。然後,整個網路就會切換到他所在的分叉鏈。
(3)如果自私礦工的優勢大於2個區塊,當誠實礦工發現一個區塊時,則自私礦工可公佈區塊,以釋放一條子鏈,與新的誠實區塊進行競爭。而自私礦工可在他的祕密鏈上繼續挖礦。
(4)除了(1)之外,自私礦工都可以在他的分叉鏈上偷偷地進行挖礦。
請注意,如果自私礦工的優勢區塊大於2,那麼在某個時刻,他的優勢將等於2個區塊(因為我們假設他的算力小於50%,或者其它更有效的攻擊是可能的),然後,根據第2點,整個網路最終採用自私礦工提出的分叉鏈。因此,當他的優勢區塊總是大於2時,自私礦工所公佈的區塊,總是會被網路所接受。而第3點則是有些無關的,因為當自私礦工佔據優勢時,重要的是強迫他驗證的區塊被納入到區塊鏈當中。他可以忽略掉誠實礦工的區塊驗證,除非當區塊優勢只有2時,然後自私礦工只能釋放整個祕密分叉鏈。
在文獻[5]中,作者們假設了γ佔比始終保持不變。這是不準確的,因為γ取決於網路新區塊被挖掘的時間,因此它是無法保持不變的。但在[5]中所運用的馬爾可夫鏈模型,就需要假設γ是不變的,因此,這些作者提出了這種假設。這種分析是不準確的。但是,更重要的是,他們沒有核算這種攻擊的成本。對於這樣的流氓策略而言,計算盈利能力是十分重要的。時間分析對於估計盈利能力而言,也是至關重要的,但這些作者也都選擇了忽略。
三、自私挖礦vs誠實挖礦的盈利能力
3.1. 文獻中的盈利能力。大多數關於自私挖礦策略的文章,都沒有考慮挖礦成本因素,或只是含蓄地進行了表達。在 文獻[5]中,這個因素乾脆被忽略掉了。而在 文獻[3]等文章當中,我們可以看到令人驚訝的陳述:
成本。每個礦工m都有可配置的引數Cm, 即表示礦工m進行挖礦任務的成本(即電力)。對於我們的模擬結果而言,我們總是設定Cm = 0,因為我們不會看挖礦的這方面。
顯然,如果挖區塊沒有任何能源成本的話,任何人都可嘗試逆轉比特幣交易的歷史,並嘗試雙花攻擊,也不會有尊重比特幣協議的經濟激勵。能源成本使得偽造區塊鏈是昂貴的,這是比特幣安全的基礎!其他作者,如[2],則以以下方式來描述自私挖礦:
“自私挖礦確實在短期內會減少攻擊者的收入,但它確實會大大減少其他人的收入,因此中立節點就有動力加入攻擊者的聯盟,以增加自己的收入。最終,攻擊者的聯盟將擴大到50%以上的規模,可能會使攻擊者對網路造成很大的控制影響力。”
換句話說,根據這種解釋,一個損失錢的礦工會被攻擊吸引,然後加入到另一個損失錢礦工的隊伍當中。而這僅僅是因為攻擊者礦工損失的錢更少,所以攻擊者能夠說服那些誠實礦工!撇開誠實礦工無法確切知道雙方盈利能力差異這一事實不談,這種天真的情景,可以說是令人難以置信的。
從這個角度來看,自私挖礦僅僅是作為控制網路的51%攻擊的一種預備行為。實際更可能的結果是,誠實礦池會注意到某些礦工在做自私挖礦,他們將採用明顯的防禦策略,並開始自己的自私挖礦,這會使網路停滯不前。這個結果對於所有人而言都會是不利的。納什均衡的一種形式正在發揮作用,這避免了上述描述的場景。
除了這些創造性的解釋之外,文獻中的真正缺乏的,是對自私挖礦攻擊成本的正確核算和理解,以及適當的時間分析。
3.2 挖礦成本 。為了正確評估自私挖礦盈利能力的關鍵思路,是將其與誠實挖礦的盈利能力進行對比。我們假設礦工從事挖礦業務,是因為運營成本(裝置和能源),是可由新生成的比特幣區塊獎勵+交易費用得到補償的。
因此,如果算力是以滿負載執行的,單位時間的挖礦成本與策略是無關的。所以我們就有了CS = CH,其中CS 和 CH是自私挖礦以及誠實挖礦策略每單位時間的挖礦成本。我們表示C0 = CS = CH. 請注意,此成本不僅獨立於策略,但也表示挖到的區塊,會還是不會被網路所接受。
3.3 收益和損失 。我們的目標是評估損益情況(PnL),並對比自私挖礦和誠實挖礦的PnL。損益(PnL)的演算法是收入R減去成本C:
PnL = R − C .
我們採取一種保守,但足夠的設定,其中區塊獎勵被減少到(b > 0) 新生成的比特幣(因此,我們不考慮交易費用)。除非另有說明,我們假設我們沒有接近獎勵減半,所以獎勵b是保持不變的。
對於任何業務而言,重要的是每單位時間的P nL,而不是每區塊解決或被網路接受的P nL。值得注意的是,每區塊或每單位時間的P nL是不相等的,這是由於採用的自私挖礦策略,延遲了網路中區塊的驗證速度。
3.4 每單位時間的損益 。一種不間斷的攻擊策略,如自私挖礦,包括了一系列連續的“攻擊週期”。
在自私挖礦的情況下,它是當自私礦工和誠實礦工都在同一區塊鏈上進行工作時發生的。自私礦工的目標是利用他們祕密挖取的區塊鏈。如果,一開始,誠實礦工找到了新區塊,則進入一個新的週期。如果自私礦工成功建立了優勢,然後週期會持續至誠實礦工追趕上進度,並強迫自私礦工釋放他們祕密挖取到的區塊。然後開始新的迴圈。對於這種具有重複效應的策略遊戲,每單位時間的漸進P nL ,P nLt∞ ,是可以進行評估的。而這是下列定理當中的內容。
六、阻止自私挖礦的提案
6.1. 問題的根源 。基本上,這種攻擊利用了難度調整規則。當前的比特幣協議低估了網路中的實際算力,由於其僅考慮了被納入(官方)區塊鏈的區塊。 在存在自私礦工的情況下,孤塊會不斷增長,大量誠實算力會丟失。網路用於驗證的平均時間會增加。在2016個區塊之後,自動完成的難度調整會無視孤塊的生產。儘管網路總算力是保持不變的,但新的難度會低於應有的水平,並且區塊驗證時間會減少。所以,單位時間的自私挖礦收入會增加,並使得攻擊變得有利可圖。
6.2. 一個新的難度調整公式 。為了減輕這種攻擊,一種想法是在難度調整公式中加入孤塊數量的因素。這可通過礦工們來實現,即指示他們挖到的區塊中存在“uncle”(通過包含它們的區塊頭,及對等節點中繼這些資料)
只要誠實礦工發出訊號就足夠了。節點就不需要廣播整個孤塊,而只是廣播它們的區塊頭。這有可能會激勵礦工在他們的區塊中納入uncle存在證明(通過一個規則,在兩個具有相同高度區塊之間競爭的情況下,節點應該始終廣播擁有最多工作量證明的區塊,即包含最多uncle存在證明的區塊)。根據[11],這一規則在誠實礦工與自私礦工發生競爭時,它也是對誠實礦工有利的。在n0 = 2016 區塊驗證週期結束後,難度調整的新公式將會是
其中n'是在這段時間內挖到的孤塊總數,而Sn0是網路用於驗證n0區塊的時間 (並使用公式Sn0 = Tn0-T1,其中Ti表示區塊 i區塊頭的時間戳。)
6.3. 分析公式 . 設 ω 是在τ0= 600秒時間段內被觀察到的孤塊平均數。所以,平均而言,每τ0時間,都會有ω孤塊和(1 - ω)非孤塊。只有最後一個會被新增到官方區塊鏈。網路用於增加區塊鏈的時間為
七、結論
自私挖礦是一種減慢網路並減少挖礦難度的一種技巧。這種攻擊會削弱誠實礦工的盈利能力,而在難度調整之前,這也會對自私礦工本身帶來不利影響。而只有在難度調整之後,自私挖礦才會變得有利可圖。自私挖礦是針對比特幣協議的一種攻擊,但很多相關文獻中的論點沒有正確地證明這種攻擊的合理性。他們缺乏對攻擊成本和每單位時間的損益進行適當的分析。
為了比較不同挖礦策略的盈利能力,我們就需要計算它們的週期平均長度和收入比率,這是本文中提到的新概念。
這種攻擊利用了難度調整公式的缺陷。用於更新挖礦難度的引數,應該是衡量網路的實際算力。而當前的引數,在存在自私礦工的情況下,是不再適用的。我們提出了一個公式,通過考慮這一點來糾正這種生產孤塊的異常現象。我們建議,協議應指定官方區塊鏈包含的是最多工作量證明(帶有最多uncle存在證明)的區塊。如果這一擬議公式得到採用,雖然它不會消除自私挖礦的可能性,但即使是在發生難度調整的情況下,自私挖礦較誠實挖礦也不會具有優勢。因此,這會使得個人激勵措施與協議規則保持一致,而這符合比特幣最初成立時的意圖[7]。
參考文獻
[1] J. Bonneau, E. Felten, S. Goldfeder, A. Miller , A. Narayanan. Bitcoin and Cryptocurrency Technologies: A Comprehensive Introduction, Princeton University Press, NJ, USA, 2016.
[2] V. Buterin. Selfish mining: a 25% attack against the bitcoin network, bitcoinmagazine.com/ articles/selfish-mining-a-25-attack-against-the-bitcoin-network-1383578440, 2013.
[3] M. Carlsten, H. Kalodner, A. Narayanan , S. M. Weinberg. On the instability of bitcoin without the block reward, Proc. ACM SIGSAC Conf. Comp. and Comm. Sec., p.154-167, NY, 2016. 14 C. GRUNSPAN AND R. PEREZ-MARCO ´
[4] I. Eyal, E. G. Sirer. Bitcoin is broken, hackingdistributed.com/2013/11/04/bitcoin-is-broken/ (accessed 1/2018), 2013. [5] I. Eyal, E. G. Sirer. Majority is not enough: bitcoin mining is vulnerable, Int. Conf. Financial Cryptography and Data Security, Springer, p.436-454, 2014.
[6] C. Grunspan and R. P´erez-Marco. Double spend races. ArXiv:1702.02867, 2017.
[7] S. Nakamoto. Bitcoin: a peer-to-peer electronic cash system. Bitcoin.org, 2008.
[8] S. Ross. Introduction to Probability Models 10th Edition. Academic Press Inc, 2012
[9] A. Sapirshtein, Y. Sompolinsky , A. Zohar, Optimal selfish mining strategies in bitcoin, International Conference on Financial Cryptography and Data Security, Springer, p.515-532, 2016.
[10] R. Wattenhofer. Distributed Ledger Technology: The Science of the Blockchain, 2nd Ed., Create Space Independent Publishing Platform, 2017.
[11] R. Zhang, B. Preneel. Publish or perish: a backward-compatible defense against selfish mining in bitcoin. In Topics in Cryptology - The Cryptographers Track at the RSA Conference 2017, Springer, p.277-292, 2017.
作者
Cyril Grunspan 電子郵件地址:[email protected]
Ricardo Perez-Marco 電子郵件地址:[email protected]