根據經驗,公有鏈是安全的。自(不久前)問世以來,它們大多數時間都在完成預期目的,順利流暢地處理交易。這一點我們有目共睹。但卻很難想出一個理論來解釋其中緣由。
人們通常會用自己最理解和最看重的點來解釋其拿手項目的安全性。至於公有鏈為何安全,不同人看法不一:要麼因為有經濟激勵措施的保障,要麼因為有遍布全球的哈希算力背書,要麼因為有全節點的保護,要麼因為有一個狂熱的社區在維護一套共同的價值觀。這種現象也不足為奇:根據工具定律(鏈接1),人們會對自己已經熟悉的工具過度依賴。如果你手裡只有一把鎚子,那麼所有的東西看上去都像一根釘子。
在我看來,上述任一因素都無法獨自解釋該現象。即便某一特定領域的保護無懈可擊,要想出成功的攻擊招數也是輕而易舉。例如,在一個所有用戶都運行一個全節點的網路中,礦工仍然可以將整個區塊鏈替換為由他控制所有幣的備用區塊鏈。因此,要實現開放式數字現金系統所需的安全,必定需要不同部分相互結合與相互作用。
區塊鏈安全的洋蔥模型
我提出的模型旨在整合安全性的各個要素,幫助讀者形成全面系統的理解。目標是更全面地研究公有鏈,發現優勢和劣勢,以及對不同的區塊鏈進行比較。
公有鏈的安全性類似於洋蔥,其每一層都增加了額外的安全性:
要永久性地破壞一條公有鏈,必須破壞其賬本狀態(所有權列表)中用戶的信念,以及可靠地向前更新該狀態的能力。所有更高的層均可防止該情況的發生。
攻擊必須穿過漏斗型的各個防禦層才能到達核心。下面我們逐一討論其中各層。
加密保障
最外層的保護由加密保障提供。加密是最可靠的保障形式,因此我們委以重任,從一開始便派它來防止大多數攻擊。除其他作用外,加密可以確保:
不能憑空印刷代幣:所有區塊(以及所有區塊獎勵)都必須附有足夠的工作量證明(proof of work)。
無法使用他人的代幣:數字簽名方案可確保僅代幣的有效所有者有代幣的使用權。
無法對舊區塊的內容作出追溯性的更改:哈希指針確保攻擊者如想更改任何舊區塊,就必須更改該區塊上構建的所有區塊。
上述所有攻擊均被第一層保護擋在門外。
雖然加密的功能非常強大,但仍有它無法提供的其他保障。例如,它無法確定兩條等長的區塊鏈中哪一條是「正確的」(這需要具備現實世界的知識,例如「其他人會切換到其中的哪條鏈」和「長遠看來,哪一條鏈具有更高的市場價值」)。它也無法強迫礦工在特定的區塊上挖礦,無法即刻發布剛發現的區塊,甚至也無法確保將特定交易包括進來。
共識保障
通過第一層的某些攻擊將在共識過程中被阻止。在中本聰共識(Nakamoto consensus)中,節點不斷觀察網路並自動切換到最長(最昂貴)的鏈上。礦工只有在其區塊最終成為該最長鏈的一部分時才能獲得報酬,所以他們需要與其他礦工融合。因此,礦工們存在很強的偏見,都想在區塊鏈的頂端挖礦,因為在這裡,他們的區塊最有可能被其他所有人認可。
如果流氓礦工想在前一個區塊挖礦,他將與其他繼續在最長鏈頂端工作的礦工進入競爭狀態。只有當他發現幾個比其他所有人相加總和還快的區塊時,才能迎頭趕上,繼而開始領先。但視他的哈希算力份額而定,即便他只進行了非常淺層的重組,他也不太可能成功。
要可靠地發起攻擊,攻擊者需要首先獲得對共識層的控制。這意味著控制工作量證明中50%以上的哈希算力,或基於BFT的權益證明中33%以上的佔比,或基於最長鏈的權益證明中50%以上的佔比。
這種控制的操作困難常常被低估。例如,大型政府通常被視為公有鏈的最大風險。但是,如果他們想在初級市場上購買必要的硬體,很快就會發現硬體的年產量受到中國大陸、台灣和韓國的晶元代工廠的限制。而這些代工廠的生產能力又進一步受到澳大利亞稀土開採、亞洲和非洲晶片生產等因素的限制。即便對於高度積極的買家而言,每年的可用產量也有限。以這種方式來獲取必要的硬體可能需要至少2-3年,而且也無法做到神不知鬼不覺。
只有中國大陸可能通過沒收現有硬體或迫使池所有者發動一次攻擊的方式來獲得50%的算力。在個人礦工開始察覺並將其哈希算力轉移至別處之前,這或許暫時行得通。雖然短期內不太可能對比特幣發起這樣的攻擊,但較小的網路相應地控制著較小的哈希算力或權益份額。在這種情況下,潛在攻擊者也可能對小型(流氓)政府和整個私營部門發起攻擊。
經濟保障
我之前曾提到,由於有經濟保障的緣故,倘若單個實體控制了共識層,區塊鏈並不會立即中斷(鏈接2)。通過設定適當的激勵措施,區塊鏈可以將實際成本與不良行為關聯起來。而這一能力的實現來自於原生代幣,其引入了數字稀缺性(進而衍生出價值)的概念,該概念可以(用區塊獎勵和費用)獎勵良好行為並(通過削減保證金或預扣未來獎勵)懲罰不良行為。
這些激勵措施的規模與參與者對共識層的控制程度成正比。控制許多(甚至是大多數)哈希算力的參與者若破壞系統,會按比例遭受更多損失。因此,可通過對攻擊者設定經濟懲罰來阻止其發動攻擊。
如果流氓礦工想在前一個區塊挖礦,他將與其他繼續在最長鏈頂端工作的礦工進入競爭狀態。只有當他發現幾個比其他所有人相加總和還快的區塊時,才能迎頭趕上,繼而開始領先。但視他的哈希算力份額而定,即便他只進行了非常淺層的重組,他也不太可能成功。
並非所有的經濟激勵措施都是平等的。區塊獎勵比網路價值更大的網路更加安全,因為它迫使礦工在遊戲中投入更多籌碼。(這就是區塊補貼下降對比特幣安全構成風險的原因(鏈接3))。
當哈希演算法需要無法在網路消失時重新利用的專用硬體【所謂的專用集成電路(ASIC)】時,礦工在這場遊戲中投入的籌碼也會更多。迄今為止,所有挖礦攻擊都發生在規模較小的網路上,這些網路都受制於一種叫做ASIC抗性的謬論,即很少甚至無需參與遊戲,便可獲得控制權(例如:通過租用哈希算力(鏈接4)),這絕非偶然。
社會保障
上文曾提到,要永久性地破壞一條公有鏈,必須破壞其賬本狀態(所有權清單)中用戶的信念,以及可靠地向前更新該狀態的能力。
這是必要的,因為區塊鏈並非目的本身。沒有必要因為其中某些部分暫時無法使用就收拾行李打道回府。區塊鏈僅僅是在參與者之間自動建立社會共識的一種手段,是維護和更新共享資料庫的一種工具。該資料庫的狀態對參與者有價值,並且強烈激勵他們在系統崩潰時恢復系統。
例如,如果加密哈希函數中斷,則社交層可以(在技術專家的指導下)達成手動共識來替換中斷的部分:
同樣地,如果共識攻擊超出了經濟保障的階段,社會層仍然可以手動拒絕它。如果具有多數哈希算力的攻擊者開始通過挖掘空塊來對網路發動DOS攻擊,並且完全接受對他自己造成的經濟損失,那麼用戶可以決定更改PoW函數,從而手動解除該礦工的控制權。
如我們所見,永久性破壞區塊鏈的唯一方法是要麼使用戶對賬本狀態本身失去興趣,要麼將系統破壞至無法修復的程度。
當攻擊可以穿透所有層並最終耗盡系統的社會核心,直到系統無法再覆蓋對更高層的破壞和自我修復時,攻擊就變得危險了。
要使自我修復和手動干預都起作用,每個項目的社區都需要圍繞各自項目的主要屬性建立強大的社會規約。就比特幣而言,這些核心價值是交易的不可逆性、抗審查能力、沒有向後不兼容的變化和2100萬枚的比特幣供給上限。它們是何時需要社會幹預的行動藍圖,並圍繞需要解決和不需要解決的問題創建謝林點(Schelling point)。
項目的這些核心價值需要不斷地重新協商,且並非所有用戶都同意所有屬性。但是,圍繞特定價值達成的協議越強,該價值在困難時期就更有可能得到維護。
如果將社交層視為任何區塊鏈的歸零點,便可發現社會工程攻擊是一大威脅。如果流氓開發者能在沒有監督的情況下潛入系統進行有害的代碼更改,尤其是在頻繁實施硬分叉政策的項目中(該主題的推薦閱讀文章(鏈接5)),那麼更高的層將變得更加脆弱。
結論與展望
我發現洋蔥模型有助於了解區塊鏈的各層如何創建一個安全的整體。在某種程度上,
猜你喜歡
文章評論
冷萃財經原創,作者:Awing,轉載請註明出處:https://www.lccjd.top/2020/06/13/%e5%8c%ba%e5%9d%97%e9%93%be%e5%ae%89%e5%85%a8%e7%9a%84%e6%b4%8b%e8%91%b1%e6%a8%a1%e5%9e%8b%ef%bc%9a%e6%af%8f%e4%b8%80%e5%b1%82%e9%83%bd%e5%a2%9e%e5%8a%a0%e4%ba%86%e9%a2%9d%e5%a4%96%e7%9a%84%e5%ae%89/?variant=zh-tw
文章評論