想象我們生活在一個人人都誠實的世界。這難道不會達(dá)成共識的情況變得更容易嗎?烏托邦離現(xiàn)實還很遠(yuǎn),這就是為什么我們有計算機(jī)安全技術(shù)、加密貨幣原語以及最近的區(qū)塊鏈協(xié)議。
人類本質(zhì)上是復(fù)雜的,他們的行為也是如此。因此,處理許多交互的協(xié)議是一項相當(dāng)具有挑戰(zhàn)性的任務(wù)。每個人都受到一系列獨特因素的刺激,因此對刺激的反應(yīng)也不同。因此,找出適用于大多數(shù)人類的一套正確的方法,是設(shè)計一種算法以就共同世界觀(即共識協(xié)議)達(dá)成一致意見的重要一步。
在協(xié)商共識協(xié)議中,任何超出節(jié)點預(yù)期行為且不遵守協(xié)議的行為都被認(rèn)為是惡意的。大量惡意活動可能會破壞協(xié)議的基本假設(shè),并阻止協(xié)議參與者達(dá)成一致意見。這導(dǎo)致共識或區(qū)塊鏈協(xié)議在最好的情況下被迫停止(有時稱為活性失敗)。在最壞的情況下,惡意的參與者可能會對多個不一致的視圖產(chǎn)生錯誤的協(xié)議,甚至?xí)?dǎo)致已經(jīng)達(dá)成的協(xié)議(安全故障)的倒退。這種情況需要昂貴的外部干預(yù)來重新啟動共識算法。因此,使用正確的假設(shè)集創(chuàng)建協(xié)議是至關(guān)重要的,以便避免昂貴的操作。
開發(fā)的第一套共識協(xié)議傾向于在簡單的對抗性假設(shè)下運行。我們的目標(biāo)只是通過假設(shè)一個沒有惡意參與者的環(huán)境,讓預(yù)先確定的節(jié)點集達(dá)成一致。這是一個微不足道的問題,一旦設(shè)計了這樣的協(xié)議,下一步自然就是改進(jìn)它們。不能處理任何類型的錯誤或惡意操作的協(xié)議在某些設(shè)置(如internet)中是不切實際的。這些協(xié)議要求提前知道所有參與的節(jié)點,并要求所有這些節(jié)點保持在線狀態(tài),同時始終誠實行事,以便協(xié)議正確終止。但這是不切實際的,因為即使一個節(jié)點因為不穩(wěn)定的通信通道而離線,它也可能阻止共識。
無論是光纜還是互聯(lián)網(wǎng)本身都無法提供足夠可靠的通信渠道。在斷電或網(wǎng)斷開的情況下,系統(tǒng)將失效。
為了構(gòu)建一個在不穩(wěn)定環(huán)境中實際上更有利的系統(tǒng),系統(tǒng)必須至少允許節(jié)點脫機(jī)。它不能假設(shè)所有節(jié)點都是完全誠實的。因此,通過創(chuàng)建被稱為“對手”的惡意行為者,最早應(yīng)該假定哪種類型的安全漏洞協(xié)議能夠容忍。
對手的類型
對對手進(jìn)行分類的第一種方法是基于對手所能采取的最有力的行動。這類最簡單的對手只是會永久離線的節(jié)點。這種節(jié)點的協(xié)議偏離行為被稱為崩潰故障。當(dāng)互聯(lián)網(wǎng)連接中出現(xiàn)任何形式的中斷或終止時,節(jié)點就會脫機(jī)。期望全球多個節(jié)點在互聯(lián)網(wǎng)上一直在線是不切實際的,因為任何斷電都可能導(dǎo)致節(jié)點離線。如果互聯(lián)網(wǎng)上的數(shù)據(jù)包被丟棄或延遲發(fā)送,節(jié)點也可能在幾秒鐘內(nèi)失去同步?;ヂ?lián)網(wǎng)本身還不夠安全,只能以“盡我所能”的方式提供數(shù)據(jù)包。因此,期望所有的信息都能及時交換,所有節(jié)點都保持在線狀態(tài)是不合理的。因此,容錯協(xié)議在開發(fā)實際工作的共識算法方面發(fā)揮了重要作用。
下一個迭代的協(xié)議處理可能是竊聽用戶之間發(fā)送消息的對手。這些對手可能會通過閱讀不打算與任何人分享的信息來侵犯通信各方的隱私。這些對手被稱為被動對手。這種類型的對手的目標(biāo)是在監(jiān)聽了多輪協(xié)議后冒充誠實的參與者。這些對手對那些本應(yīng)傳輸機(jī)密信息的協(xié)議構(gòu)成了威脅。這些敵人也是一種威脅,因為少數(shù)不誠實的人能夠影響大多數(shù)誠實人所同意的價值,因為少數(shù)人可以模仿其他誠實的人。這些類型的對手在20世紀(jì)70年代和80年代被研究過。加密貨幣和其公鑰基礎(chǔ)設(shè)施是用于在被動對抗模型中保持隱私、數(shù)據(jù)完整性和安全性的技術(shù)。
很自然地,下一步是用協(xié)議來處理那些可以利用他們收集的信息來任意行動的對手。這可能包括發(fā)送錯誤或沖突的消息。這些對手被稱為拜占庭或活躍的對手。拜占庭這個詞來源于萊斯利·蘭波特1982年寫的一篇里程碑式的論文,叫做“拜占庭將軍問題”。這篇論文描述了圍繞一個城市的拜占庭軍隊面臨的共識問題,他們試圖就是否應(yīng)該進(jìn)攻或撤退達(dá)成一致。當(dāng)他們試圖達(dá)成協(xié)議時,他們面臨著信息被刪除、復(fù)制和修改的問題。不誠實的將軍們的目的是為了確保軍隊在戰(zhàn)爭中敗下陣來,他們使一部分進(jìn)攻,另一部分撤退,或者干脆不采取行動。盡管存在所有這些挑戰(zhàn),但所有誠實將軍的目標(biāo)都是以一種共同的方式行事。
攻擊還是不攻擊?
類似地,任何公共區(qū)塊鏈共識協(xié)議都必須能夠增長,并且在任意攻擊的情況下保持一致。某些應(yīng)用程序的用戶可能不希望某些事務(wù)被記錄在區(qū)塊鏈上,也可能會積極采取惡意行動,并試圖審查這些事務(wù)。這些例子包括前面運行的攻擊、雙重攻擊和交易審查攻擊,以防止支付渠道的結(jié)算。一旦有一個依賴于區(qū)塊鏈的巨大金融生態(tài)系統(tǒng)存在,并且協(xié)議需要能夠容忍這些攻擊,才能使其在大范圍內(nèi)實際可用,那么也就是說這些攻擊是可以預(yù)見的。因此,公共區(qū)塊鏈共識協(xié)議必須是拜占庭容錯協(xié)議。
然而,對手的力量不僅僅是對手所能采取的最激烈的行動。它還需要考慮對手的行動生效所需的時間,或者對手破壞不同參與者所需的時間。
另一種對對手進(jìn)行分類的方法是,對手在決定了要腐敗的對象之后,多久才能腐敗另一個節(jié)點。如果對手可以瞬間腐蝕參與者,那么對手就被稱為“強(qiáng)適應(yīng)性”。在“靜態(tài)”對抗性模型中,在協(xié)議執(zhí)行開始之前,對手可以選擇他們想要破壞的參與者。 在那之后,就不能做任何改變了。那些需要一段時間(比瞬時時間長,但比無限時間短)來破壞協(xié)議參與者的對手被稱為“溫和適應(yīng)性”。對手破壞協(xié)議參與者所需的時間與選擇驗證器和委員會成員的過程有關(guān)。
對手的力量也與對手的計算和存儲限制緊密相關(guān)。如果假設(shè)對手有一定數(shù)量的資源,那么我們可以假設(shè)一個計算安全的模型。大多數(shù)協(xié)議的共同假設(shè)是存在多項式有界的對手。這意味著一個對手不能在多項式數(shù)量的步驟/時間/空間中破壞協(xié)議的任何一個原語。這也意味著對手可以以很小的概率破壞協(xié)議的安全性。這通常就足夠了,因為這意味著對手要花上50-60年的時間才能用這種級別的安全性來破壞原語。另一方面,如果對手被認(rèn)為是非常豐富和強(qiáng)大的,協(xié)議必須在統(tǒng)計上是安全的。這意味著即使有無限的計算資源也需要花費10億年時間,實踐中使用的大多數(shù)加密原語都在計算上安全的。
經(jīng)濟(jì)對手
到目前為止,我們考慮了基于計算和存儲考慮的假設(shè)。所有這些假設(shè)都聚焦于那些決定攻擊系統(tǒng)的參與者。所有公開的區(qū)塊鏈共識協(xié)議都是很復(fù)雜的,通常需要對付的對手比那些確定要攻擊系統(tǒng)的對手多。從長遠(yuǎn)來看,對于公共區(qū)塊鏈協(xié)議來說,與參與者如何應(yīng)對激勵措施相關(guān)的經(jīng)濟(jì)假設(shè)是一個重要方面。這些都是很重要的,因為它們決定了什么能激勵一個人誠實行事,并從一開始就遵守協(xié)議。在任何系統(tǒng)中都有三種角色。
第一種是經(jīng)濟(jì)上的理性,第二種是利他的,第三種是非理性的惡意。設(shè)計的大多數(shù)區(qū)塊鏈協(xié)議并沒有使經(jīng)濟(jì)理性的參與者始終與遵循協(xié)議的動機(jī)保持一致,這導(dǎo)致了在協(xié)議級別上可能無法解釋的幾個攻擊向量。