當前位置:
首頁 > 最新 > 乾貨 遠程攻擊

乾貨 遠程攻擊

遠程攻擊:適應性工作量證明的嚴峻問題

編者按:這是 Vitalik 在2014年5月發布的博文,提出了遠程攻擊(Long-Range Attacks)的概念。

我們目前的工作量證明設計是基於區塊鏈的工作量證明,這是我們第二次嘗試構建保證不會給 CPU 造成負擔並且長期來看是抗專用硬體(ASIC)挖礦的演算法(編者按:即在長期挖礦的情況下,使用 ASIC 不能明顯提高優勢)。我們第一次嘗試的是 Dagger,試圖通過有向無環圖構建一個計算時 memory-hard、驗證時 memory-easy 的演算法(譯者按:即計算時會佔用大量內存、驗證時不會),從而進一步發展 Scrypt 等 memory-hard 演算法的概念(從根本上來說是每個節點都有多個父節點的樹)。我們目前的策略要嚴密得多:讓工作量證明執行來自區塊鏈的隨機合約。由於以太坊採用的是圖靈完備的腳本語言,能夠執行以太坊腳本的 ASIC 從定義上來說是用於通用計算的 ASIC,也就是 CPU——技術宅一點來說就是「這是 memory-hard 演算法,因此你沒法並行處理太多指令」。當然還有「那麼能否(對ASIC)進行特定優化,使得速度大大提升?」等問題,不過這些都是假以時日可以解決的小瑕疵。我們的解決方案很巧妙,因為它兼具經濟實惠的特點:如果有人真的創建了一個 ASIC,那會激勵其他人尋找該 ASIC 無法進行的計算類型並用這類合約充斥且污染區塊鏈。不過遺憾的是,這類方案通常面臨一個更大的障礙,從某種程度上來說還是一個根本障礙:遠程攻擊。

遠程攻擊的運行流程基本如下。在傳統的51%攻擊中,我先將100枚比特幣存入一個全新的賬戶,再用這100枚比特幣購買某個即時交付的數字商品(如萊特幣)。我等待賣家交付(比方說要等到6次確認之後),之後我立即從100枚比特幣的轉讓交易達成前的一個區塊開始構建一條新的區塊鏈,並且重新提交一份將這些比特幣轉回我的賬戶的交易。之後,我為自己的分叉鏈使用了超出剩餘網路提供給主鏈的算力來挖礦,最後我的分叉鏈超越並取代了主鏈。結果是我將比特幣和萊特幣雙雙收入囊中。在遠程攻擊中,我開始製造分叉的地方不再提前6個區塊,而可以提前60000個區塊,甚至可以從創世塊開始。

在比特幣中,這種分叉是無效的,因為你只是在徒增趕上主鏈所需的時間。然而,這對基於區塊鏈的工作量證明來說是一個嚴峻的問題。因為如果你直接從創世塊開始製造分叉,儘管你的挖礦過程一開始會很緩慢,但在鏈接幾百個區塊之後就能夠用很容易挖出的合約將這條區塊鏈填滿,而別人要想挖掘這些合約卻難比登天。關於這類合約,有一則簡單的例子:

你清楚地知道該合約在與哈希值匹配之前將經歷整整一百萬輪計算,那麼你就可以立刻準確地計算出該合約在這一過程中將經歷幾個步驟、消耗多少gas,最後又會變為什麼狀態,然而其他人別無選擇,只能實實在在地運行代碼。實際上,要構建一個不經過實際運行就能在一般情況下檢測出這類投機取巧的合約的機制是不可能的(此處可經由數學證明,而非憑空臆斷),這既是這類方案的一個重要特性,也是停機問題的必然結果。因此,遠程攻擊者可以用這類合約填補分叉鏈,「挖掘」這類合約,明明走了捷徑,卻讓網路相信他做了大量工作。因此,不出幾日,我們的攻擊者的挖礦速度就會是主鏈的數十億倍,其長度很快就超越了主鏈。

要注意的是,上述攻擊沒有對演算法的實際運行方式作出假設;而只是假設了有效區塊產生的條件取決於區塊鏈本身, 而且每單位算力在區塊鏈上可以產生的影響力程度具有廣泛的可變性。一種解決方案是人為抑制這種可變性;這需要通過一個哈希樹計算堆棧追蹤合約演算法來實現,這樣一來就無捷徑可走了,因為即使你知道計算會在一百萬步之後終止併產生一個輸出值,你依然需要親自運行一百萬步來計算出所有中間的哈希值。然而,雖然這解決了遠程攻擊問題,但也導致了主要計算並非通用計算,而是計算出許許多多SHA3哈希值——使得演算法再度易於受到專用硬體的影響。


還有一種遠程攻擊是純權益證明演算法。在純權益證明中, 假設在創世塊產生之時或之後不久,攻擊者持有代幣總量的1%。之後,攻擊者開始製造自己的分叉鏈並開始挖礦。雖然,攻擊者在當時只有1%的概率被選中生產區塊,他們輕易就能產生100倍數量的區塊,以此創造出一條更長的區塊鏈。我原本認為這是個根本問題,但它實際是可以變通解決的。例如,一種解決方案是注意每個區塊必須有對應的時間戳,而且用戶要抵制那些時間戳遠遠早於他們自己時間戳的鏈。這樣一來,遠程攻擊就必須合乎相同的時間長度,但是由於它涉及的代幣單位少得多,其得分也會低得多。另一種解決方案至少需要代幣總量的一定百分比(如30%)為每個區塊或是每第N個區塊背書,這樣絕對能抵禦少於該百分比的代幣量的一切攻擊。我們自己的權益證明演算法 Slasher 很容易就能更新成上述任一解決方案。

因此從長期看來,純權益證明或混合工作量/權益證明似乎都是區塊鏈的發展方向。在採用混合工作量/權益證明的情況下,人們很容易就能找到一個方案,利用權益證明來解決上述通過基於區塊鏈的工作量證明解決的問題。對於 Ethereum 1.0,我們可能會採用權益證明,可能會是一種混合型方案,可能還是那套老掉牙的 SHA3 演算法。我們明白 ASIC 不會有所發展,因為 Ethereum 2.0 到來在即,ASIC 的生產商會認為此舉無利可圖。然而,還有一大挑戰尚未解決:分散式模型。欲知我的看法如何,敬請期待該系列的下一篇文章。

本文由作者授權 EthFans 翻譯及再出版。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 以太坊愛好者 的精彩文章:

以太坊正在為下一次硬分叉做準備·以太坊核心開發者第32次例會

TAG:以太坊愛好者 |