乾貨 | 比特幣的學術譜系,Part-2
ofollow,noindex">Part-1:時間戳、默克爾樹、拜占庭容錯
工作量證明
實際上,所有容錯系統都假設系統中絕大多數(例如,超過 2/3 的)節點都是誠實且可靠的。在一個開放式的點對點網路中,節點無需註冊,而且可以自由加入退出。因此,作惡者可以發起女巫攻擊 ,建立多個馬甲節點,破壞整個系統的共識保障。 John Douceur14 於 2002 年正式提出了女巫攻擊,並指出利用工作量證明 的密碼學模型來緩解這一問題。
起源
要了解工作量證明,先得從源頭講起。Cynthia Dwork 和 Moni Naor15 在 1992 年最先提出了工作量證明的雛形。其目的是阻止垃圾郵件。要注意的是,垃圾郵件、女巫攻擊和拒絕服務這些問題都是大同小異的,作惡者會將普通使用者所造成的影響在網路中放大數倍 。工作量證明能夠同時抵禦這三種攻擊。根據 Dwork 和 Naor 的工作量證明設計,發件人在傳送郵件的同時只有附上已完成適量計算的證明(即,工作量證明),收件人才會處理這封郵件。一臺普通的計算機大概需要幾秒鐘的時間來完成工作量證明。因此,這不會給普通使用者造成困難,然而想要傳送 100 萬封垃圾郵件的人如果使用的是相同的硬體裝置,則需要幾周時間。
要注意的是,工作量證明例項 (也稱作難題 )應該針對不同的郵件和收件人有所區別。否則,垃圾郵件傳送者會向同一個收件人傳送不同的郵件(或者向不同的收件人傳送同一封郵件),其成本等同於向一個收件人傳送一封郵件。第二個重要的屬性是,收件人只需承擔極少的計算量 ,即,無論這些難題計算起來有多難,驗證計算結果正確與否應該很容易。此外,Dwork 和 Naor 提出了帶有陷門(trapdoor )的函式,陷門由中心實體掌握,可以免去解決難題所需的工作量。一種可行的陷門應用是讓中心實體無需成本就可以批准郵件的傳送。 Dwork 和 Naor 提出了三種滿足上述屬性的候選難題,它引入了一個全新的領域,我們之後會提到。
Hashcash
還有一種非常類似的想法叫作 hashcash,是由博士後研究員 Adam Back 於 1997 年提出的,那時他是密碼朋克社群的一員。密碼朋克聚集了一群激進分子,他們反對政府和中心化機構集權,力圖通過密碼學進行社會和政治改革。回顧過去,他首先發布了 hashcash 軟體2 ,在 5 年之後的 2002 年又釋出了網際網路草案(標準化文件)和一篇論文4 。
Hashcash 比 Dwork 和 Naor 的想法要簡單得多:它沒有陷門和中心機構,而且僅使用雜湊函式而非數字簽名。它基於一則簡單的原理:雜湊函式是一種為了達成某些實用目的的隨機函式,這意味著如果要找到一個能讓雜湊函式得出特定輸出值的輸入值,唯一的方法是嘗試多個輸入值,直到得出期望的輸出值為止 。進一步來說,要找到對應任意一組輸出值的輸入值,唯一的方法是將不同的輸入值依次代入雜湊函式進行運算。因此,如果我讓你找到一個輸入值,它對應的(二進位制)雜湊值是 10 個零開頭的,你必須嘗試很多輸入值,然後發現每個輸入值滿足條件的概率是 1/210 ,這意味著你必須依次嘗試 210 個輸入值,約等於 1000 則雜湊計算。
從 hashcash 的字面意義可知,Back 將工作量證明視作一種貨幣形式。 他在個人主頁上將其定位為 DigiCash 的替代方案。DigiCash 是 David Chaum 提出的一種銀行向用戶發行不可追蹤的數字貨幣的系統3 。為了更加突出數字貨幣的貨幣特徵,Back 甚至在技術設計上做出了妥協。後來,他發表評論稱比特幣是由 hashcash 衍生而來。不過,Hashcash 根本算不上是貨幣, 因為它無法抵禦雙花攻擊。Hashcash 代幣無法進行點對點交易。
於此同時,從學術角度來看,研究人員發現除了防止垃圾郵件之外,工作量證明還有很多應用場景,如抵禦拒絕服務攻擊25 、確保網站分析的完整性17 、及對口令猜測實行網路限速等38 。順帶一提,工作量證明 這一術語首次出現於 Markus Jakobsson 和 Ari Juels 在 1999 年撰寫的一篇論文裡,作者在撰文之前對工作量進行了詳盡的調查24 。要注意的是這些研究人員似乎毫不關心 hashcash ,而是聚焦於基於雜湊的工作量證明,這在 Eran Gabber 等人18 以及 Juels 和 Brainard25 所著的論文中有所介紹。(直到這些論文發表很久之後,本段提到的許多名詞才成為標準術語。)
工作量證明和數字貨幣:兩難困境
你或許知道工作量證明最初作為抵禦垃圾郵件的手段並不成功。一個可能的原因是不同裝置的解題速度差異顯著。這意味著垃圾郵件製造者只需小小地投資一把定製硬體,垃圾郵件的製造速度就能提升幾個數量級。從經濟學角度來說,生產成本的不對稱性會自然而言地帶動交易的發展,即工作量證明解決方案的市場。然而,這是一種兩難困境,因為需要一種有效的數字貨幣 。缺乏這樣一種貨幣確實是影響工作量證明激勵的首要因素。一種原始的解決方案是將難題的解作為貨幣,正如 hashcash 所做的那樣。
在比特幣的白皮書發表之前,有兩篇文章提出了更加符合上述思路的解決方案,分別是 b-money13 和 bit gold42 這兩種概念。上述兩種方案提供了時間戳服務(通過工作量證明)來創造貨幣,一旦貨幣被創造出來,就同意轉賬。如果各伺服器或節點對賬本存在分歧,沒有明確的解決之法。這兩篇文章似乎都暗示了採取多數決的機制,不過由於女巫攻擊的存在,這些機制的安全性都不高,除非針對網路入口設定一個把關人(gatekeeper)或是通過工作量證明抵禦女巫攻擊。(見下方註解)
抗女巫攻擊的網路
John Douceur 寫過一篇關於女巫攻擊的論文。他提出的解決方案是要求所有加入拜占庭容錯協議的節點解決雜湊難題。如果一個節點偽裝成 N 個節點,是不可能及時解決 N 個難題的,假身份會被清除。不過,惡意節點依然比沒有偽造身份的誠實節點有優勢。John 後續在 2005 年1 又寫了一篇論文,指出誠實節點可以模仿惡意節點的行為,根據自己的算力盡可能多地虛報身份。如果這些虛擬身份都實行拜占庭容錯協議,“故障節點的佔比不能超過 f % ”的設想可以替換成“故障節點的算力佔比不能超過總算力的 f % ”的設想。因此,不再需要對身份進行驗證,而且開放的點對點網路可以執行拜占庭容錯協議。比特幣採用的也是同樣的想法。然而,中本聰提出了一個更深層次的問題:什麼能夠激勵節點花費大量算力進行工作量證明? 解決這一問題需要再一次的飛躍:數字貨幣。
集大成者
理解了這些包含比特幣設計內容的專案,就能真正欣賞中本聰的天才之處。比特幣出現之後,首次將難題的解與數字貨幣分離開來,僅僅將它們用來維護賬本。解決工作量證明難題是由名為“礦工”的專門實體負責的(不過中本聰沒有想到挖礦的專業化程度會變得這麼高)。
礦工一直在競爭尋找下一個難題的解;每個礦工都要解決一個略有不同的難題,成功的概率與該礦工控制的那部分全球算力成正比。解出難題的礦工基於串聯起來的時間戳向賬本貢獻下一組(區塊)交易。作為提供賬本維護服務的獎勵,貢獻區塊的礦工會得到新鑄造的貨幣。如果有礦工貢獻的交易或區塊是無效的,則會遭到貢獻後續區塊的多數礦工的抵制,導致不良塊得不到有效的區塊獎勵。這樣一來,在貨幣激勵之下,礦工會確保彼此都遵守協議。
比特幣巧妙地幫助了以工作量證明創造貨幣的機制免受雙花問題的影響,因為它不為難題的解本身賦予價值。實際上,難題的解之所以不具有經濟價值,是因為以下兩個因素:出塊所需的工作量是一個浮動的引數(與全球算力成正比),而且每個塊發行的比特幣數量也不是固定的。區塊獎勵(鑄造新比特幣的方式)被設定成每 4 年減半(2017 年,比特幣的區塊獎勵從最開始的 50 個比特幣降到了 12.5 個比特幣)。比特幣還納入了另一個獎勵機制——交易的傳送者要支付礦工挖礦的服務費。交易費和礦工獎勵預期將由市場決定。
中本聰的天才之處不在於比特幣使用的任何一個元件,而是在於將這些元件巧妙地結合起來為整個系統注入活力。時間戳和拜占庭容錯協議的研究者沒有想出激勵節點誠實的機制,直到 2005 年才想到使用工作量證明來代替身份。相反,提出 hashcash、b-money 和 bit gold 構想的研究人員沒有融入共識演算法來防止雙花問題。在比特幣系統中,安全的賬本是防止雙花問題並保障比特幣的貨幣價值的必要條件。有價值的貨幣是獎勵礦工的必要條件。反過來,強大的算力又是保障賬本的安全性的必要條件。否則,作惡者可以聚集 50 % 以上的全球算力,使其生成區塊的速度超過剩餘網路,從而發動雙花攻擊,有效覆寫歷史,傾覆整個系統。因此,比特幣是一個獨立的系統,迴圈依靠上述三個元件。中本聰面對的挑戰不僅在於設計,還在於說服最初的使用者和礦工社群一起跨入未知領域——最初,一份披薩價值 1萬個比特幣,全網的算力還不到如今的萬億分之一 。
註解:
[1]: Aspnes,J.,etal.2005.Exposingcomputationally challenged Byzantine imposters. Yale University Department of Computer Science;http://cs.yale.edu/publications/techreports/tr1332.pdf .
[2]: Back,A.1997.Apartialhashcollisionbasedpostage scheme;http://www.hashcash.org/papers/announce.txt .
[3]: Back,A.2001.Hashcash;https://web.archive.org/web/20010614013848/http://cypherspace.org/hashcash/ .
[4]: Back,A.2002.Hashcash—adenialofservicecounter measure;http://www.hashcash.org/papers/hashcash.pdf .
[13]: Dai, W. 1998;http://www.weidai.com/bmoney.txt .
[14]: Douceur, J. R. 2002. The Sybil attack;https://dl.acm.org/citation.cfm?id=687813 .
[15]: Dwork, C., Naor, M. 1992. Pricing via processing or combatting junk mail;https://dl.acm.org/citation.cfm?id=705669 .
[17]; Franklin, M. K., Malkhi, D. 1997. Auditable metering and lightweight security;http://www.hashcash.org/papers/auditable-metering.pdf .
[18]: Gabber, E., et al. 1998. Curbing Junk E-Mail via Secure Classiffication.http://www.hashcash.org/papers/secure-classification.pdf .
[24]: Jakobsson, M., Juels, A. 1999. Proofs of work and bread pudding protocols;http://www.hashcash.org/papers/bread-pudding.pdf .
[25]: Juels, A., Brainard, J. 1999. Client puzzles: a cryptographic countermeasure against connection completion attacks.Proceedings of Networks and Distributed Security Systems : 151-165;https://www.isoc.org/isoc/conferences/ndss/99/proceedings/papers/juels.pdf .
[38]: Pinkas, B., Sander, T. 2002. Securing passwords against dictionary attacks.Proceedings of the Ninth ACM Conference on Computer and Communications Security : 161-170;https://dl.acm.org/citation.cfm?id=586133 .
[42]: Szabo, N. 2008. Bit gold. Unenumerated;https://unenumerated.blogspot.com/2005/12/bit-gold.html .
原文連結:https://queue.acm.org/detail.cfm?id=3136559
作者:Arvind Narayanan & Jeremy Clark
翻譯&校對:閔敏 & 阿劍