如果你讀過比特幣的新聞報道,並且熟悉密碼學領域的學術研究的話,你應當會留下這樣的印象:自 David Chaum 起,學術界對數字貨幣展開了長達數十年的研究,卻未能取得商業上的成功,因爲整個數字貨幣系統需要一個類似銀行的中心化服務機構加以控制,事實上沒有一家銀行對此感興趣。比特幣則另闢蹊徑,提出了創建無需銀行的去中心化加密貨幣的想法,數字貨幣終於迎來了成功。人們普遍認爲,神祕的比特幣之父中本聰並非學術界人士,比特幣與之前的學術設想毫無相似之處。

爲反對上述觀點,本文特別列出了圖 1,顯示比特幣用到的所有技術幾乎都源自 20 世紀 80 和 90 年代。筆者並非有意貶低中本聰的貢獻,而是要指出他也是站在巨人的肩膀上。通過對比特幣概念的溯源,我們可以專注於中本聰在洞察力上的真正飛躍——他是如何通過某種準確且複雜的方式將這些技術結合起來的。這有助於解釋爲什麼比特幣這麼晚才誕生。已經熟悉了比特幣運作原理的讀者或許能從這些歷史回顧中獲得更深刻的理解。(請參見 Arvind Narayanan 等人所著的《比特幣和加密貨幣技術》作爲入門讀物 36。)比特幣的學術史也作爲一項案例研究,展示了學術界人士、外部研究人員和相關從業人士之間的關係,並分享了三方如何互相受益的經驗之談。

深度 | 一文詳解比特幣的學術譜系

賬本

如果你有一個安全的賬本,將它應用於數字支付系統的過程很簡單。舉例來說,如果 Alice 通過 PayPal 發送 100 美元給 Bob ,PayPal 會從 Alice 的賬戶取出 100 美元,並記入 Bob 的賬戶。傳統的銀行業大致上也是這麼操作的,只不過因爲銀行之間的沒有一個統一的賬本而變得複雜了。

賬本的概念是理解比特幣的基礎。賬本可以記錄系統中發生的所有交易,向系統中所有參與者公開,並且受到他們的信任。比特幣將這種記錄支付情況的系統轉化成了一種貨幣。然而在銀行業中,賬戶結餘代表戶主可以從銀行取出的現金,那麼一單位的比特幣代表什麼?暫且將它理解爲具有內在價值的交易物。

如何在一個類似於參與者不信任彼此的互聯網環境中構建一個賬本?讓我們先從簡單的部分開始:如何選擇數據結構。我們期望這個賬本能滿足幾個屬性。這個賬本應該是不可更改的,或者更確切來說,是隻能_添加_ :只能添加新的交易,不能刪除、修改或重新排序已有的交易。此外,還應該有方法隨時獲取賬本狀態的簡潔化 加密摘要。摘要是避免存儲整個賬本的短字符串,如果賬本遭到任何篡改,摘要也會隨之改變,因此篡改會被發覺。之所以要滿足上述屬性,是因爲這個賬本不同於存儲在單一機器上的普通數據結構,而是由一組互不信任的參與者共同維護的_全球_ 數據結構。另一種實現去中心化數字賬本的方法 7,13,21 是由多位參與者維護本地賬本,並由查詢這組賬本的用戶解決賬本間的衝突。

鏈接型時間戳

比特幣的賬本數據結構借鑑自 Stuart Haber 和 Scott Stornetta 於 1990 年至 1997 年間撰寫的一系列論文(其中 1991 年的論文是與 Dave Bayer 合著的),只做了少數改動。這是中本聰在比特幣的白皮書中親口所述。 Haber 和 Stornetta 解決了文件時間戳的問題——他們旨在創建一個“數字公證”服務。對於專利、商務合同等文件來說,所有者想要確保文件創建於特定時間點,而不是後來才創建的。他們定義的文件概念很廣,而且可以是任何類型的數據。順帶一提,他們在論文中確實提及金融交易是一種潛在應用,不過並未當作重點。

概述一下 Haber 和 Stornetta 的論文可得,文件是處於不斷創建並廣播中的。每份文件的創建者確認創建時間並簽署文件、文件的時間戳以及上一個被廣播的文件。上一個文件已經由之前的創建者簽署了,因此這些文件形成了一條帶有時間指針的長鏈。外部用戶無法改變帶有時間戳的消息,因爲該消息是由創建者簽署過的,就算創建者想要改動它,必須連同後面鏈接的消息一起改動。因此,如果一個可信的來源(例如,另一個用戶或某個專門的時間戳服務)將某個東西添加到了鏈上,到這個東西爲止的整條鏈會被鎖住,無法進行更改,並且暫時定下順序。此外,假設這個系統會拒絕帶有不正確的創建時間的文件,按理可知這些文件的創建時間至少不會晚於其時間戳所示的時間。無論如何,比特幣只是借鑑了 Haber 和 Stornetta 的研究成果中的數據結構部分,在此基礎上新增了工作量證明機制,重新設計了數據結構的安全屬性。關於工作量證明機制,我們會在後文中講解。

在後續論文中,Haber 和 Stornetta 引入了能提高數據結構的效率的想法(其中一些想法在第一篇論文中已有提及)。第一,文件之間的鏈接可以通過哈希值而非簽名創建;哈希值計算起來更加簡單迅速。這類鏈接稱爲哈希指針。第二,不同於將文件一個個連接起來——如果同一時間創建出了很多文件,這種方式會變得很低效——可以將這些文件打包進不同的批量或數據塊,每個數據塊裏的文件都共享同一個時間戳。第三,每個數據塊中的文件可以由哈希指針創建的二叉樹(即默克爾樹),而非一條線性鏈相連接。順帶提一下,在 Haber 和 Stornetta 的第一篇論文發表之後不久, Josh Benaloh 和 Michael de Mare 分別於 1991 年引入了上述 3 個想法。

默克爾樹

比特幣本質上使用的是 Haber 和 Stornetta 於 1991 和 1997 的論文中撰寫的數據結構,如簡化版的圖 2 所示 (中本聰當時可能不知道 Benaloh 和 de Mare 的研究成果)。當然,比特幣用交易代替了文件。在每個區塊(實質即上文所說的數據塊)的默克爾樹中,葉節點都是交易,且每個內部節點都包含兩個指針。這種數據結構有兩大重要屬性。第一,最新區塊的哈希值充當摘要。對任意交易(葉節點)的改變都必然將變化傳導至交易所在區塊的根節點,以及後續區塊的根節點。因此,如果你知道了最新區塊的哈希值,就可以從你並不信任的數據源下載剩餘賬本,並驗證它是否有過變化。一個類似的觀點確立了數據結構的另一大重要屬性——任何人都可以高效地向你證明某個交易是否包含在賬本中。這個用戶只需向你發送這個交易所在區塊中的少量節點(這就是默克爾樹的意義),以及後續每個區塊所需的少量信息。性能和可擴展性的提高非常需要高效證明交易是否包含在區塊內的能力。

深度 | 一文詳解比特幣的學術譜系

順便一提,默克爾樹是以非對稱密碼學先鋒 Ralph Merkle 命名的,他在 1980 年的論文中提出了這一想法 33。他當初預期的應用是爲公共的數字證書目錄生成一個摘要。例如,如果一個網站向你出示證書,它還會出示一個簡短的證明,證明這個證書確實存在於全球目錄。只要你知道目錄中證書的默克爾樹的根哈希值,你就可以高效地驗證這個證明。按照密碼學領域的標準來看,這個想法已經算不上新穎了,不過它的力量直至最近纔得到重視。它處於近期實現的證書透明化系統的核心 30。 一篇 2015 年的論文提出了 CONIKS ,將公鑰目錄的想法應用於端到端的加密郵件 32。新型加密貨幣以太坊提供的主要賬本功能之一就是高效地驗證部分全球狀態。

比特幣可能是 Haber 和 Stornetta 提出的數據結構在現實世界中最著名的實例,不過不是第一例。至少有兩家公司提供文件時間戳服務 ——Surety 始於 20 世紀 90 年代中期,而 Guardtime 始於 2007 年。這兩種服務發生了有趣的轉變,因爲 Bayer、Haber 和
Stornetta 5 提出了一個想法,即騰出報紙上的一個廣告位定期發佈默克爾根。圖 3 顯示了 Guardtime 在報紙上發佈的默克爾根。

深度 | 一文詳解比特幣的學術譜系

拜占庭容錯

當然,不受中心權威實體控制的互聯網貨幣需要滿足更嚴格的要求。分佈式賬本不可避免會出現分叉,這意味着一些節點會認爲區塊 A 是最新的,另一些節點會認爲區塊 B 是最新的。一個原因可能是有作惡者試圖擾亂賬本的運作,另一個原因可能僅僅是網絡延遲,導致不同的節點在無意識的情況下近乎同時生成區塊。正如 Mike Just 在 1998 年的論文中所述,僅僅依靠鏈接型時間戳不足以解決分叉問題。

另一個研究領域容錯型分佈式計算已經研究過這一問題,不過用的名稱不同,其中包括 狀態複製。一種解決方案是允許一組節點按照相同的順序應用相同的狀態轉換——通常來說,確切的順序並不重要,只要所有節點保持一致就好。對於數字貨幣來說,要複製的狀態是一組餘額表,交易代表的是狀態轉移。圖靈獎得主 Leslie Lamport 在 1989 年發表的論文中提出了包括 Paxos 在內的早期解決方案。他提出使用狀態複製的方法避免通信信道不可靠或是少數節點可能出現某些“現實”故障——如永久離線或是首次離線後重啓併發送過時消息——的問題。後續的文獻討論了更加不利的環境和效率權衡關係。

一項相關工作研究了網絡可靠性高的情況(消息發送延時不超過一定範圍),然而其對“錯誤”的定義擴大成了 _任何_背離協議的情況。這類拜占庭錯誤包括自然發生的錯誤和惡意設計的行爲。早在 1982 年,Lamport 與 Robert Shostak 和 Marshall Pease 就在其合著的論文中首次研究了這類錯誤。 之後直到 1999 年,Miguel Castro 和 Barbara Liskov 發表了一篇具有里程碑意義的論文,介紹了 PBFT (實用拜占庭容錯算法)的概念,同時解決了拜占庭錯誤和不可靠網絡的問題。與鏈接型時間戳相比,關於容錯的學術文獻數量龐大,而且囊括了數以百計的 Paxos 和 PBFT 等開創性協議的變體和優化版本。

在最初的白皮書中,中本聰並沒有引用這類文獻或是使用相關術語。他使用了一些概念,作爲他的協議中共識機制的參考,並考慮了攻擊者以及加入和離開網絡的節點的故障問題。相比之下,他明顯依賴於鏈接型時間戳(以及下文將要論述的工作量證明)的文獻。在郵件列表討論中被問及比特幣與拜占庭將軍問題的關係(需要拜占庭容錯來解決的思維實驗)之時,中本聰堅稱採用工作量證明模式的區塊鏈可以解決這一問題。

在接下來的幾年,其他學者已經從分佈式系統的角度研究了中本聰的共識機制。這些研究仍在推進中。一些學者表示比特幣的屬性非常脆弱,而另一些學者認爲拜占庭容錯視角無法公正評價比特幣的一致性 40。另一種方法是定義已經過充分研究的屬性的變型,並證明比特幣滿足這些變型。這些定義最近經過了大幅改進,在更爲現實的消息傳遞假設下,變成了一種更爲標準的一致性定義。然而,所有這些研究成果都建立在參與者行爲“誠實”(即符合協議)的前提之下,然而中本聰建議誠實的行爲是通過經濟激勵來實現的,無需對此進行盲目假設。關於中本聰的共識算法可以起到激勵作用的分析不適用於過去的容錯系統模型。

工作量證明

實際上,所有容錯系統都假設系統中絕大多數(例如,超過 2/3
的)節點都是誠實且可靠的。在一個開放式的點對點網絡中,節點無需註冊,而且可以自由加入退出。因此,作惡者可以發起 女巫攻擊
,創建多個馬甲節點,破壞整個系統的共識保障。 John Douceur 14 於 2002 年正式提出了女巫攻擊,並指出利用 工作量證明
的密碼學模型來緩解這一問題。

起源

要了解工作量證明,先得從源頭講起。Cynthia Dwork 和 Moni Naor 15 在 1992 年最先提出了工作量證明的雛形。其目的是阻止垃圾郵件。要注意的是,垃圾郵件、女巫攻擊和拒絕服務這些問題都是大同小異的,作惡者會將普通用戶所造成的影響在網絡中放大數倍。工作量證明能夠同時抵禦這三種攻擊。根據 Dwork 和 Naor 的工作量證明設計,發件人在發送郵件的同時只有附上已完成適量計算的證明(即,工作量證明),收件人才會處理這封郵件。一臺普通的計算機大概需要幾秒鐘的時間來完成工作量證明。因此,這不會給普通用戶造成困難,然而想要發送 100 萬封垃圾郵件的人如果使用的是相同的硬件設備,則需要幾周時間。

要注意的是,工作量證明_實例_(也稱作 難題)應該針對不同的郵件和收件人有所區別。否則,垃圾郵件發送者會向同一個收件人發送不同的郵件(或者向不同的收件人發送同一封郵件),其成本等同於向一個收件人發送一封郵件。第二個重要的屬性是,收件人只需承擔極少的計算量,即,無論這些難題計算起來有多難,驗證計算結果正確與否應該很容易。此外,Dwork 和 Naor
提出了帶有陷門(trapdoor)的函數,陷門由中心實體掌握,可以免去解決難題所需的工作量。一種可行的陷門應用是讓中心實體無需成本就可以批准郵件的發送。 Dwork 和 Naor 提出了三種滿足上述屬性的候選難題,它引入了一個全新的領域,我們之後會提到。

Hashcash

還有一種非常類似的想法叫作 hashcash,是由博士後研究員 Adam Back 於 1997 年提出的,那時他是密碼朋克社區的一員。密碼朋克聚集了一羣激進分子,他們反對政府和中心化機構集權,力圖通過密碼學進行社會和政治改革。回顧過去,他首先發布了
hashcash 軟件,在 5 年之後的 2002 年又發佈了互聯網草案(標準化文檔)和一篇論文。

Hashcash 比 Dwork 和 Naor 的想法要簡單得多:它沒有陷門和中心機構,而且僅使用哈希函數而非數字簽名。它基於一則簡單的原理:

哈希函數是一種爲了達成某些實用目的的隨機函數,這意味着如果要找到一個能讓哈希函數得出特定輸出值的輸入值,唯一的方法是嘗試多個輸入值,直到得出期望的輸出值爲止。進一步來說,要找到對應任意一組輸出值的輸入值,唯一的方法是將不同的輸入值依次代入哈希函數進行運算。因此,如果我讓你找到一個輸入值,它對應的(二進制)哈希值是 10 個零開頭的,你必須嘗試很多輸入值,然後發現每個輸入值滿足條件的概率是 1/210 ,這意味着你必須依次嘗試 210 個輸入值,約等於 1000 則哈希計算。

從 hashcash 的字面意義可知,Back 將工作量證明視作一種貨幣形式。 他在個人主頁上將其定位爲 DigiCash 的替代方案。DigiCash 是 David Chaum 提出的一種銀行向用戶發行不可追蹤的數字貨幣的系統 3 。爲了更加突出數字貨幣的貨幣特徵,Back 甚至在技術設計上做出了妥協。後來,他發表評論稱比特幣是由 hashcash 衍生而來。不過,Hashcash 根本算不上是貨幣,因爲它無法抵禦雙花攻擊。Hashcash 代幣無法進行點對點交易。

於此同時,從學術角度來看,研究人員發現除了防止垃圾郵件之外,工作量證明還有很多應用場景,如抵禦拒絕服務攻擊 25、確保網站分析的完整性、及對口令猜測實行網絡限速等。順帶一提,工作量證明 這一術語首次出現於 Markus Jakobsson 和 Ari Juels 在
1999 年撰寫的一篇論文裏,作者在撰文之前對工作量進行了詳盡的調查。要注意的是這些研究人員似乎毫不關心 hashcash
,而是聚焦於基於哈希的工作量證明,這在 Eran Gabber 等人以及 Juels 和 Brainard 所著的論文中有所介紹。(直到這些論文發表很久之後,本段提到的許多名詞才成爲標準術語。)

工作量證明和數字貨幣:兩難困境

你或許知道工作量證明最初作爲抵禦垃圾郵件的手段並不成功。一個可能的原因是不同設備的解題速度差異顯著。這意味着垃圾郵件製造者只需小小地投資一把定製硬件,垃圾郵件的製造速度就能提升幾個數量級。

從經濟學角度來說,生產成本的不對稱性會自然而言地帶動交易的發展,即工作量證明解決方案的市場。然而,這是一種兩難困境,因爲需要一種有效的數字貨幣。缺乏這樣一種貨幣確實是影響工作量證明激勵的首要因素。一種原始的解決方案是將難題的解作爲貨幣,正如 hashcash 所做的那樣。

在比特幣的白皮書發表之前,有兩篇文章提出了更加符合上述思路的解決方案,分別是 b-money 和 bit gold 這兩種概念。上述兩種方案提供了時間戳服務(通過工作量證明)來創造貨幣,一旦貨幣被創造出來,就同意轉賬。如果各服務器或節點對賬本存在分歧,沒有明確的解決之法。這兩篇文章似乎都暗示了採取多數決的機制,不過由於女巫攻擊的存在,這些機制的安全性都不高,除非針對網絡入口設置一個把關人(gatekeeper)或是通過工作量證明抵禦女巫攻擊。(見下方註解)

抗女巫攻擊的網絡

John Douceur 寫過一篇關於女巫攻擊的論文。他提出的解決方案是要求所有加入拜占庭容錯協議的節點解決哈希難題。如果一個節點僞裝成 N 個節點,是不可能及時解決 N 個難題的,假身份會被清除。不過,惡意節點依然比沒有僞造身份的誠實節點有優勢。John 後續在 2005 年又寫了一篇論文,指出誠實節點可以模仿惡意節點的行爲,根據自己的算力盡可能多地虛報身份。如果這些虛擬身份都實行拜占庭容錯協議,“故障節點的佔比不能超過 f %”的設想可以替換成“故障節點的算力佔比不能超過總算力的 f %”的設想。因此,不再需要對身份進行驗證,而且開放的點對點網絡可以運行拜占庭容錯協議。比特幣採用的也是同樣的想法。然而,中本聰提出了一個更深層次的問題:什麼能夠激勵節點花費大量算力進行工作量證明?解決這一問題需要再一次的飛躍:數字貨幣。

集大成者

理解了這些包含比特幣設計內容的項目,就能真正欣賞中本聰的天才之處。比特幣出現之後,首次將難題的解與數字貨幣分離開來,僅僅將它們用來維護賬本。解決工作量證明難題是由名爲“礦工”的專門實體負責的(不過中本聰沒有想到挖礦的專業化程度會變得這麼高)。

礦工一直在競爭尋找下一個難題的解;每個礦工都要解決一個略有不同的難題,成功的概率與該礦工控制的那部分全球算力成正比。解出難題的礦工基於串聯起來的時間戳向賬本貢獻下一組(區塊)交易。作爲提供賬本維護服務的獎勵,貢獻區塊的礦工會得到新鑄造的貨幣。如果有礦工貢獻的交易或區塊是無效的,則會遭到貢獻後續區塊的多數礦工的抵制,導致不良塊得不到有效的區塊獎勵。這樣一來,在貨幣激勵之下,礦工會確保彼此都遵守協議。

比特幣巧妙地幫助了以工作量證明創造貨幣的機制免受雙花問題的影響,因爲它不爲難題的解本身賦予價值。實際上,難題的解之所以不具有經濟價值,是因爲以下兩個因素:出塊所需的工作量是一個浮動的參數(與全球算力成正比),而且每個塊發行的比特幣數量也不是固定的。區塊獎勵(鑄造新比特幣的方式)被設置成每 4 年減半(2017 年,比特幣的區塊獎勵從最開始的 50 個比特幣降到了 12.5 個比特幣)。比特幣還納入了另一個獎勵機制——交易的發送者要支付礦工挖礦的服務費。交易費和礦工獎勵預期將由市場決定。

中本聰的天才之處不在於比特幣使用的任何一個組件,而是在於將這些組件巧妙地結合起來爲整個系統注入活力。時間戳和拜占庭容錯協議的研究者沒有想出激勵節點誠實的機制,直到 2005 年纔想到使用工作量證明來代替身份。相反,提出 hashcash、b-money 和 bit gold 構想的研究人員沒有融入共識算法來防止雙花問題。在比特幣系統中,安全的賬本是防止雙花問題並保障比特幣的貨幣價值的必要條件。有價值的貨幣是獎勵礦工的必要條件。反過來,強大的算力又是保障賬本的安全性的必要條件。否則,作惡者可以聚集
50 % 以上的全球算力,使其生成區塊的速度超過剩餘網絡,從而發動雙花攻擊,有效覆寫歷史,傾覆整個系統。因此,比特幣是一個獨立的系統,循環依靠上述三個組件。中本聰面對的挑戰不僅在於設計,還在於說服最初的用戶和礦工社區一起跨入未知領域——最初,一份披薩價值 1 萬個比特幣,全網的算力還不到如今的萬億分之一


作者:Arvind Narayanan & Jeremy Clark
翻譯 & 校對:Elisa

來源鏈接:queue.acm.org