1. 程式人生 > >在公鏈專案早期,為什麼PoW是一個更好選擇?

在公鏈專案早期,為什麼PoW是一個更好選擇?

在傳統的網際網路公司或金融機構中,如果一家公司,在一年之內,被委託的交易結算的總量為萬億美元的話,這家公司要麼擁有可靠的技術和雄厚的資本,要麼就是其它大公司及政府為其信用來做背書。而比特幣卻在沒有政府或公司背書的情況下,在過去一年內支援了相當於一萬億美元的交易。這是因為比特幣的工作量證明(PoW)機制確保了全世界的比特幣礦工以點對點的方式去分散式地維護賬本,且保證了其正確性和不可篡改性。

實際上,PoW 協議並不完美,它在執行過程中需要消耗大量的能量來計算雜湊函式的結果,以保護區塊鏈系統不被攻擊。很多人認為這是一種“無用的能源消耗”。為了避免這種消耗,股權證明協議(PoS)便作為替代方案被提出。包括以太坊在內的幾個著名的專案也開始探索股權證明協議(PoS), 甚至有人認為,PoS協議在未來將完全取代PoW協議。

但是,在對 PoS 協議進行了深入的技術剖析之後,我們會發現:在一個公鏈專案的早期階段,PoS 協議會帶來很多問題,而這些問題在PoW協議下是可以避免。首先,使用PoS協議啟動主網的公鏈專案,會不可避免地存在共識中心化的問題,因為主網上線的時候股權分佈往往是相對集中的。此外,純 PoS 協議還面臨著遠端攻擊(Long Range attack)的威脅。最嚴重的遠端攻擊會導致新加入的節點必須信任一些中心化的網站給出的資訊,而這會導致 PoS 公鏈成為一個本質上中心化的網路。去使用PoW協議啟動主網的區塊鏈則可以實現分散的共識,從而避免這些問題。當PoW公鏈經過一段時間的發展,股權分佈相對分散以後,還可以選擇PoW/PoS複合機制。

除此之外,還有一點值得注意的是,很多人誤以為比特幣的擴容問題是PoW機制的侷限性造成的。我們經常在媒體網站或白皮書中看到這樣的句子,“比特幣因為使用了PoW機制,所以只能處理每秒3-7筆交易”。而事實上,經過適當的設計,例如,GHOST, Conflux 這樣的PoW演算法可以顯著提高出塊效率,達到每秒處理數千筆交易,且每筆交易都能得到全網節點的驗證。


PoW v.s. PoS:如何確定投票權

關於PoW和PoS之間的主要區別,就是在於如何確定區塊鏈共識中的投票權。 在PoW中,系統中的投票權與節點的計算能力成正比。每秒可以計算雜湊函式次數越多,節點就越有可能贏得區塊鏈中下一個區塊的出塊權。而在PoS中,系統的投票權與持有的股權比例成正比。節點擁有資金越多,能為確定的下一個區塊投的票數就越多。

在公鏈早期階段,股權中心化將導致共識中心化

對於一個公有鏈來說,其上線初期往往是股權最集中的時候。在主網上線伊始,創始塊中分配的幣絕大多數屬於專案方和私募投資人,而這些人的數量往往非常有限。對於PoW共識機制,初始股權的集中不會帶來安全性問題,因為它的出塊和安全性不依賴於股權持有的分散,而是依賴於算力的分散。對於使用反 ASIC 礦機的挖礦演算法的公有鏈來說,任何人只要擁有顯示卡和網路就可以成為礦工,這有助於促進更多人蔘與挖礦,實現早期算力的分散。只要超過50%的算力來自於誠實的礦工,區塊鏈中的交易就是安全不可逆轉的。

然而,在PoS共識機制下,股權集中會導致共識協議的參與者集中。區塊鏈的出塊權只能由少數在創世塊中擁有股權的玩家決定。如果這些人合謀對區塊鏈進行攻擊,則完全可以成功的實現雙花攻擊(Double spending attack). 儘管開發者和投資人出於利益考慮不會進行這樣的攻擊來摧毀他們自己的公鏈,但PoS公鏈也無可避免的在主網上線後就被這些人壟斷和支配。更糟的是,如果出塊可以獲得大量獎勵和交易費用,這些壟斷者就會將大量股權牢牢控制在自己的手裡,使得PoS公鏈成為一個本質上由巨頭控制的網路。

我們不要忘了,區塊鏈的核心價值是什麼?是去中心化的共識協議,保證了區塊鏈系統中每筆交易的正確性、不可篡改性。如果共識協議無法保證參與者的分散,區塊鏈就無法做到無需信任的安全性,那麼區塊鏈和傳統的分散式系統相比就沒有任何優勢了,甚至傳統的分散式系統能做得更經濟更高效。因此,公鏈專案在早期使用PoW, 是避免共識中心化,保護區塊鏈核心價值的明智選擇。

長程攻擊主觀依賴問題

在一個公有鏈中,一個攻擊者如果擁有當下足夠多的算力或股權,無疑是可以打破公有鏈安全性完成攻擊的。但是在 PoS 公鏈中,如果攻擊者獲得了一些賬戶的私鑰,這些私鑰在歷史上某一時刻控制了超過51%的股權,也可以完成攻擊,這種攻擊的方式被稱為長程攻擊(Long Range Attack)。

在長程攻擊中,攻擊者首先獲得一些私鑰,只要這些私鑰在歷史上曾經獲得了足夠多的股權,便可以從這一時刻開始分叉進行 51% 攻擊,製造一條分叉鏈出來。而 PoS 的出塊不需要進行工作量證明,攻擊者可以短時間內讓重寫歷史的分叉鏈追趕上原本的主鏈,從而造成PoS鏈的分叉和防篡改性被打破。


攻擊者能夠取得這些私鑰不是天方夜譚。如果PoS公鏈的早期投資人在二級市場將持有的代幣賣掉後,將賬戶私鑰賣給攻擊者,攻擊者就可以從創世塊進行長鏈攻擊,從而可以打破一個鏈的安全性。如果一些投資者追求短期收益而非價值投資,攻擊者從他們手裡獲得私鑰就成為了一個可能的事情。

而為了應對長程攻擊,則有各種各樣的解決方案被提出:例如使用金鑰演化演算法更新金鑰,以避免金鑰被盜。但是如果早期投資者一開始就決定通過出售私鑰獲利,那麼他完全可以保留金鑰種子以繞開這一限制。還有一些解決方案基於這樣一個事實:如果攻擊者挖了一條完全不同的鏈,長期在系統中執行的節點或許有能力探測出這種異常。但是,這些方案依然存在如下問題:

PoS 長程攻擊造成的分叉與 PoW 的分叉有所不同。PoW 的分叉鏈難以獲得比特幣全網算力,比特幣礦工很容易從總算力中辨別誰是真正的比特幣。鑑於PoS共識協議在實際執行時,絕大多數股權持有者只是區塊鏈的使用者,並不會一直執行一臺伺服器。攻擊者只要在一個歷史節點擁有了相當與PoS實際參與者的股權比例,就可以製造出一條難以辨別的分叉鏈出來。配合女巫攻擊(Sybil Attack),攻擊者可以從區塊歷史和節點數量上都獲得和被攻擊主連結近的水平,令新加入的節點無法區分,只能通過人工指定的方式選擇。這樣新參與者必須諮詢受信任節點來安全地加入系統,這一問題被稱為“主觀依賴”(Weak Subjectivity)


無利害攻擊

無利害攻擊(Nothing at Stake)是另一種PoS攻擊方式。當一個 PoS 鏈因為網路延遲、長程攻擊或其他原因出現分叉時,PoS 礦工可以選擇在兩個分叉的鏈上同時出塊,以獲取最大收益。而這違反了共識協議。

在 PoW 鏈中,如果一個礦工想同時在多個分叉上挖礦,就必須將自己的算力分散在多個分叉上,所有分叉上分配的算力總和不會超過礦工擁有的總算力。對於多數礦工而言,將自己的全部算力投入到協議指定的鏈上是最優的選擇。

然而,在 PoS 多個分叉上同時出塊所帶來的額外成本可以忽略不計,而選擇同時出塊可以保證無論哪一條分叉鏈最終勝出都可獲得收益。如果礦工遵守共識協議,只在協議指定的鏈上挖礦。一旦這個鏈被丟棄,礦工將會失去挖礦獎勵。只追求挖礦收益最大化的礦工會在兩邊同時參與,不惜因此打破協議——這會導致鏈長時間維持分叉的狀態。

與長程攻擊不同,精巧的激勵機制設計可以避免這一攻擊。但無利害攻擊依然表明讓PoS鏈正確地執行是一件很困難的事情。


總結

雖然 PoS 具有節省能源等優勢,從而很多專案表示將採用PoS。但我們在分析區塊鏈安全性假設後發現,避免了計算“無用的雜湊”之後會引入很多攻擊情形,而且目前沒有很完美的解決方案。誠然PoS有能源效率的優勢,但也帶來了很多安全性威脅。在PoS很好地解決這些威脅之前,PoW消耗的能源,就像和平時期國家軍隊用掉的軍費一樣,阻擋了很多潛在的威脅。最重要的是,其中許多威脅在區塊鏈專案早期顯得尤其致命。這也是我們為什麼相信新的公鏈專案應該從PoW開始。

本文作者為Conflux演算法研究員 李辰星