利用礦池降低51%攻擊?這真的可行嗎?
區塊鏈大本營/phyro-Tomaz Kariz/Guoxi/張詠晴編譯
2019-03-11 15:44

 

以太坊經典使用的區塊鏈選擇規則是選擇完成工作量最多的區塊鏈。假設一個名叫 Bob 的以太坊經典客戶端正在第一次連接以太坊經典網路,Bob 必須在多個區塊鏈之間做出選擇,不過這並不是問題,他所要做的就是計算每個區塊鏈上完成了多少工作量,並選擇完成工作量最多的區塊鏈。即使我們有任意多 Bob 這樣的新入網以太坊經典客戶端,對每個區塊鏈它們都會計算出完全相同的評分 chainScore。

 

在區塊鏈系統中給定 N 個節點,這 N 個節點構成一個完全圖(每個節點都連接到其他所有節點),區塊鏈選擇規則應具有以下屬性:每個節點都應將同一個區塊鏈視為最佳選擇。

 

區塊鏈選擇規則還應為區塊鏈 C 提供相同的評分 chainScore ,不論任意時間點以及任意高度 H ,這意味著評分 chainScore 應該僅取決我們正在評估的區塊鏈上的數據。

 

這些屬性確保 Bob 和長壽命節點就需要追隨的區塊鏈達成一致,並使它們隨時間的推移逐漸收斂到同一個區塊鏈上。

 

需要注意的是,正如我們上面提到的,當下以太坊經典中評分 chainScore 最大的區塊鏈是那些完成工作量最多的區塊鏈。

 

區塊鏈挖礦

 

對於單獨挖礦的礦工而言,除非他掌控相當大的哈希算力,否則他不太可能會挖出區塊。

 

礦池就是為了解決這個問題而被發明的,礦池借鑒了「眾人拾柴火焰高」的思想,大量原本單獨挖礦的礦工聚在一起「抱團取暖」,共同挖礦,共同分享收益,所以即使某些礦工可能都沒有挖出一個區塊,但始終能獲得穩定的工作回報。

 

假設區塊鏈網路中有多個礦池,它們總共佔據網路中的大部分哈希算力。

 

每一個區塊都包含一個被叫做 coinbase / etherbase 的數值,它用來指代挖出該區塊的礦工,表示應該接收挖礦獎勵的地址。

 

大多數區塊都是由礦池開採的,每個礦池通常都會指定一個用來接收挖礦獎勵的地址。

 

下面是以太坊經典區塊鏈上從高度 7283680 到高度 7283695 開採出的 16 個連續區塊,以及它們接收挖礦獎勵的礦工地址:

 

12

以太坊經典區塊鏈上高度 7283680 到高度 7283695 的區塊,以及它們接收挖礦獎勵的礦工地址

 

正如預期的那樣,絕大多數區塊都是由以太坊經典網路中運營的礦池開採出的,其中礦池 Ethermine 開採了 5 個區塊,礦池 MiningPoolHub 開採了 4 個區塊,礦池 NanoPool 開採了 3 個區塊。

 

在灰色的區塊中挖礦獎勵,被發送到我不知道所有者是誰的地址,但它們很可能也是礦池。

 

這似乎給了我們一點啟發…

 

利用礦池降低51%攻擊?真的!

 

假設我們有能連續挖出新區塊的礦池,我們應該能經常看到區塊的產出。當攻擊者進行 51% 算力攻擊時,他通常會離線連續挖掘 N 個區塊,然後發布一個比當前共識鏈更長的區塊鏈,從而導致當前共識鏈的重組。

 

攻擊者開採的區塊,通常不使用我們過去觀察到的礦池的地址。

 

如果對礦池挖礦的前後不一致性進行懲罰,我們就可以在共識規則大致不變的前提下,大大增加攻擊者發動攻擊的成本,從而保護我們免受 51% 算力攻擊。

 

在這裡,我們需要先明確一下 51% 算力攻擊是如何發生的:

 

  • 使用算力租賃服務(例如 NiceHash )來執行攻擊(假設 NiceHash 並不是礦池)。
  • 一些礦池暗中勾結執行攻擊。
  • 上面兩者的結合:礦池暗中勾結+算力租賃服務執行攻擊。
  • 使用專用積體電路(ASIC)執行攻擊。

  

本文為巴比特資訊授權刊登,原文標題為「以太坊經典被51%攻擊之後, 國外大神用礦池讓攻擊者付出代價