作者: Jameson Lopp
翻譯&校對: 閔敏 & 阿劍
人們在討論不同密碼學貨幣的共識機制時經常會產生爭議,主要是因為他們對這些密碼學貨幣用來保護賬本歷史數據的安全模型缺乏了解(定義),雖然所有共識模型都是在防范各種理論上的攻擊,但是了解這些模型的目的非常重要,
安全模型可以分為兩個部分:假設(assumption)和保證(guarantee)。如果用作輸入的假設成立,則安全模型輸出的保證也應成立。
讓我們來深入探索比特幣為其全節點運營者提供的安全模型。
求真
分布式賬本旨在提供有序的事件記錄,因為在分布式系統中你不能單純地信任時間戳。
新的參與者剛加入一個區塊鏈網路時,會從軟體硬編碼的創世塊開始下載所有可獲得的區塊,然后鑒別整條區塊鏈的有效性。
比特幣安全模型最重要的假設之一是絕大多數礦工都是誠實的 —— 他們在努力保護區塊鏈的安全性,而不是試圖破壞它。實際上,縱觀比特幣的發展史,得益于有效的礦工激勵機制,這個假設至今未被打破,雖然已經有人懷疑它能否長期保持,
有了這個假設作為前提,全節點運營者完全可以確信:
- 除礦工之外沒人能增發比特幣,而且比特幣的供應量會嚴格按照發行計劃表增加,
- 沒有私鑰就無法花費對應的比特幣,
- 沒有人可以重復花費同一筆比特幣。
在比特幣區塊鏈強有力的保證下,全節點運營者還可以確信以下兩點:
- 任何比特幣區塊都是在其時間戳的大約兩小時內創建的,
- 他們正在同步的是 “真實的” 區塊鏈歷史,
從技術層面來講,比特幣區塊需要經過大量檢查:
- 所有區塊都遵守共識規則:
- 每個區塊都與其父塊相連
- 每個區塊都達到目標難度值,并且有充足的工作量證明
- 區塊時間戳位于與上一最新區塊之間的時間窗口內
- 默克爾根與區塊所記載的交易相匹配
- 區塊大小不超過上限
- 每個區塊的第一筆(也只有第一筆)交易是 coinbase 交易
- Coinbase 輸出不超過區塊獎勵
- 區塊內包含的簽名操作不超過許可范圍
- 所有交易都遵守共識規則:
- 輸入值和輸出值都是合理的
- 交易只花費還未被花費過的輸出
- 所有即將花費的輸入都有有效簽名
- coinbase 交易創建后的 100 個區塊內,該 coinbase 交易的輸出無法花費
- 當某筆交易仍處在區塊確認的窗口期,其輸出就不能花費
- 篇幅有限,其余規則不作贅述
熱力學安全性
區塊內的交易一經確認無法回滾,除非有人花費大量能源重寫這條鏈。只要沒有攻擊者擁有全網 50% 以上的算力,且誠實的節點可以快速通信,發生交易回滾的概率就會隨著交易確認次數呈指數級下降,其它類型的攻擊(例如,自私挖礦)雖然沒有這么高的能耗需求,但是實施起來很難,
– 來源:Yonatan Sompolinsky1 和 Aviv Zohar 撰寫的 Bitcoin’s Security Model Revisited –
從比特幣礦工當前的累積工作量來看,攻擊者需要計算出將近 10^26 個哈希值,才能從創世塊開始構建出一條累積工作量證明更多的鏈。全節點會將這條鏈視為 “合法” 的鏈,
– 來源:http://bitcoin.sipa.be –
我們來計算一下 51% 攻擊的成本:
一臺螞蟻礦機 S9 的功耗是 0.1 J/GH(10^9 hash)。
10^26 hash * 0.1 J / 10^9 hash = 10^15 J
10^15 J = 2,777,777,778 kw/h * $0.10 kw/h = $277,777,778(重寫整條區塊鏈所需的電力成本)
撰寫本文時,一個區塊必須達到 253,618,246,641 的目標難度值,這大約需要:
253,618,246,641 * 2^48 / 65535 = 1.09 * 10^21 hash
1.09 * 10^21 hash * 0.1 J / 10^9 hash = 1.09 * 10^11 J
1.09 * 10^11 J = 30,278 kw/h * $0.10 kw/h = $3,028(創建每個區塊所需的電力成本)
因此,我們可以說比特幣具有熱力學安全性。
你可以調整上述計算中的一些變量來降低成本,但我們可以肯定的是,僅重寫整條區塊鏈就需要價值數百萬美元的電力,然而,在最壞的情況下,擁有如此強大算力的攻擊者能夠將交易回滾至 2014 年 —— 我們很快就會深入探究其原因,另外請注意,購買和運行礦機所需的成本并未考慮在內,
抗女巫攻擊
由于比特幣協議認為累積工作量證明最多的鏈才是合法的鏈(最長鏈原則是常見的誤解),新加入網路的對等節點只需與另一個誠實的對等節點建立連接,就可以找到合法的鏈,這也被稱為抗女巫攻擊,這意味著攻擊者無法通過運行多個不誠實的對等節點來向某個對等節點提供虛假資訊,
上圖顯示了一個近乎最糟糕的情況:你的節點遭受了大規模女巫攻擊,但是依然與一個誠實的節點保持連接,就可以通過這個節點連接至真正的區塊鏈。只要有一個誠實的對等節點將真實的區塊鏈數據傳輸給你的全節點,你的節點就會識破那些試圖欺騙你的女巫攻擊者,然后將它們忽略,
實時共識
當你的節點同步至區塊鏈頂端時,你就會發現比特幣協議通過其它一些有趣的屬性來維護全網共識。
《比特幣和其它密碼學貨幣的研究視角及挑戰》的作者指出,以下特性對密碼學貨幣的穩定性來說至關重要:
最終共識。在任何時候,所有遵守規則的節點都要就最終的 “合法” 區塊鏈的最新一個區塊達成共識,
指數級收斂。深度為 n 的分叉的概率是 O(2−n)。這使得用戶堅信他們的交易可以在 “k 次確認” 后得到永久結算。
活性,新區塊會不斷生成,支付適當交易費的有效交易會在合理時間內被打包上鏈。
正確性。在累積工作量證明最多的鏈上,所有區塊內包含的交易都是有效的,
公平性。擁有全網總算力 X % 的礦工可以挖出大約 X% 的區塊,
論文作者指出,比特幣看起來具備上述特性,至少是在假設大部分礦工都保持誠實的前提下。這就是區塊獎勵和工作量證明機制想要達到的目的。
還有許多其它算法可以用來維護分布式系統中的共識,例如:
- 權益證明(PoS)
- 幣齡證明(Proof of Coin Age)
- 質押證明(Proof of Deposit)
- 燃燒證明(Proof of Burn)
- 活動量證明(Proof of Activity)
- 耗時證明(Proof of Elapsed Time)
- 聯合共識(Federated Consensus)
- 實用型拜占庭容錯(Practical Byzantine Fault Tolerance)
上述算法創建了不同的安全模型 —— 與工作量證明最明顯的區別在于,基于這些算法的系統都是以消耗內部資源(幣或聲譽)而非外部資源(電力)來達成共識的。受其影響,這些系統對網路中驗證者的激勵措施和信任需求各不相同,極大地改變了安全模型,
安全模型誤區
一個常見的誤區是,比特幣有一個明確定義的安全模型。
事實上,無論是過去還是現在,比特幣協議都沒有一個正式定義的規范或安全模型。我們能做的最好的事情就是研究系統參與者的動機和行為,以便更好地理解和描述比特幣的安全模型。
盡管如此,經常有人誤解了比特幣協議的一些特性。
一些區塊鏈存在很嚴重的隱患,因為開發者在節點軟體中增加了專斷設定的已簽名檢查點,表示 “開發人員已經確認區塊 X 位于正確的那條鏈上”。這是一個極端中心化的單點問題,
值得一提的是,比特幣有 13 個被硬編碼的檢查點,但是這些檢查點并沒有像被專斷設定的檢查點那樣改變安全模型。最后一個檢查點被添加到了 Bitcoin Core 0.9.3 內,區塊高度是 295000 (創建于 2014 年 4 月 9 日)。這個區塊的難度值是 6,119,726,089,所需電力成本約為:
6,119,726,089 * 2^48 / 65535 = 2.62 * 10^19 hash
2.62 * 10^19 hash * 0.1 J / 10^9 hash = 2.62 * 10^9 J
2.62 * 10^9 J = 728 kw/h * $0.10 kw/h = $73(創建該區塊所需的電力成本)
因此,如果女巫攻擊者將一個新加入的節點(需要從頭開始進行同步)圍住,幾乎不需要任何成本就可以在較低的區塊高度創建較短的區塊鏈,但是不能超過檢查點,
如果女巫攻擊者將一個節點從同步超過區塊高度 295,000 的網路分離出來,就能以每個區塊 73 美元的成本開始提供虛假區塊,至少是在發生難度調整之前。但是,受害節點同步的區塊鏈越長,攻擊者創建一條累積工作量證明更多的鏈所需的成本越高,
Greg Maxwell 和 Pieter Wuille 都表示,他們希望某天能完全移除檢查點。Bitcoin Core 的維護負責人 Wladimir van der Laan 指出,對于那些想要了解比特幣安全模型的人來說,檢查點經常使人感到困惑。
可以說,位于區塊高度 295,000 的檢查點意味著,全節點 “相信” Bitcoin Core 開發者所說的 2014 年 4 月 9 日之前的區塊都是有效的,但是,全節點依然會檢查每個區塊頭里的默克爾哈希值,也就是說,交易歷史的有效性依然受到工作量證明的保護。首次同步歷史區塊鏈時,這些舊的檢查點可以改善性能(跳過簽名驗證),盡管 libsecp256k1 的引入讓性能差異變得不那么明顯。
檢查點存在的目的主要有三個:
- 防止節點的內存被有效但低工作量證明的區塊頭占滿,
- 跳過早期區塊內的簽名(提升性能)。
- 估量同步進度,
在撰寫這篇文章時,Greg Maxwell 提出使用累積工作量證明檢查來代替檢查點,一旦節點成功同步了某條包含超過 5.4 * 10^24 次哈希計算工作量的鏈,累積工作量證明較少的那條鏈就會被拒絕,這恰好與 2014 年 9 月創建的區塊 320,000 的工作量大致相符,這時單個區塊的難度值約為 27,000,000,000,
– 來源:Blockchain.info –
當難度值為 27,000,000,000 時,挖礦需要計算大約 27,000,000,000 * 2^48 / 65535 = 1.16 * 10^20 次哈希函數。
1.16 * 10^20 hash * 0.1 J / 10^9 hash = 1.16 * 10^10 J
1.16 * 10^10 J = 3,222 kw/h * $0.10 kw/h = $322(平均創建每個區塊所需的電力成本)
因此,根據提議進行修改后,如果女巫攻擊者將一個需要從頭開始同步的全新節點完全包圍起來,就可以從任一區塊開始向這個節點發送虛假的區塊數據,而且幾乎不需要成本。如果女巫攻擊者將一個已經同步超過區塊 320,000 的節點完全包圍起來,那么從區塊 320,000 開始向該節點發送每個虛假區塊的成本是 322 美元。
簡而言之,如果一個實體可以完全控制你的節點的網路連接,無論是采用哪種方式對節點的初始同步進行檢查,攻擊成本都相對較低;如果你的節點的網路連接不受任何實體的控制,就可以輕而易舉地忽略來自攻擊者的區塊。
(未完)