在傳統的互聯網公司或金融機構中,若是一家公司,在一年以內,被委託的交易結算的總量爲萬億美圓的話,這家公司要麼擁有可靠的技術和雄厚的資本,要麼就是其它大公司及政府爲其信用來作背書。而比特幣卻在沒有政府或公司背書的狀況下,在過去一年內支持了至關於一萬億美圓的交易。這是由於比特幣的工做量證實(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, 是避免共識中心化,保護區塊鏈核心價值的明智選擇。orm
「長程攻擊」與「主觀依賴」問題
在一個公有鏈中,一個攻擊者若是擁有當下足夠多的算力或股權,無疑是能夠打破公有鏈安全性完成攻擊的。可是在 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算法研究員 李辰星