這篇文章系統性地分析了 PoW 與 PoS 的安全性優劣之處,得出了很多不同的結論。

  • 支撐 PoW 安全性的不是算力,而是信仰;
  • 人們嚴重高估了 PoW 的安全性;
  • PoS 的存在只需要一個理由:它能解決 PoW 51% 攻擊的隱患;
  • Staking Economy 對 PoS 是有害的,它會降低 PoS 系統的安全性;
  • PoS 真正無解的問題是無利益攻擊
  • ……

本文首發於 橙皮書
原文標題:《支撐 PoW 安全性的不是算力,而是信仰》
作者:Maxdeath,任之劼博士,唯鏈區塊鏈高級研究員,主要研究方向包括區塊鏈共識算法、擴容、應用,曾在國際學術會議上發表多篇區塊鏈論文

最近正好是一些明星 PoW 和 PoS 項目準備主網上線的高峯期,於是,關於 PoW 和 PoS 優劣的比較又甚囂塵上。我之前看過了很多的這方面的文章,不知道爲什麼,總是有種如鯁在喉,有些東西不吐不快的感覺——大部分人比較的 PoW 和 PoS 並不是一個層面上的東西。

PoW 是一個在現實中採用更多的算法,而 PoS,尤其是現在意義中的 PoS (而非之前 peercoin 那類早期半成品)是一個目前僅存在於理論中的東西;同時,PoW 是一類算法,PoS 也是一類算法。因此,我們不能在考慮簡潔、考慮實用、考慮安全的時候,就拿比特幣的 PoW 出來比,然後在考慮效率、考慮去中心化的時候,又拿出另一個不同的 PoW 出來。

所以,在這裏,我想要從更根本性的角度來比較這兩者。換句話說,我們想要比較的不是比特幣的 PoW 與以太坊的 casper,也不是目前階段的 PoW 和 PoS,而是 PoW 和 PoS 這兩種思路的未來和前景,哪個更加適用於區塊鏈的治理和運行。

因此,我們必須拋開現有的 PoW 和現有的 PoS 的一切限制,從本質上,或者說,從一個理想的狀態下探討,兩者根本的區別和侷限在哪裏。

1 PoW 與 PoS 的本質

那麼首先,我們需要定義一下 PoW 和 PoS。

首先,兩者都試圖達到一種「隨機選節點出塊,選中概率正比於節點的某種可驗證的資源,然後,由於我們採用最長鏈共識,於是想要推翻已經得到確認的塊需要掌握 50% 以上的資源」的狀態,只不過兩者的資源一個是工作量,一個是擁有的幣。

從這個角度,我們來看看兩者究竟有什麼是不可或缺的:

  • PoW:能夠提供進行了某些工作量的證據的節點獲得出塊權。
  • PoS:在某個時間之前提供自己擁有某些幣的證明的人獲得出塊權。

僅此而已。

在這篇文章中,我們進行的一切比較都僅僅基於以上這個定義,以及兩者的這一個不同點,然後通過邏輯推理來進行。

當然,我也無意於純從理論的角度來進行比較,因爲其實兩者都有所謂的理論「安全性」、但實際上都建立在某些不那麼現實的假設之上。因此,我們也需要考慮兩者在現實,也就是我們所在的這個社會中,在目前以及不太遠的將來,應用於區塊鏈的優劣。

也就是說,我們假設,從功能上,我們可以在近幾年找到這樣兩個理想的算法。如果我們希望用於一條公鏈,那麼,二者孰優孰劣?

2 PoW 與 PoS 的安全性

PoS 最經常被人詬病的一點,是 PoS 還沒有經過實踐的檢驗,而 PoW 則已經在實踐中被證明是安全的了。

然而,正相反。

事實是——PoS 還沒有在實踐中被證明是不安全的,而 PoW 則已經在實踐中暴露了極大的安全隱患——51% 攻擊。

這不是天方夜譚,也不是杞人憂天,51% 攻擊對於幾乎所有采用 PoW 算法的數字貨幣的威脅都是實實在在的。這也是爲什麼我們在談論 PoS 的最大原因——不是因爲 PoW 浪費電力,不是因爲 PoS 的經濟模型更加公平,不是因爲 PoS 聽起來更加炫酷,而是因爲——

PoW 已經暴露出極大的安全隱患和問題,而 PoS 可以解決這個問題。儘管在其他方面 PoS 也許都並不一定優於 PoW,但是這一點就足以成爲我們需要 PoS 的理由。

51% 攻擊的核心問題描述起來是這樣的:

在一個理想的區塊鏈中,從安全的角度考量,共識的參與者的利益應當與區塊鏈本身的利益一致。於是,51% 攻擊纔是不可行的,因爲能夠在共識中佔有主導地位的參與者不會願意去攻擊這個區塊鏈,否則他們會損失自己的利益。

然而,這點對於 PoS 成立,對於 PoW 不成立。因爲礦工在系統中所佔的利益實際上遠小於整個系統的價值。換句話說,當兩者有衝突的時候,PoW 礦工完全有可能因爲自己的利益而進行惡意行爲,這裏,「自己的利益」也許是對於區塊鏈的主導權控制,也許是對於區塊鏈發展未來的理念,也許,是雙重支付攻擊的獲益。

如果你認同這一點,你可以不用看以下的長篇大論。如果你不同意,下面我將對 PoW 的這種安全性風險做一些詳細的分析。

2.1 PoW 的安全性

實際上,PoW 的安全性遠小於大衆認知中的 PoW 安全性。

在大衆認知之中,只要大多數算力是誠實的,比特幣就是安全的,而控制大部分算力是不可能的。

實際上,這個假設也被廣泛應用於幾乎所有共識算法中——無論是 PoW,PoS,BFT,還是其他的各種 POx,我們都在採用類似這種假設——即,如果大部分節點或者資源,也許是 1/2,也許是 2/3,也許是算力,也許是權益,或者是別的什麼東西,是誠實的,那麼,系統就是安全的。

然而,這個假設本身並不天然成立——所以,在比特幣白皮書之中,中本聰並不是直接就說「我們假設 50% 以上的算力誠實」,而是說:

如果有人能夠控制 51% 的算力,那麼他完全沒有必要進行 51% 攻擊,因爲它能夠通過挖礦來獲得更好的收益,而 51% 攻擊會讓他之前所挖出的幣和他的礦機變得一文不值。

也就是說,並不是 PoW 不會被 51% 攻擊,而是對 PoW 進行 51% 攻擊不划算。

那麼,對 PoW 進行 51% 攻擊真的不划算嗎?

有人可能會說當然——「比特幣從沒受過攻擊,這是因爲攻擊比特幣的代價高昂到你無法想象。」

然而,實際上稍微關注一些區塊鏈安全的都清楚,關於 PoW 的 51% 攻擊已經不勝枚舉——比較近的有 Verge,BTG,ETC……這些都遭受過 51% 攻擊,並且他們都採用 PoW 算法,而且,是採用的跟比特幣和以太坊一樣的算法。

從這個角度講,安全的究竟的是比特幣,還是 PoW?

有人會說我偷換概念:這些山寨幣能和比特幣(以太坊)一樣嗎?這些山寨幣價格本身就沒夠得上 51% 攻擊的門檻——我隨便自己做一個 xx 幣採用比特幣 PoW 進行挖礦,然後被 51% 攻擊了,這也能說明 PoW 不安全?

但這個解釋並不足夠——因爲在之前的邏輯中,我們並不是說 PoW 不會被 51% 攻擊,而是說 51% 攻擊不划算。如果我自己造了一個 xx 幣然後被 51% 攻擊了,攻擊者沒法從中獲益。但是之前的那些例子中,攻擊者可是實實在在地在攻擊中獲益了。

那麼這條邏輯哪裏出了問題?

難道 Verge,BTG,ETC 的礦工們,不知道自己可以通過挖礦賺更多的錢嗎?他們不知道如果攻擊了這些幣,會導致幣價降低,於是自己之前挖的礦會一錢不值嗎?

究竟比特幣和這些幣種之間的差別在哪?難道只有價格嗎?

2.2 PoW 的 51% 攻擊分析

「PoW 的安全支撐不是算力,而是信仰」

讓我們來分析一下這幾次攻擊真實的情況:

通過挖礦賺更多的錢是不存在的,51% 攻擊會導致他們手中的幣值貶值也是不存在的,因爲他們本身在攻擊之前就不需要和這個區塊鏈有任何瓜葛——他們的算力是從比特幣的礦池切過來的,而他們本身也並不持幣,只是需要從交易所購買一些幣,賣掉,然後在交易所還沒有察覺的時候進行雙重支付攻擊再賣一次而已。

所以,歸根結底,PoW 的邏輯問題在於,理想中擁有超過 50% 算力的礦工應該是和系統利益保持一致的。例如,對於數字貨幣而言,系統的利益就是安全性,而礦工的利益是挖礦收入,那麼挖礦的預期回報應該十分豐厚,使得礦工願意維護系統的安全性,所以不願意進行雙重支付攻擊。

然而,挖礦的回報要豐厚到什麼程度才能夠完全抵禦雙重支付攻擊呢?

我們來仔細分析一下挖礦的投入和收益,以及雙重支付的投入和收益。這裏,我們假設第一個條件已經成立,即礦機除了挖這種幣之外沒有其他用途。

  • 挖礦投入:礦機費用 + 電費 * 時間。
  • 挖礦收益:算力 單位算力挖礦獲得的幣數 幣價+收益帶來的利息(現實貨幣或者虛擬貨幣)
  • 雙重支付投入:礦機費用(購買或者租用) + 交易手續費 + 獲得算力和雙重支付期間造成的幣價波動
  • 雙重支付收益:雙重支付獲利 + 利息 - 風險

首先,我們先把所有一次性的成本放在一旁——礦機費用,獲得算力和雙重支付攻擊期間幣價波動,以及雙重支付攻擊的風險。

兩者相比我們發現,考慮長期收入的話,當有礦工已經擁有超過 50% 算力的時候,幣價或者投資幣的收益並不是阻礙他進行 51% 攻擊的理由——因爲他完全可以把進行 51% 攻擊的得利來進行別的投資。

於是,「幣價高」是不足以抵禦雙重支付攻擊的,「幣價持續走高」也不足以抵禦雙重支付攻擊,因爲單位算力的獎勵幣數還會隨着總算力的提高而減少,甚至,「單位算力獲益持續提高」都不足夠,因爲必須得是「單位算力的幣價走高的程度要超過其他投資品,即:攻擊者找不到比投資算力更合算的投資了」才能完全抵禦雙重支付攻擊。否則的話,從理論上講,總有某個程度的獲益足以誘使 51% 的算力鋌而走險進行雙重支付攻擊。

然而,如果預期挖礦收益能夠跑贏其他投資品,如果這個系統足夠去中心化,那麼應該會有更多的人來挖礦,導致單位算力的收益降低。除非正在挖礦的人對於挖礦收益的預期和沒有加入挖礦的人不一樣——也就是「信仰」。

由於有信仰加持,再加上沒有加入的人獲得了「沒有信仰」的減持,因此礦工認爲投資算力是划算的,而沒加入的人認爲投資算力是不划算的,在這樣的場景中,擁有了 50% 以上算力的礦工纔不去進行雙重支付攻擊。

而相反,如果加密貨幣變得足夠主流而算力變成了正常投資品中的一種,那麼,正如大家在看到幣價高漲的時候把自己從銀行、股市、基金、理財中的錢拿出來投資虛擬貨幣一樣,當挖礦的回報不佳的時候,還有什麼可以驅使擁有 51% 的礦工不把自己的錢從算力市場抽出來投入別的行業呢?如果這個時候,他發現可以進行一次 51% 攻擊,而攻擊的獲利會超過自己把算力賣掉能夠抽出的錢,那麼,他有什麼理由不這麼做?

這個結論本身就已經足夠令人警醒了,但是它揭露出來的意義其實更加深遠:當礦工擁有 51% 算力的時候,我們一廂情願地認爲他們的利益已經綁在這個區塊鏈上了。然而事實是,支持着他們繼續挖礦的理由和支持他們進行任何一個投資的理由的唯一區別,大概就只有信仰。

而這個「信仰」,其實也無非只是「挖礦能賺錢」,無論加密貨幣以後變得主流,還是最終變得式微,這個信仰都會慢慢褪掉。到了那個時候,只要當他們發現挖礦不划算的時候,撈一筆下車纔是他們的最佳選擇,唯一的問題只是這一筆他們能撈多少。

「礦機成本不是攻擊成本的一部分」

那麼,問題來了——我們能通過一筆雙重支付撈多少呢?這個值不能太大,因爲:1)你需要能夠從市場上收購到這麼多幣;2)賣掉這麼多幣不足以引起市場立刻的警覺。

於是,之前很多我們忽略掉的東西變得不可忽略了,例如——礦機費用,交易費,幣價波動,以及其他的風險……

而這裏,礦機費用實際上是直觀上最容易看到的門檻,也是很多人對於 PoW 信心的根源——獲得 50% 的算力哪有那麼容易?你去看看現在這些 PoW 鏈的算力然後去根據相應礦機的市場價格算一算就知道了。

但我們其實並不需要購買礦機,我們只要收購算力就夠了。換句話說,我們只要買通控制算力的人。而對於擁有算力的人來說,別忘了我們之前的分析——從利益的角度講,他們可並不是被綁在鏈上的,只要有足夠的回報,他們隨時可以下車。

這裏又有兩種情況:

1、他們的礦機除了挖這條鏈還有其他用途。
2、他們的礦機除了挖這條鏈沒有其他用途。

通常,我們認爲後者是更安全的。用實際中的例子來說就是,如果我們要發個 PoW 的新幣,那麼採用和主流貨幣一樣的算法是不安全的,而採用特殊的 PoW 算法要更安全。

然而,實際上兩者同樣不安全——

首先,「有沒有其他用途」的判斷是完全主觀的,因爲本身「攻擊者是否採用攻擊」的判斷就是主觀的。如果我們判斷這個礦機在攻擊之後還有其他用途,那麼礦機的成本不需要計入攻擊成本之中。如果他們判斷礦機在攻擊之後沒有其他用途,那麼,既然攻擊的前提條件是他們判斷礦機的投資從長期看不划算了準備下車,那這個時候,礦機已經是沉沒成本,並不需要計入攻擊成本之中。

有人可能會說我在偷換概念——即便是繼續挖礦不賺錢,也不代表礦工會把算力賣給攻擊者啊!

但事實是,本來礦工就在把他們的算力賣給礦池,那麼,誰能知道那些給你的獎勵比別的礦池多的礦池不是攻擊者呢?這點,我們會在後文中展開說。

「PoW 中,51% 攻擊的成本僅相當於其市值的 1/100,000」

現在,我們回到之前的結論——我們嚴重高估了 PoW 的安全性。

1、首先,人們認爲 51% 攻擊需要購買能夠提供這些算力的礦機,實際上並不用,只需要從算力所有者手中收購相應的算力即可,而收購算力的成本和礦機本身的成本無關,只和算力所有者的預期回報有關。這個收購可能會相當容易,因爲只需要製造一個回報比別的礦池略高的礦池就好了。

2、其次,人們認爲採取 51% 攻擊不划算因爲挖礦也可以獲得更豐厚的回報,實際上也不是,因爲攻擊之後你可以一次性獲得現金,而那這些現金你可以去進行其他投資,同樣可以獲得豐厚的回報。於是,不要說幣價下跌或者不漲這種事了,只要投資挖礦跑不贏其他投資,它的安全性就會下降。同時,無論是熊市導致礦工羣體的信仰值下降,還是牛市導致民衆對於挖礦投資的信仰值上升,它的安全性都會下降——只有當挖礦的人覺得特別賺錢而不挖礦的人不願意進來的時候,挖礦獲益是最大的,而安全性也是最高的。

3、再次,PoW 剩下的唯一安全性,就在於幣價的波動,手續費和安全風險了——換言之,就是在將這些貨幣兌換出去的風險,然而,這些風險實際上都被交易所承擔了。因爲交易所爲了互相競爭,會盡可能提供更低的手續費,更好的流動性,以及更快捷的轉賬,也就是,削減雙重支付攻擊的成本,也削減了 PoW 的安全性。

於是,再減去這些,我們得出了一個結論:其實 PoW 的安全性,基本上約等於獲得 50% 算力的成本,而這個成本只和收益相關,而和算力本身的成本無關。

如果算力有一個相對公開透明和自由的市場,那麼,只要你去 crypto51.app 上去看一下,租賃一小時算力的成本,幾乎就是攻擊每個貨幣的成本。如果算力無法通過公開的市場得到而需要從算力控制者手中收購的話,那麼考慮到需要支付給所有者的溢價,這個值可能會高於 crypto51 上的估計。但無論如何,它和這個貨幣的總市值相比非常微不足道,大概在 1/100,000 這個級別。而這麼小的交易額造成的波動幾乎可以忽略不計。

根據這些分析,我們不難理解爲什麼 Verge,BTG 和 ETC 會受到攻擊,我們甚至可以總結出什麼樣的幣種更加容易受到攻擊:

  1. 算力易於獲得並且獲得成本低:這三種貨幣都採用和主流貨幣一樣的 PoW,從算力租賃的網站上就能簡單獲得足夠攻擊的算力。
  2. 幣值漲勢不佳。
  3. 被許多交易所接收。

2.3 PoS 的安全性

那麼,爲什麼 PoS 能夠抵禦 51% 攻擊呢?

其實說起來非常容易——我們根本不用進行類似於 PoW 這麼詳盡的分析,PoS 也天然免疫類似於 PoW 這種形態的 51% 攻擊,因爲 51% 攻擊無論如何繞不開的成本是 50% 以上的持幣,而任何對於這個幣的攻擊導致的幣價下降,損失最大的都只會是 50% 以上的持幣者本人。

但這裏我們沒有考慮的一點是 Staking Economy,也就是未來 PoS 也會形成和 PoW 一樣的「權益礦池」,即不願意花精力參與共識的持幣者把出塊權委託給某些更大的持幣者或者比較有聲望的機構,然後只收取挖礦獎勵(當然委託人會獲得一部分獎勵)。於是,對於 PoS 進行 51% 攻擊就不再需要收購這些幣,而只需要暫時控制超過 50% 概率出塊的礦池就行了。

不過,即便是這樣,PoS 攻擊的成本也會遠高於 PoW。

因爲首先,與 PoW 需要持續投入電費,以至於小礦工必須加入礦池來獲得持續的收入不同,PoS 中持續投入的服務器維護費用要遠小於 PoW,所以算力集中於大礦池的可能性會小於 PoW。也就是說,即便 Staking Economy 真的在 PoS 鏈中出現,也未必一定會出現幾大礦池壟斷的情況。

並且,最重要的是,擁有一定數量的幣的節點也完全可以並且有意願自己維護一個節點,而不用依賴礦池。尤其是一些大的持幣者——你很難想象他們不願意維護全節點,也就是說他們並不關心這個鏈上出的塊。另一個最重要的原因是,與 PoW 不同 PoS 出塊是需要持幣人簽名的,因此 PoS 礦池在作惡的時候可能會付出更大的社會代價,而對於 PoS 礦池而言,由於他們實際上挖礦所需要的設備投入遠小於 PoW,所以他們在現實之中社會地位和信譽的成本反而是最高的。

當然,其實這幾點都改變不了一個結論,就是 Staking Economy 這種委託進行共識的做法的確會削弱 PoS 的安全性。

因此,我個人對於 Staking Economy 這種東西的觀感並不正面,同時,很多 PoS 項目也同樣對於 Staking Economy 所帶來的安全隱患有所意識,所以會對相關機構進行規範,比如要求一定的持幣量。但無論如何,就如同 PoW 礦池一樣,PoS 的 Staking Economy 也是無法避免的,但兩者相比的話,如果被委託的機構是大持幣人的話,那麼最終也只是把攻擊成本從 50% 變成了一個更小的比例,比如 10%,但絕不會像是 PoW 一樣,是 1/100,000 這樣的級別。

以上,我們說明了在 PoS 中進行 50% 攻擊的成本很高——那麼從另一個角度講,如果花了這麼高的成本,攻擊者有可能獲利嗎?答案是幾乎沒有任何可能,因爲你總得找到有個冤大頭願意和你進行這麼大筆的交易——交易所幾乎不可能對這麼大筆交易買單。所以說,唯一的可能是你找到兩個並不懂虛擬貨幣的冤大頭,然後進行一個真正意義上的場外的「雙重支付」……

不過如果真的存在這樣的人的話,似乎我們有簡單得多的方法可以忽悠他們。

然而,這還並不足以說明 PoS 對於 PoW 的安全優越性,因爲我們只是說了在 PoW 中適用的 51% 攻擊無法複製到 PoS,但 PoS 本身會受到另外的兩種不存在於 PoW 中的攻擊的威脅:長距離攻擊(Long range attack)和無利益攻擊(Nothing-at-stake attack)。

我們分別來分析一下這兩種攻擊。

2.4 PoS 的長距離攻擊分析

長距離攻擊的概念是,擁有不超過 50% 權益的節點可以通過某種方法生成一條更長的鏈,取代目前的最長鏈——這裏所謂的「某種方法」通常都需要一段比較長的時間。它涉及到 PoW 和 PoS 的一個重要區別——PoW 實際上不僅僅能夠生成隨機數,而且能夠實現在異步系統中每隔一段時間生成一個隨機數,這個性質是 PoS 不具備的,所以 PoS 必須引入某些時間的概念。然而,這就給了惡意節點可乘之機,因爲誠實節點獲得的出塊權是有時間限制的,而惡意節點沒有。

這一點本身,其實本不應該屬於我們這次的討論範疇,因爲我們想要比較 PoW 和 PoS 的本質,而這一個問題其實並不是 PoS 的本質缺陷,換句話說,PoS 可以通過一些方式,例如 VDF,來解決這個問題。然而,有鑑於採用 VDF 解決這個問題的算法還不成熟,以及我個人認爲其實目前的解決方案也是完全夠用的,所以,這裏我還是詳細地講一講這個問題。

目前已知的長距離攻擊方法有三種:

1、向前腐化攻擊(Posterior Corruption Attack):當曾經的權益持有者賣掉權益之後,他們就不再受到持有的幣貶值的約束了,然而,如果超過 50% 的早期持幣者賣掉了手中的幣的話,攻擊者可以買通他們再重新生成一條他們沒有賣掉權益的歷史,然後有可能可以創造出一條更長的鏈。

2、權益流血攻擊(Stake Bleeding Attack):不到 50% 權益的節點可以通過「藏一條鏈自己的鏈」這一非常簡單的方式進行長鏈攻擊,因爲在自己的鏈上,因爲出塊的只有自己的節點,所以他們會一直獲得挖礦獎勵。雖然一開始他們生成的鏈一定短於外面的鏈,但是隻要他們藏的時間足夠長,他們的權益終將超過 50%,並且慢慢地獲得更快的出塊頻率超過外面的鏈。

3、權益粉碎攻擊(Stake Grinding Attack):這種攻擊方式在不同的 PoS 中有不同的形式,但總體來說,擁有不到 50% 權益的節點可以利用自己算力上的優勢,或者自己可以隨意改變區塊時間戳的優勢,獲得比誠實節點更多的出塊機會,然後利用這個優勢通過一段較長的時間生成比誠實節點更長的鏈。

通常應對這三種攻擊的應對是檢查點(Checkpoint),即一段時間需要生成一個由一些節點認證過的區塊來保證這個區塊之前的鏈不會再更改。

「如果能接受下載客戶端,那麼爲什麼不能下載檢查點?」

對於很多更理想主義的區塊鏈支持者而言,檢查點機制是個不那麼「優雅」的權宜之策,因爲它犯了幾個區塊鏈支持者不能接受的罪過:

1、理想狀態的區塊鏈中,任何人都不需要相信除了算法和創世區塊之外的任何東西就可以獨立驗證任意交易的合法性。然而,檢查點相當於引入了一個另外的需要信任的東西。即便這個檢查點是所有持幣者簽名認證的,從理論上來講這也是不可接受的,因爲對於新加入系統的節點而言,他們需要信任曾經的持幣者;

2、檢查點需要引入簽名,而簽名會破壞匿名性。

關於匿名性的問題,我們同樣放到後文中深入討論,這裏我們先說第一個問題。

這裏我想要闡述一下我對於檢查點這個機制的觀點——從現實的角度看,這個事真的不能接受麼?

實話實說,如果你是個剛剛進入網絡的節點——下載創世區塊和算法,以及下載下載創世區塊,算法和歷史,有什麼本質上的區別?後者無非就是多了一種可能性,即惡意節點可以通過長鏈攻擊僞造一份歷史,於是儘管你獲知了正確的算法和創世區塊,你其實並沒有獲得真正的鏈。

但問題在於,對於普通用戶而言,你怎麼知道你下載的客戶端用的是正確實現的算法呢?雖然從理論上來說我們需要信任的只是算法而已。但實際上,無論是現實,還是未來,我都有理由相信,沒有人會從頭開始做算法的實現——實際上,每個人還是需要信任某些可信節點來提供的安全的客戶端,也就是軟件,而且,沒有人會去扒開代碼看看這個軟件是否和論文相符。

那麼這樣,我們假設需要依賴可信節點來獲取區塊的歷史,這也不是什麼十惡不赦的事情。

「鏈外共識是客觀存在的」

然後,就有了第二個問題——的確,長距離攻擊是可能的,正如 51% 攻擊也是可能的一樣,我們不光要考慮這種攻擊理論上的可能性,也要討論它在實際之中的條件。

我們在前面論證了 51% 攻擊對於 PoW 的危險性的時候,先是分析了它理論上的可能性,然後,再分析了它在現實中攻擊的條件,發現其實無論是在理論上還是實際上,條件都要比大衆認知中的低得多,於是,我才得出了 PoW 有安全隱患的結論。

那麼,我們同樣分析一下以上幾種長距離攻擊在現實中生效的條件。

首先,無論是權益流血攻擊,還是權益粉碎攻擊,成功的概率都依賴於你擁有的權益比例。換句話說,雖然攻擊者沒有超過 50% 的權益所以沒法正常的生成一條更長的鏈,但是如果他們擁有,例如說 40% 的權益,那麼,他們可以通過以上兩種手段,以及一個比較長的時間來進行長距離攻擊。

於是,大家已經看出這種攻擊不實際的地方了——當惡意節點的權益比較小的情況下,他們發動一次長距離攻擊會長得不現實。如果他們佔有的權益比較多的時候,他們一沒有理由來攻擊這個系統,二所需要攻擊這個系統的成本並不比 50% 的權益低多少——這點本身就是 PoS 的優勢。

唯一一種比較麻煩的長距離攻擊是「向前腐化攻擊」,而且,特指這些曾經的持幣者本身就是攻擊者的情況。因爲如果這些攻擊者本身沒有想過要攻擊,只是再賣了幣之後被人買通這種情況是可以被一種叫做 Key-Evolving Signature 的東西解決的。所以,他們必須要從持幣的時候就已經開始做好了攻擊的準備,即偷偷開始私藏一條鏈才行。

這其實相當於一個長時間的 51% 攻擊的情況,即以前的大權益所有者(超過 50%)一邊私藏一條鏈,一邊緩慢地把權益賣掉,在權益全部賣光之後,掏出私藏的鏈告訴大家說:「我胡漢三又回來了,你們吃了我的給我吐出來!」

然而,我對於區塊鏈的核心作用的一貫看法是——區塊鏈的意義在於用「機器的共識」代替「人的共識」,但是,在目前這個階段,有些「人的共識」是我們目前解釋不了的,也沒法去取代的。而這個時候,盲目的去假裝這種「鏈外共識」不存在而粗暴地想要用某個算法在摒棄一切鏈外共識的情況下實現絕對的安全,是不實際的也是沒有意義的。

所以,我同意康奈爾大學 Elaine Shi 教授對於這個問題的看法——實際上,如果這種情況真的出現,其實某一種叫做「社會共識(social common knowledge)」的東西會自然而然地去糾正它。更簡單一點說,對於任何一個 PoS 鏈,假設它的早期權益所有者突然某一天拿着一條更長的鏈回來,對於現在的權益所有者說:把你們的錢都給我,現在的權益所有者,甚至說,不要說現在的權益所有者了,大概所有這條鏈的利益相關方,都會同仇敵愾創造出一個新的規則不承認這條鏈的合法性,即便從算法上這條鏈確實更加「合法」。

那麼,一條不會被大部分這條鏈使用者所接受的鏈,和一條新創造出來的分叉鏈又有多大的區別呢?又或者說,在以太坊經過了幾次升級後的現在,一條根據原規則合法的鏈,例如 ETC,是不是也可以算作一個長距離攻擊呢?

所以,歸根結底,所謂「社會共識」,無論是在現在,還是我們可見的未來,都是客觀存在的,因此,無論是這種長距離攻擊,還是其他的幾種長距離攻擊,即便上有理論上的可能,實際上,只要它仍舊需要一個很長的時間來進行,例如數月或數年,那麼它的威脅其實非常有限。

然後,無論是引入檢查點,或者引入一個「委員會名單」,或者是引入「社會共識」,實際上都是引入一個「有某些可信的鏈外信息存在」的假設。而在我看來,在現實之中,無論是現在還是可見的未來,這對於 PoS 的安全性都不是個問題。

2.5 PoS 的無利益攻擊分析

真正無解的問題是無利益攻擊。

PoS 對於無利益攻擊是無解的,這其實在任何 PoS 裏都一樣,因爲根據 PoS 的原理,它對於在這個系統中毫無利益或者利益很小的節點的約束就是很低的。

在一個極端狀況中,例如整個系統中有一億個節點所有人的利益都很小,那麼任何 PoS 算法都不安全,因爲惡意節點行爲造成的利益損失太少了,所以我們沒有理由認爲 50% 以上的節點是誠實的,反而,如果他們能夠從惡意行爲中獲益的話,根據公地悲劇(Tragedy of the Commons),他們是一定會作惡的。

懲罰機制並不能解決這個問題,因爲懲罰必須要和獲益相當,而在這樣的一個所有節點利益微小的系統中,要不然懲罰也只能忽略不計,要不然懲罰太高導致沒有人願意進入這個系統。

因此,幾乎所有 PoS,都額外需要引入一個准入機制——要麼是通過抵押,要麼是有持幣數門檻,所有參與共識的節點必須保證他們擁有足夠讓他們在意從而約束他們行爲的權益。

而這點在 PoW 裏是不一樣的,因爲 PoW 中無論你的算力多少,你損失的電費是逃不掉的。並且,因爲你獲益的唯一方式是雙重支付——所以,當你的算力在不超過 50% 的時候,你作惡是嚴格不划算的。

換句話說,實際上,對於 PoW 而言,小礦工(挖到塊機率較小的礦工)的作惡行爲會受到很重的懲罰,因爲在浪費算力的同時幾乎不可能有回報;而對於大礦工(挖到塊機率較大的礦工),他們的作惡行爲則有可能獲益,因爲他們聯合起來進行 50% 攻擊的收益可以遠超成本。

然而,對於 PoS,小礦工的作惡行爲受到的懲罰很輕微,於是,只要作惡能夠獲益,他們就有動力去作惡;然而 PoS 對於大礦工作惡的懲罰則極其嚴重,因爲越大的礦工代表他們的權益越多,於是惡意行爲造成的損失就越大。

這兩點,纔是 PoW 和 PoS 的根本性區別。

如果比較兩者優劣的話,我們可以很明顯地看到:

  • 在一個算力(權益)更分散,更平均的系統中,PoW 更合適。
  • 在一個算力(權益)更集中,更不平等的系統中,PoS 更合適。

我們已經比較了 PoW 和 PoS 的安全性問題,也得出了一些結論——但很遺憾的是,在一個非許可的公有鏈的環境中,實際上 PoW 和 PoS 最終都會趨向於一個算力(權益)更集中、更中心化和更不平等的系統。

爲什麼呢?這個問題我們留給下一篇講。

來源鏈接:bbs.vechainworld.io