日食攻擊是一種攻擊去中心化網路的手段,攻擊者試圖通過這種手段來隔離和攻擊一個或多個特定用戶,而不是攻擊整個網路,
在本文中,我將解釋以太坊的一些特性,包括其叔塊堵塞機制,如何使其更容易受到這種攻擊。
區塊鏈中的數據結構
區塊鏈是一種去中心化協議,它將資料庫分布在其網路中的多個節點上,為過去、當前和未來的交易建立共識機制。區塊鏈中的數據結構表示為區塊,
在去中心化的區塊鏈網路中,參與者同意什么是正確的,而不是中央權威。區塊鏈也是透明和不可變的,所有網路參與者都可以看到網路上發生的事情,除非通過商定的機制,否則交易日期無法更改。
比特幣區塊鏈中的區塊類型
- 創世區塊
創世區塊是任何區塊鏈的第一個區塊,該區塊是系統的基本起點,并與所有未來的交易相關聯,世界上第一個創世區塊是由中本聰創建的,并以此創造了比特幣。
創世區塊的存在使區塊鏈能夠通過允許新創建的區塊與以前的區塊相關聯來生成其交易歷史。此外,創世區塊在同步網路節點方面具有重要作用——它們的資料庫中必須具有相同的創世區塊。這確保了區塊鏈的分布式交易簿對每個人都是相同的,從而提供了安全性。
- 主鏈區塊
主鏈區塊是所有經過驗證并包含在區塊鏈中的區塊。為了實現這一點,區塊必須通過一個節點解決其分配的加密難題來獲得網路的同意。一旦網路達成共識,區塊就會包含在區塊鏈中,并由所有節點傳播,這樣,該網路的每個節點都有新的區塊,并作為它的驗證點。
每個有效區塊都包含一系列與該區塊一起驗證的交易。例如,在比特幣中,每個有效區塊平均承載2100筆交易。確認有效區塊中的每筆交易。
所有有效區塊繼續確認之前的交易,完全保護網路上的所有區塊和交易。當然,每個有效區塊包括允許驗證的數據結構,該結構包括區塊的哈希值、時間戳、nuncio和區塊交易數據。搜索候選解決方案的過程稱為挖礦,參與節點稱為礦工。每個為區塊的加密難題生成有效解決方案的礦工都成為領導者,并被允許確定未確認的交易集,然后將這些附加到區塊鏈。
- 孤立區塊
孤立區塊或陳舊區塊是不屬于區塊鏈的有效區塊,當兩個礦工幾乎同時驗證區塊時,或者當具有足夠哈希能力的攻擊者試圖逆轉交易時,可以創建這些數據,在這些情況下,網路共識協議將發揮作用,以決定哪些區塊將被包含在區塊鏈中,哪些區塊將被孤立。
實際上,區塊鏈網路被編程為始終支持最長的區塊鏈。也就是說,它會選擇包含更多資訊或處理過交易的區塊,在比特幣區塊鏈中,孤立區塊被丟棄,礦工所做的工作是無用的,
此外,正是由于這種類型的區塊,大多數交易所和一些錢包會在提供資金之前自動等待額外的確認。他們通過計算您正在接收的交易和當前塊之間開采了多少塊來做到這一點。
>eth.getBlock(blockNumber)}>eth.syncing.highestBlock-eth.getTransaction(““).blockNumber
區塊是如何驗證的?
區塊鏈系統使用Merkle樹數據結構運行,這使得它們(在理論上)不可變。Merkle樹是RalphMerkle在1979年申請專利的,在加密學中被廣泛使用,Merkle樹是驗證共享數據未更改、損壞或更改的基本方法,并且非常適合區塊鏈,因為它是輕量級的,例如,由于比特幣的Merkle樹結構,用戶的移動錢包不需要下載所有的比特幣交易來驗證它們,
給區塊中的每筆交易對應于Merkle樹中的一個葉子,通過散列單筆交易從這些葉子遞歸構建。
交易對(葉子)被哈希以創建可能對應于區塊鏈網路中的交易的其他葉子節點。盡管可以從大量交易中創建Merkle樹,但Merkle根始終對應一個32字節或256位的字符串(例如SHA256哈希算法總是輸出32字節的固定長度,無論輸入中的大小)。通過這種方式,我們可以使用小至32字節的數據來驗證多達數千筆交易。
根據案例,任何更改,無論多么微小,都會阻止Merkle根的驗證,并使區塊鏈的部分或全部歷史失效,
以太坊區塊鏈中的區塊類型
以太坊與比特幣的不同之處在于是它具有更快的區塊創建機制,旨在加快交易過程,但是,當區塊生成之間的時間間隔很短(大約15秒)時,會創建大量的孤立區塊,因為將所有這些區塊都包含在區塊鏈中是低效的。
這導致了礦工浪費時間在區塊上工作而得不到報酬的問題。為了解決這個問題,以太坊的開發者推出了GHOST協議。
GHOST代表Greedy Heaviest Observed Subtree,概念很簡單,它獎勵驗證孤立區塊的礦工,盡管其獎勵低于標準區塊。為了釋放獎勵,該區塊必須被主鏈中的區塊或叔塊引用。
該機制的另一個優點是解決了網路中心化的問題,當區塊被快速創建時,大型礦池很容易壟斷區塊驗證,從而導致較小的競爭對手創建無窮無盡的孤塊區塊,
以太坊區塊鏈中有兩種類型的區塊:
- 主鏈區塊是包含在以太坊區塊鏈中的區塊。發現它的礦工將獲得獎勵,
- 叔塊是經過身份驗證但未包含在主鏈中的區塊,礦工為此獲得的獎勵低于有效區塊。
想象一下,世界不同地區的兩個礦工同時挖出同一個區塊。然后他們在網路中傳播他們的區塊,這可能會在區塊鏈中造成的分歧,因此必須選擇一個,而較大的區塊將永遠獲勝。未選中的區塊成為孤立區塊(在比特幣中)或叔塊(在以太坊中)。與比特幣不同,以太坊礦工挖礦將獲得整個區塊的1/8獎勵,
叔塊獎勵如何運作?
主鏈區塊的礦工可以參考叔塊,當他們這樣做時,額外的獎勵分配給主鏈區塊的礦工和叔塊的礦工,主鏈中包含的每個區塊最多可以引用兩個叔塊,并為每個引用的叔塊提供1/32的完整區塊獎勵。然而,支付給叔塊礦工的獎勵會隨著時間的推移而減少,
通過保證對否則會浪費的計算工作進行補償,并通過使獎勵隨著時間的推移而減少,競爭鏈上的礦工有動力重新加入主鏈,這些叔塊有助于區塊鏈安全,也降低了51%的攻擊概率。
在以太坊礦池中,可以通過多種方式進行分布:
- 按比例支付計劃
在這個簡單的方案中,礦工將根據在礦池發現的兩個區塊之間的時間間隔內提交的代幣數量獲得相應的獎勵。因此,區塊獎勵B根據他們各自提交的代幣數量在資金池中的N個礦工之間進行分配,
- 按最后N股支付(PPLNS)
PPLNS計劃按照最近提交的N股成比例分配獎勵。
- 基于隊列的支付方案
Ethpool3是第一個引入基于隊列的獎勵機制的以太坊礦池,在該計劃下,礦工為提交給礦池運營商的每份代幣累積信用。每當礦池挖出一個完整的區塊時,區塊獎勵就會分配給礦池中累積信用余額最高的礦工,然后,頂級礦工將其信用余額重置為他們自己與礦池中第二高信用余額之間的差額。
引用關系創建了額外的薄荷獎勵,普通區塊所有者的完整區塊獎勵的1/32和叔塊的 (8-i)/8。根據引用的塊高度,變量 i的范圍從 1到6 。
除了完善區塊鏈的結構外,以太坊還有另外兩項安全改進。一種是隨機打破平局規則。一個節點不接受第一個接收的鏈,而是在所有接收到的相同長度的鏈中隨機選擇一個鏈,數γ不再固定,等于競爭鏈數的倒數,另一個目的是赦免叔塊挖礦的策略,
叔塊和日食攻擊
日食攻擊如何工作?
日食攻擊要求攻擊者控制主機節點的僵尸網路(每個節點都有自己的IP地址),并找出受害者的相鄰節點,基本上是通過反復試驗。實現這一目標所需的努力取決于網路的規模和性質,但如果成功,在受害者注銷并重新加入網路后,攻擊者將控制所有受害者的連接節點,
在這種情況下,存在三個參與者——攻擊者、受害者和誠實節點,如果受害者找到一個區塊,攻擊者就不會將該區塊傳播到網路,如果攻擊者發現了一個區塊,他們就會與受害者分享。通過這種方式,攻擊者為自己和被遮蔽的節點創建了一個私有區塊鏈。
通過這樣做,攻擊者可以獲得比誠實挖礦多96.4%的收益。日食攻擊是可能的,因為在去中心化網路中,一個節點無法同時連接到網路上的所有其他節點。相反,為了提高效率,給定節點將連接到一組選定的其他節點,而這些節點又連接到自己的選定組。因此,僅使用兩臺具有唯一IP地址的機器就可以發起日食攻擊。
以太坊依賴于基于名為Kademlia的協議的結構化網路,該協議旨在讓節點更有效地連接到其他節點,通過使用密鑰生成算法,攻擊者可以非常迅速地創建無限數量的節點ID(點對點網路上的標識符)。更糟糕的是,攻擊者甚至可能以一種比隨機節點ID更吸引受害者的方式創建節點ID,基本上把受害者吸引到這些節點ID上。
以太坊有三個特征可能使其容易受到日食攻擊。首先,快速創建區塊會產生無窮無盡的松散區塊,通過增加以太坊的供應量間接侵犯了誠實礦工的利益。其次,叔塊機制意味著節點可以從這些區塊中獲利。第三,以太坊增強的節點連接性為攻擊者提供了動力。