工作量證明(Proof-of-Work,PoW)
是一種對應服務與資源濫用、或是阻斷服務攻擊的經濟對策。
一般是要求用戶進行一些耗時適當的複雜運算,並且答案能被服務方快速驗算,以此耗用的時間、設備與能源做爲擔保成本,以確保服務與資源是被真正的需求所使用。
此一概念最早由Cynthia Dwork和Moni Naor於1993年的學術論文提出[1],而工作量證明一詞則是在1999年由Markus Jakobsson與Ari Juels.[2]所發表。
現時此一技術成爲了加密貨幣的主流共識機制之一,如比特幣所採用的技術。
技術原理
工作量證明最常用的技術原理是散列函數。
由於輸入散列函數h()的任意值n,會對應到一個h(n)結果,而n只要變動一個比特,就會引起雪崩效應,
所以幾乎無法從h(n)反推回n,因此藉由指定查找h(n)的特徵,讓用戶進行大量的窮舉運算,就可以達成工作量證明。
我們若指定h(n)的16進制值的前四值,求n,這樣統計上平均約要運行216次h(n)散列運算,纔會得到答案,但驗算只要進行一次就可以了。如果想要增加難度,那就增加指定的位數即可。
以SHA256函數舉例,假設我們要處理數據Hello World
,並找出h(n)前四值爲0000的n,如果從Hello World0
開始加上一個十進制數ASCII進行窮舉猜測,到Hello World107105
時纔會得到匹配條件的h(n):
0000BFE6AF4232F78B0C8EBA37A6BA6C17B9B8671473B0B82305880BE077EDD9
驗算時只要將Hello World107105代入SHA256函數一次即可。
加密貨幣的應用
由於加密貨幣多由區塊鏈所建構,而區塊鏈本來就要依賴散列函數來做爲數據正確無誤的擔保,所以在加密貨幣上使用工作量證明,是非常簡明的設計。
由分散在各處的計算機,競賽誰能最早找出,搭配原本要打包的數據的窮舉猜測值(nonce),誰就等同獲得該區塊的打包權(記賬權)。
此猜測值被找出後,與數據、散列值一起打包成塊後廣播,經多數節點確認與承認,打包者就能獲得打包該區塊所提供的獎勵。
一般採用工作量證明的加密貨幣,好比比特幣,會設置成隨着參與競賽的算力增減,而調整找尋猜測值的難度,以維持合理的運作速度。
- 優點
- 架構簡明扼要、有效可靠。
- 由於要獲得多數節點承認,那攻擊者必須投入超過總體一半的運算量(51%攻擊),才能保證篡改結果。這使得攻擊成功的成本變得非常高昂,難以實現。
- 某種程度上是公平的,你投入越多的算力,你獲得打包權的機率也等比增加。
- 缺點
總結:
- 我的理解並不是防止數據被篡改,基於安全的目的。
- 工作量證明似乎只是搶打包區塊信息權利的一種麻煩的機制。
- 安全依靠的是代價,不是技術。
代價:掌握超過全網一半算力,或者是付出大量的算力(經濟成本)和幸運。 - 優點是相對公平。
- 缺點是非常浪費資源,會被壟斷(比誰的計算力強)。
工作量證明,Proof of Work,通過計算來猜測一個數值(nonce),得以解決規定的 hash 問 題(來源於 hashcash)。
保證在一段時間內,系統中只能出現少數合法提案。
同時,這些少量的合法提案會在網絡中進行廣播,收到的用戶進行驗證後會基於它認爲的最 長鏈上繼續難題的計算。
因此,系統中可能出現鏈的分叉(Fork),但最終會有一條鏈成爲 最長的鏈。
hash 問題具有不可逆的特點,因此,目前除了暴力計算外,還沒有有效的算法進行解決。
反 之,如果獲得符合要求的 nonce,則說明在概率上是付出了對應的算力。
誰的算力多,誰最 先解決問題的概率就越大。
當掌握超過全網一半算力時,從概率上就能控制網絡中鏈的走 向。這也是所謂 51% 攻擊 的由來。
參與 PoW 計算比賽的人,將付出不小的經濟成本(硬件、電力、維護等)。當沒有成爲首個 算出的“幸運兒”時,這些成本都將被沉沒掉。
這也保障了,如果有人惡意破壞,需要付出大量 的經濟成本。也有設計試圖將後算出結果者的算力按照一定比例摺合進下一輪比賽考慮。
有一個很直觀的例子可以說明爲何這種經濟博弈模式會確保系統中最長鏈的唯一。
超市付款需要排成一隊,可能有人不守規矩要插隊。
超市管理員會檢查隊伍,認爲最長的一 條隊伍是合法的,並讓不合法的分叉隊伍重新排隊。
只要大部分人不傻,就會自覺在最長的 隊伍上排隊。
然而,工作量證明算法需要讓所有節點解決密碼難題。這個難題被礦工所解決,率先完成的能夠獲得獎勵。
這導致人們構建越來越大型的挖礦設備,比如這樣。
根據Digiconomist,僅僅比特幣礦工就要使用54太千瓦時的電力。這些電量足夠支持美國5百萬個家庭用電,甚至整個新西蘭或匈牙利,但是這不僅止於此。
對於有更好更多設備的人羣,工作量證明將給予更多的獎勵。你的計算能力越高,就越有可能去創建下一個區塊,從而獲得礦工獎勵。
爲了進一步提高機會,礦工們一起組成了礦池(mining pools),他們結合各自的算力,把獎勵平均分配給礦池中的每個人。
總而言之 工作量證明讓礦工們需使用大量的能量,從而促進了礦池的產生。這讓區塊鏈變得更加中心化,而不是去中心化。
算力決定一切。主鏈的機制是最長的,所以算力強大就可以重新打包區塊,就可以拿到所有區塊的打包費用啊!