引介 | 區塊鏈共識協議中的密碼學敵手,Part-1
假設我們生活在一個沒有謊言的世界裡,那麼一群人之間是否更容易達成共識?烏托邦畢竟是脫離現實的,這就是為什麼會出現電腦保安技術、密碼學原語,以及最近的區塊鏈協議。
人類本質上是複雜的,我們的行為也是如此。因此,要建立多人互動的協議是個極具挑戰性的任務。每個人都會受到一組特定因素的激勵,因此對激勵的反應也不同。因此,要設計一種能夠符合普遍世界觀的演算法(即共識協議),最關鍵的是找到一組適用於絕大多數人的正確設想。
在共識協議中,凡是非預期的節點行為或是違反協議的行為都被認為是惡意的。破壞力較高的惡意行為有可能會打破協議的基本設想,並阻礙參與者達成共識。這會導致共識協議或區塊鏈協議會停留在極端狀態(有時被稱為活性失敗(liveness failure))。最壞的情況是,作惡者可能導致全網在多個不一致的視角達成偽共識,甚至推翻之前已經達成的共識,即安全性失敗( safety failures)。如果遇到這類情況,就需要通過外部干預來重啟共識演算法,這會帶來高昂的成本。因此,為了將執行成本降到最低,最關鍵的是要在一組正確設想的基礎上建立協議。
最開始的共識協議是基於簡單理想的執行環境建立的,它們的目標僅僅是在沒有作惡者的環境中,預先設定的一組節點可以達成共識。這是 最簡單 的一類共識協議,一旦設計出來,下一步自然就是進行優化。在網際網路之類的場景中,要部署無法處理任何故障或是惡意行為的協議是不現實的。這類共識協議需要預先知道網路中的所有參與節點,而且這些節點必須是誠實的,而且要保持線上,以便協議能夠正確地輸出共識。這種協議並不實用,因為就算節點是因為 通訊通道不穩定 掉線的,也會阻礙共識的達成。
不管是光纖還是網際網路都無法提供 足夠穩定的通訊通道 。如果出現停電或是掉線的情況,整個系統都可能奔潰。
因此,要建立一個更加適用於不穩定環境的系統,至少要允許節點掉線,不能假設所有節點都是完全誠實的。因此,就有了最早期的以假設存在作惡者(即, 敵手 )來判斷協議可以容忍哪幾類安全漏洞的容錯演算法。
敵手型別
第一類對敵手進行分類方法是基於它們的最高破壞力。最簡單的一類敵手是永久離線的節點。這種脫離協議的節點行為被稱為 宕機故障(crash fault) 。每當網路連線中斷或終止的時候,就會出現節點掉線的問題。要指望全世界的節點都永久保持線上是不現實的,因為一旦停電,節點就會掉線。如果資料包在傳播過程中出現延時或丟包的情況,節點也會在這幾秒鐘內失去同步。網路本身就缺乏 足夠的安全性 ,一直都是以“盡力而為”的 方式 在執行。因此,希望所有資訊都能及時交換且節點始終保持線上是不合理的。 因此,在實用型共識演算法的發展過程中,能夠容忍宕機故障的協議起到了重要作用,因為這類演算法能在網際網路上部署了。
下一代共識協議對付的是 監聽 使用者之間訊息的敵手。這類敵手會讀取通訊方之間私密訊息,從而侵犯它們的隱私性。這類敵手被稱為 被動式敵手(passive adversaries)。其 目的 是在對協議進行數輪監聽之後偽裝成誠實的參與方。這類敵手對於私密資訊傳輸協議構成了威脅,因為通過偽裝成誠實的參與方,少數惡意者可以影響多數誠實的參與方之間的共識。 在 20 世紀 70 和 80 年代,人們對這類敵手進行了研究,使用了加密和 公鑰基礎設施 等技術保護被動式敵手模型中參與方的隱私性、資料完整性和安全性。
接下來,共識協議要對付的就是能夠利用收集到的資訊肆意妄為的敵手,這類敵手的行為包括髮送錯誤或衝突的訊息。這類敵手被稱為 拜占庭敵手(Byzantine adversaries)或主動式敵手(active adversaries) 。其中,“拜占庭”一詞源自 Leslie Lamport 在 1982 年發表的標誌性論文 《拜占庭將軍問題》 。這篇論文闡述的共識問題有如下設定,假設有幾支拜占庭軍隊圍城,試圖就一起進攻還是撤退的作戰策略達成共識。在達成協議的過程中,他們面臨訊息丟失、訊息被複制和被篡改的問題。可能還會有不靠譜的信差將訊息傳錯順序,也可能會有叛將向其它隊伍傳送衝突的訊息。叛將會向一些將軍中傳遞進攻的命令,向另一些傳遞撤退或原地待命的訊息,從而確保拜占庭軍隊輸掉這場戰役。儘管存在上述挑戰,所有忠將的目標是行動一致。
同樣地,無論會遭遇什麼樣的攻擊,所有公鏈共識協議必須不斷髮展,並且始終如一。有些應用的使用者可能不想讓某些交易上鍊,從而會做出惡意行為,設法審查這些交易。這類惡意行為包括搶先交易(Front-running)攻擊、雙花攻擊,還有阻礙支付結算的交易審查攻擊等等。凡是搭建在區塊鏈之上的大型金融生態系統都會面臨這些攻擊,其共識協議要能夠容忍這些攻擊,從而實現大規模的應用。因此,公鏈共識協議必須實現拜占庭容錯。
然而,敵手的威力不僅在於惡意攻擊的力度,還在於攻擊生效或拉攏其他網路參與者所需的時間長短。
另一種對敵手進行分類的方法是基於成功拉攏某個選定節點所需的時間長短。能夠瞬時拉攏參與者的敵手被稱為“強適應型敵手”。在“靜態”敵手模型中,敵手在協議開始執行之前就可以選定他想要拉攏的參與者。之後就回天乏術了。能夠在少許時間內拉攏參與者的敵手被稱為“溫和適應型敵手”。對於敵手來說,拉攏參與者所需的時間跟 驗證者和委員的選舉流程 有關。
敵手的威力也與其算力和儲存限制緊密相關。如果敵手擁有的資源量是固定的,我們就可以設想出一種計算上安全的模型。大多數協議的常見設想是存在一種多項式有界敵手。也就是說,敵手無法在一個多項式值的步驟/時間/空間內破壞協議內的任何原語。再說白點,敵手能 夠破壞協議安全性的概率非常小 。通常來說,敵手得花上 50 到 60 年以上的時間才能破壞協議內的原語,這種程度的安全性才足夠高。另一方面,如果敵手具有極其強大的財力和權力,這個協議必須在統計學層面上是安全的。也就是說,即使敵手擁有無盡的算力,花上 10 億年也無法破壞協議。實際使用的密碼學原語大多數僅僅實現了計算層面上的安全。這種程度的安全性在 量子計算機普及 之前都是足夠高的。
經濟敵手
我們已經在算力和儲存方面做出了設想。這些設想都著眼於已經決定進行攻擊的作惡者。所有的公鏈共識協議都要複雜得多,而且它們對付的敵手通常不僅限於有意作惡者。對於那些想要持久發展的公鏈協議來說,從經濟角度設想參與者對激勵機制的反應也是很重要的一點。這些經濟設想非常重要,因為這是激勵參與者誠實行事並遵守協議規則的首要因素。所有系統都含有三類參與者。第一類是經濟理性參與者,第二類是利他主義參與者,而第三類是非理性惡意參與者。大多數區塊鏈協議在經濟激勵機制的設計上有所欠缺,無法促使經濟理性的參與者永遠遵守協議(校注:也就是說某個設計不良的激勵機制導致理性參與者破壞協議反而更能獲利),使得一些攻擊手段無法僅僅歸咎於協議的技術層面。
接下來,在本文的第二部分,我們會對一些協議進行分析,我們之前已經發表過 《除中本聰共識外的其他共識協議的元分析》 一文,從每個協議應對敵手的適應性出發,對這些協議進行了研究。如果你想要更詳細地瞭解這些敵手模型的由來,不妨閱讀一下 每個協議的隨機數生成方案 (編者注:中譯本見文末超連結《區塊鏈中的隨機數》)。
要想設計出安全的系統,瞭解敵手模型至關重要。在人類行為的建模和區塊鏈協議的建立方面,我們仍需付出很多努力。 雖然我們已經取得了很多成果,但是仍然存在一些敵手未得到解決,它們對我們所建立的系統有致命的威脅。 正如 Vitalik 所說:“密碼經濟學就好像一群智商為 5 的人想要控制一群智商為 150 的人”。人類行為總是很難建模,不過隨著密碼經濟學之類的領域出現,我們在設計系統之時更能捕捉到人類複雜性的多個層次。 即便如此,在密碼經濟學領域之外,依然存在 很多解決方案 。 將新領域的開發和舊概念的複用巧妙結合起來,將產生一些新的敵手建模方法,並有助於設計出更安全的系統。
推特:@ aparnalocked
致謝:特此感謝 Zubin Koticha 、 Alexis Gauba 和 Sunny Aggarwal 在我撰寫本文的過程中對我的幫助。
作者:Aparna Krishnan
翻譯&校對:閔敏 & Elisa