從實證來看,公鍊是安全的。縱觀其歷史(儘管還很短),公鏈確實做到了其設計用途:流暢地處理交易。這是我們有目共睹的。至於為什麼會這樣,很難想出一種理論來解釋。
面對自己看好的項目,人們通常會從他們最能理解和最看重的地方來解釋其安全性。 “某某公鏈的安全性由什麼保障?”無論你問誰這個問題,得到的答案不外乎經濟激勵、算力去中心化、全節點、持相同價值觀的狂熱社區。這沒什麼好驚訝的:正如工具定律(又稱馬斯洛的錘子)所言,人們太過依賴自己熟悉的工具。如果你手裡只有一把錘子,你就會把所有事物都當作釘子來對待。
我並不認為上述因素中的任何一個足以保障公鏈的安全性。即使一條公鏈在某一方面做到了無懈可擊,要攻擊它也絕非難事。例如,在一個所有用戶都運行全節點的網絡中,礦工依然能夠偽造另一條鏈來控制所有鏈上資產。因此,必定是各個因素相輔相成、相互影響,才能為免許可型數字現金系統提供足夠強的安全性。
剖析區塊鏈安全性的洋蔥模型
我提出了一種區塊鏈安全模型,希望將構成安全性的每個元素都清晰地展示出來。該模型旨在幫助我們更全面地看待公鏈,找出其優缺點,並對不同公鏈進行對比。公鏈的安全性就像是一顆洋蔥,每一層都增加了額外的安全性。
要想永遠摧毀一條公鏈,必須摧毀用戶對其賬本狀態(所有權清單)的信任,還要讓這條公鏈無法可靠地更新賬本狀態。外面幾個安全層都是為了防止這種情況發生。
攻擊必須通過這個漏斗狀的防禦層才能觸及核心。現在,讓我們逐一分析這些安全層。
密碼學保證
最外層保護由密碼學保證提供。密碼學是最可靠的保證形式,因此我們希望它作為第一道防線來擋住盡可能多的攻擊。密碼學主要能夠保證以下幾點:
無法憑空增發代幣:所有區塊(以及所有區塊獎勵)必須附帶有效的工作量證明。無法盜用他人的代幣:數字簽名方案可以確保代幣只能由其合法所有者使用。無法篡改之前區塊的數據:得益於哈希指針,如果有攻擊者想要篡改之前某個區塊的數據,必須重構從那個區塊開始至當前區塊的這段鏈。
上述攻擊都被攔在了第一道防線之外:
然而,強大如密碼學也有它提供不了的保障。例如,如果出現兩個同樣長的鏈,它無法決定哪條是對的(這需要來自現實世界的信息,例如“多數人會選擇哪條鏈” 和“從長遠來看哪條鏈的市值會更高” )。它也無法強迫礦工在特定區塊上挖礦,挖到區塊後立即廣播,甚至無法確保他們打包特定交易。
共識保證
一些通過第一個安全層的攻擊會在共識層被阻斷。在中本聰共識下,節點時刻關注網絡並自動切換至最長(成本最高的)鏈。只有在最長鏈上挖到區塊的礦工才能獲得報酬。因此,他們需要與其他礦工達成共識。這就導致礦工極度偏向於在鏈的頂端挖礦,只有這樣他們的區塊才最有可能被其他礦工認可。
如果有惡意礦工想要在之前的區塊上挖礦,就要與其他在鏈頂端挖礦的礦工展開競爭。他必須比其他所有礦工更快挖出區塊,才能趕上並超越他們。但是出塊速度取決於算力佔比,他成功的可能性極低,哪怕只是淺嚐輒止的重組。
要想發起有效的攻擊,攻擊者首先要獲得共識層的控制權。這就意味著,如果是工作量證明共識機制,需要控制50% 以上的算力;如果是基於拜占庭容錯的權益證明共識機制,需要控制33% 以上的押金;如果是基於最長鏈原則的權益證明共識機制,需要控制50% 以上的押金。
這類攻擊的難度通常被低估了。例如,政府通常被視為公鏈的最大威脅。然而,如果它們想要在一級市場上購買必要的硬件,很快就會發現硬件的年產量受限於中國大陸、中國台灣和韓國的芯片代工廠。而這些芯片代工廠的產量又受到澳大利亞稀土開採、亞洲和非洲的晶片生產等因素的限制。因此,芯片的年產量非常有限,即使買家再積極也無濟於事。光是買夠必要的硬件就需要至少2 到3 年,而且還沒法做到神不知鬼不覺。
除非政府沒收現有硬件來獲得50% 的算力或強迫礦池運營者聯合起來發動攻擊。這樣一開始或許行得通,但是等到礦工察覺並轉走算力就不行了。雖然這類攻擊短期內不可能發生在比特幣身上,但是那些掌握較少算力或押金的小型網絡就難說了。
經濟保證
我之前就已經論述過,得益於經濟保證,
如果某個實體控制了共識層,區塊鏈不會立即
崩潰。通過採取適當的激勵措施,區塊鏈可以讓作惡具有真實的代價。之所以能夠做到這點,是因為區塊鏈通過原生代幣引入了數字稀缺性(以及價值)的概念,可以(通過區塊獎勵和手續費)獎勵善行並(通過罰沒押金或扣發未來獎勵)懲罰惡行。
獎懲的規模與參與者對共識層的控制權成正比。如果控制較多(乃至絕大部分)算力的參與者破壞網絡,損失也會更慘重。因此,潛在的經濟損失會讓攻擊者望而卻步。
並非所有經濟激勵的效果都一樣。區塊獎勵的價值相對網絡價值越高(譯者註:意思似乎是區塊獎勵與手續費獎勵在礦工收入中所佔的比例),網絡的安全性就越高,因為這樣對礦工的利害影響越大。 (這就是為什麼區塊獎勵降低會對比特幣的安全性構成威脅)。
礦工同樣也是利益相關者,因為哈希計算需要專門的硬件(即ASIC 礦機),一旦整個網絡消失,這些硬件就會成為一堆廢鐵。因此,迄今為止,所有挖礦攻擊都發生在那些迷信抗ASIC 的小型網絡中,這並非巧合。攻擊者只需要付出很少的代價,甚至不用付出任何代價就可以控制這些網絡(例如,通過算力租用)。
社會保證
我們在上文提到過,要想永遠摧毀一條公鏈,必須摧毀用戶對其賬本狀態(所有權列表)的信任,還要讓這條公鏈無法可靠地更新賬本狀態。
這是,因為區塊鏈本身不是我們的目的地。我們沒有理由因為某條鏈臨時出現局部故障就收拾行囊打道回府。區塊鏈只是一種將社會共識建立流程自動化的手段,一種維護並更新共享數據庫的工具。數據庫的狀態對參與者有價值,因此參與者有很強的動力在系統崩潰時修復它。
例如,如果密碼學哈希函數被破解,社會層可以(在技術專家的指導下)人為達成共識來替換被破壞的部分:
同樣地,如果共識攻擊擊敗了經濟保證,社會層也會人為阻擋它。如果掌握大多數算力的攻擊者開始通過挖空塊對網絡發起DOS攻擊,全然不顧自己會遭受的經濟損失,用戶可以決定更改PoW 函數,人為解除礦工對網絡的控制權。
正如我們所見,若想永久性殺死一條區塊鏈,要么就讓用戶徹底失去對其賬本狀態的興趣,要么就將系統破壞到無法修復的程度。
當攻擊可以穿透所有安全層,最終擊潰系統的社會核心,致使其再也無法修復外圍安全層時,系統將面臨極大的危險。
為使自我修復和人為乾預都發揮作用,每個項目的社區都需要圍繞該項目的主要特性建立強有力的社會規約。以比特幣為例,其核心價值觀包括交易不可逆、抗審查性、不推行無法向後兼容的更新和2100 萬代幣發行上限。這些價值觀不僅為社會干預的提供了行為藍圖,還形成了關於修復選擇的謝林點。
一個項目的核心價值觀需要不斷地重新協商,並非所有用戶都認同這些特性。然而,社區就某個價值觀達成的共識越強,這個價值觀在危機時刻就越有可能被堅守。
如果我們將社會層視為一切區塊鏈的“原爆點(注:原子彈爆炸中心點)”,社會工程攻擊確是一大威脅。如果惡意開發者可以在沒有監督的情況下潛入系統篡改代碼,尤其是在頻繁硬分叉的系統中,就會削弱外圍安全層的防禦力(點擊此處,閱讀相關文章)。
總結
我發現洋蔥模型可以很好地剖析每一層是如何為一條區塊鏈的安全保駕護航的。在某種程度上來說,該模型是我之前的文章《剖析比特幣的社會合約》(中文譯本)的延伸:任何公鏈都源自一套共同的核心價值觀,描繪系統願景的藍圖。
這套價值觀必須被轉化為人際行為的規則(即,協議!)。然後,我們自動執行這些規則,實現不同類型的保證:經濟、共識和密碼學。系統通過約束參與者的行為來增強社會可擴展性(中文譯本),在低信任環境中相互合作、共創財富。