比特幣和區塊鏈的學術譜系
溫斯頓·邱吉爾說過一句名言,大概意思是:你回首看得越遠,你向前也會看得越遠。比特幣印證了這句話:比特幣的非凡和成功之處不在于它處于任何組件研究的前沿,而在于它整合了許多不相關領域的舊創意。
本文引用地址:http://www.j9360.com/article/201802/375814.htm本文回顧了比特幣和區塊鏈的學術譜系,展示了其組合創新的典范。文章雖然很長,但著墨之處,句句都切中技術演進中的關鍵點??v觀全文,如下圖目錄所示,讀者很容易建立比特幣技術路線的整體圖景。文章分別梳理總賬本,貨幣,礦工的技術路線,層層遞進,闡述這三個不同領域的技術積累如何匯集于比特幣這一神奇的創意。
值得一提的是,關于分布式一致性和共識機制,目前主流的分布式技術,包括各種云計算解決方案,都沒有直面拜占庭故障,那么基于大規模P2P網絡結構的比特幣是如何解決這些問題呢?以及又是如何激勵節點參與共識呢?相信本文會給你精彩的答案!

如果你已經在媒體上看到過比特幣,并且對密碼學領域的學術研究有一定的了解,那么你可能會有如下的印象:從David Chaum開始(文獻10,12),幾十年來很多人對數字現金(digital cash)的努力研究,最終都沒有獲得商業上的成功。因為這些工作需要一個集中的銀行服務器來控制系統,而沒有任何一家銀行愿意為其背書。隨著比特幣的出現,提出了一種不需要銀行的去中心化加密貨幣(cryptocurrency)方案,數字現金(digital cash)終于大獲成功。比特幣的發明者,神秘的中本聰,并不是一個學術界的人,比特幣與早期的學術方案并無相似之處。

*譯注:David Chaum,數字現金之父,早在1983年,在比特幣出現的25年前,David Chaum發明了數字現金(digital cash)。
本文認為,幾乎所有比特幣的技術組件都起源于20世紀80年代和90年代的學術文獻(見圖1)。 這并不是為了削弱中本聰的成就,而是指出他站在巨人的肩膀上。 事實上,通過追溯比特幣思想的起源,我們可以將中本聰洞察力的真正飛躍歸結為一個特定的,復雜的方式——一種組合創新(把底層組件整合在一起)的方式。這有助于解釋為什么比特幣花了這么長時間才被發明。已經熟悉比特幣工作原理的讀者可以從這個歷史回溯中獲得更深入的了解(更多介紹,參考Arvind和Narayanan等人的Bitcoinand Cryptocurrency Technologies(文獻36)。 比特幣的思想文化史也可以作為一個展示學術界、外部研究者和從業者之間合作關系的研究案例,并且為這些不同的群體之間如何彼此合作獲益提供經驗教訓。
*譯注:比特幣可謂組合式創新的典范。

1 總賬本(The Ledger)
如果你擁有安全的總賬本,那么將其用于數字支付系統的過程很簡單。例如,如果Alice通過PayPal給Bob 100美元,則PayPal從Alice的賬戶中扣除100美元,并將100美元存入Bob的賬戶。這大體上和傳統銀行業務中發生的事情差不多,雖然銀行的復雜業務之間并沒有一個共享的總賬本。
總賬本的概念是理解比特幣的起點。它記錄了系統發生的所有事務,并且對系統的所有參與者開放,并被他們信賴。比特幣將系統的支付記錄轉換為貨幣記錄。在銀行業務中,賬戶余額代表可以從銀行取出來的現金,但一個比特幣代表什么?就目前而言,比特幣代表包含固定價值的一次買賣(交易)。
在互聯網這樣參與者之間可能互不信任的環境中,怎樣才能如何建立一個總賬本?讓我們從簡單的部分開始:數據結構的選擇。這個數據結構必須滿足一定的屬性要求——總賬本應該是不可變的。更準確地說,只能增加:可以添加新的交易,但不能刪除、修改或對已有交易重新排序。除此之外,還需要一種方法來獲得總賬本狀態的密碼摘要。摘要是一個簡短的字符串,可以避免存儲整個總賬本。如果總賬本被篡改,所產生的摘要必然會發生變化,從而可以檢測到篡改。 需要這些屬性的原因是:與存儲在單個機器上的常規數據結構不同,總賬本是由相互不信任的一組參與者共同維護的全局數據結構。 這與去中心化數字總賬本(decentralizing digital ledgers, 文獻7,13,21)的方法是不同的,在分布式數字總賬本中,參與者維護本地總賬本,并且由用戶查詢這些總賬本來解決沖突。
1.1鏈式時間戳(Linked timestamping)
比特幣的總賬本數據結構有修改的借用了從1990年到1997年間由Stuart Haber和Scott Stornetta撰寫的一系列論文(他們1991年的論文還有另一個合著作者Dave Bayer,文獻5,22,23)。我們能夠知道這些歷史淵源是因為中本聰在他的比特幣白皮書(文獻34)中如此提及的。Stuart Haber和Scott Stornetta的主要工作是處理時間戳的文檔化——他們的目的是建立一個“數字公證”的服務。對于專利,商業合同和其他文件,人們可能希望確定該文件是在或不遲于某個時間點創建的。Stuart Haber和Scott Stornetta的文檔概念是非常泛化的,可以是任何類型的數據。他們確實提到金融交易是潛在的應用,但這不是他們關注的焦點。
Stuart Haber和Scott Stornetta方案的簡化版本中,文檔被不斷創建和廣播。每個文檔的創建者聲明一個創建時間(并簽名文檔)、文檔的時間戳和前一個廣播文檔。前一個廣播文檔已經簽署了自己的前任,所以文檔形成了一個很長的倒退鏈。外部用戶不能改變時間戳的信息,因為它由創建者簽名;創建者也不能在不改變整個跟隨信息鏈的情況下改變時間戳的信息。因此,如果通過可信來源(例如,另一個用戶或專門的時間戳服務)獲得鏈中的單個項目,那么該時刻之前的整個鏈是鎖定的,不可變,并且在時間上有序。進一步,如果你認為系統拒絕錯誤創建時間的文檔,則可以合理地保證文檔至少與其聲明一樣久遠。Further, if you assume that the system rejects documents with incorrect creation times, you can be reasonably assured that documents are at least as old as they claim to be.無論如何,比特幣只是借用Stuart Haber和Scott Stornetta工作的數據結構,然后重新設計了安全屬性(通過增加工作量證明,本文稍后介紹)。
*譯注:進一步,如果你認為系統拒絕錯誤創建時間的文檔,則可以合理地保證文檔至少與其聲明一樣久遠。原文:Further, if you assume that the system rejects documents with incorrect creation times, you can be reasonably assured that documents are at least as old as they claim to be.
在Stuart Haber和Scott Stornetta的后續文獻中,他們介紹了使這個數據結構更加有效和高效的其他方案(其中一些在第一篇論文中有暗示)。首先,可以使用哈希而不是簽名來創建文檔之間的鏈接;因為哈希更簡單,計算速度更快。這樣的鏈接被稱為哈希指針。其次,不是單獨對文檔進行線程化處理(如果幾乎同時創建多個文檔,效率可能會很低),它們可以分為批處理組或區塊,每個區塊中的文檔具有基本相同的時間戳。第三,在每個區塊內,文檔可以用一個哈希指針的二叉樹連接在一起,稱為Merkle樹,而不是一個線性鏈。順便提一下,在Stuart Haber和Scott Stornetta的第一篇論文發表的6年之后,即1991年,Josh Benaloh和Michael de Mare獨立地提出了這三個方案。
1.2梅克爾樹(Merkle trees)

比特幣本質上使用Josh Benaloh和Michael de Mare在1991年和1997年提出的數據結構(中本聰大概不了解Josh Benaloh和Michael de Mare的工作),圖2以簡化的形式表示。當然,在比特幣中,交易取代了文檔。在每個塊的Merkle樹中,葉節點是交易,每個內部節點由兩個指針組成。這個數據結構有兩個重要的屬性。首先,最新塊的哈希作為摘要。對任何交易(葉節點)的更改都需要將更改一直傳播到塊根,以及所有后續塊的根。因此, 如果你知道最新的哈希值,你可以從不受信任的來源下載余下的總賬本,并驗證是否改 變。 類似的觀點建立了數據結構的第二個重要屬性 ——也就是說, 某人可以簡單有效地向你證明某個特定的交易包含在總賬本中。 這個用戶只須向你發送該交易塊中的少量節點(這是Merkle樹的特點),以及每個后續塊的少量信息。高效地證明事務的包含能力對于性能和可伸縮性是非常需要的。

*譯注:Ralph Merkle,生于美國,計算機科學家,對于公開密鑰加密技術有重大貢獻。后來研究方向轉至于納米科技以及人體冷凍技術。
便說一下,Merkle樹是由對稱密碼學的先驅Ralph Merkle命名。Ralph Merkle在1980年的論文(文獻33)中提出了這個想法。他的目標應用是生產數字簽名證書的公共目錄摘要。例如,當一個網站向你提供一個證書時,它也可以提供證書顯示在全局目錄中的簡短證明。只要你知道證書目錄中Merkle樹的根哈希,就可以高效地驗證證明。 這個想法在密碼標準中是古老的,但它的力量只有在最近才被認可。 它是最近實施的證書透明系統(文獻30)的核心。2015年的一篇論文提出了CONIKS,將Merkle樹應用于端到端加密電子郵件的公鑰目錄(文獻32)。 對全局狀態的部分進行高效的驗證是總賬本在新的加密貨幣(cryptocurrency) “以太坊(Ethereum)”中提供的關鍵功能之一。

比特幣可能是Josh Benaloh和Michael de Mare數據結構在真實世界中最著名的應用實例,但它并不是第一個。至少有兩家公司 ——從90年代中期開始的Surety,從2007年開始的Guardtime ——用到了文檔時間戳服務。這些服務都有一個有趣的交集(An interesting twist)是Bayer, Haber, and Stornetta(文獻5)提到的一個想法,這個想法是在報紙上以廣告的形式定期刊登Merkle根。圖3顯示了由Guardtime發布的Merkle根。
1.3拜占庭容錯(Byzantine fault tolerance)
當然,沒有中心權威的互聯網貨幣的要求更為嚴格。分布式賬本將不可避免地存在分叉,這意味著一些節點會認為A塊是最新的塊,而其他節點會認為B塊是最新的塊。這可能是因為攻擊者試圖破壞總賬本的操作;也可能僅僅是因為網絡延遲,不同的節點不知道對方的塊,偶爾會在同時產生塊。僅僅依靠鏈式時間戳解決分叉是不夠的,這由Mike在1998年的文章中證明(文獻26)。
一個不同的研究領域——容錯分布式計算——已經研究了這個問題,其中包括狀態復制(state replication)在內的不同名稱。解決這個問題的方法是使一組節點以相同的順序應用相同的狀態轉換——通常,精確的順序無關緊要,只要所有的節點都是一致的。對于數字貨幣(digital currency),要復制的狀態是一組余額,交易是狀態轉換。早期的解決方案,包括由圖靈獎得主Leslie Lamport于1989年(文獻28,29)提出的Paxos——當通信信道不可靠時,少數節點可能會出現某些“realistic”的故障,例如永遠離線或重新啟動,收到最初離線時發送的過時消息等——會考慮狀態復制。隨后,產生了大量的文獻,主要是應對更為復雜(敵對/不利)環境和針對效率的權衡(tradeoff)。
一系列相關的工作研究了網絡大多可靠的情況(消息以有限的延遲傳遞),但是“錯誤”的定義被擴展為處理與協議的任何偏離(any deviation)。這種拜占庭式的錯誤包括自然發生的錯誤以及惡意制造的行為。早在1982年(文獻27),Lamport與Robert Shostak和Marshall Pease發表了一篇論文:《拜占庭將軍問題》。之后在1999年,Miguel Castro和Barbara Liskov發表了一篇里程碑式的論文引入了PBFT(practical Byzantine fault tolerance)同時容納了拜占庭故障和不可靠的網絡(文獻8)。 與鏈式時間戳相比,有關容錯文獻的數量是巨大的,包括Paxos,PBFT和其他重要協議的數百種變體和優化。
中本聰在他最初的白皮書中沒有引用BFT的文獻或者使用它的語言。他使用了一些概念,將協議作為一種共識機制,并以攻擊者的形式以及節點加入和離開網絡的方式來考慮故障問題。 這與他明確聲明參考鏈式時間戳的文獻(包括工作量證明,下文討論)形成鮮明對比。 當被問及關于比特幣與拜占庭將軍問題(一個需要BFT解決的思想實驗的關系)的郵件列表討論時,中本聰聲稱工作量證明鏈解決了這個問題(文獻35)。
在接下來的幾年中,其他學者從分布式系統的角度研究了中本聰的共識機制——這仍然是一個正在進行的工作。有些人表示,比特幣的屬性是相當弱的(文獻43);而另外一些人則認為,對于比特幣的一致性屬性來說(文獻40),BFT的觀點并不公平。另一種方法是定義已經充分研究的性質變體,并證明比特幣滿足它們(文獻19)。最近,這些定義大大加強了,以提供一個更為標準的一致性定義,且該定義為消息傳遞保留更多現實性假設(文獻37)。然而,所有這些工作都假設部分參與者的行為是“誠實”(例如,協議兼容)的,而中本聰則認為,沒有必要盲目地假設行為是誠實的,因為行為是被激勵的。 對中本聰的激勵共識機制的全面分析并不適合過去的容錯系統模型。
2 工作量證明(Proof of Work)
幾乎所有的容錯系統都假定系統中的大多數或絕大多數(如超過一半或三分之二)的節點都是誠實和可靠的。在一個開放的對等網絡中,沒有節點的注冊,節點可以自由地加入和離開。因此,攻擊者可以創建足夠多的Sybils或sockpuppet節點來打破系統的一致性保證。Sybil攻擊是由John Douceur在2002年正式形式化,并借助于密碼學基礎設施——工作量證明——來化解它。
2.1起源(The origins)
為了理解工作量證明,我們來看看它的起源。今天被稱為工作量證明的第一次提出是由Cynthia Dwork和Moni Naor于1992年創建的。他們的目標是阻止垃圾郵件。請注意,垃圾郵件,Sybil攻擊和拒絕服務都是大致類似的問題:與常規用戶相比,攻擊者通過網絡增大其影響力。工作量證明適用于三方防御。在Cynthia Dwork和Moni Naor的設計中, 電子郵件收件人只會處理那些附帶有證明——發件人執行了適量計算工作——的電子郵件,即“工作量證明”。 計算工作量證明在普通計算機上可能需要幾秒鐘的時間。因此,對普通用戶來說不會造成任何困難,但是對于垃圾郵件發送者,在使用等效硬件的條件下,希望發送一百萬封電子郵件則需要幾周的時間,
請注意, 工作量證明(也稱為難題解決)必須特定于電子郵件以及收件人。 否則,垃圾郵件發送者將能夠向同一個收件人發送多個郵件(或者向多個收件人發送相同的郵件),而成本和一對一發送是一樣的。第二個重要的特點是它應該給收件人僅造成最小的計算負擔;難題解決方案應該是易于驗證的 ,無論他們計算多么困難。此外,Cynthia Dwork和Moni Naor認為帶有后門的功能——這是中心權威機構所知道的一個秘密——可以讓權威機構在不做工作量證明的情況下解決問題。一個可能的應用程序后門是為權威機構開放一個發送郵件不產生成本的郵件列表。Cynthia Dwork和Moni Naor的提案包含三個滿足其性質的候選難題,并啟動了整個研究領域,我們將再次回到這個主題。
2.2哈?,F金(Hashcash)
一個非常類似的名為hashcash的想法是在1997年由當時是cypherpunk社區的博士后研究員Adam Back獨立發明的。Cypherpunk社員是反政府和反中心機構力量的活動家,并致力于通過密碼學推動社會和政治變革。Adam Back是注重實踐的人:他首先發布的是hashcash軟件,五年后的2002年才發布Internet草案(標準化文件)和論文(文獻4)。
Hashcash比Cynthia Dwork和Moni Naor的想法簡單得多:它沒有后門,也不需要中心權威,它只使用哈希函數而不是數字簽名。 Hashcash基于一個簡單的原理:哈希函數在某些實際用途中表現為隨機函數,這意味著找到哈希到特定輸出的輸入的唯一方法是嘗試各種輸入,直到產生期望的輸出為止。而且,找到哈希到任意一組輸出的輸入的唯一方法是再次逐個嘗試對不同的輸入進行哈希。 所以,如果讓你嘗試找到一個輸出哈希值以10個零開始的輸入(二進制),你將不得不嘗試大量的輸入,你會發現每個輸出從10個零開始的機會都是(1/2)^10,這意味著你將不得不嘗試(2)^10個輸入的順序,或大約1000個哈希計算。
顧名思義,在hashcash中,Adam Back把工作量證明看作一種貨幣形式。在他的網站上,他把這種貨幣定位為David Chaum的DigiCash實現選擇之一——一個由銀行向用戶發放無法追蹤的數字現金(digital cash)的系統。他甚至在技術設計上做了一些權衡設計,使其顯得更像一種貨幣。后來,Adam Back評論認為比特幣就是hashcash的直接擴展。但是,hashcash并不是現金,因為它沒有防止雙重支出(雙花)的保護。Hashcash的令牌不能在對等同伴之間交換。
同時,在學術領域中,研究人員發現,除了垃圾郵件之外, 工作量證明還有很多應用場景 ,例如防止拒絕服務攻擊(文獻25),確保網絡分析的真實性(文獻17),速率限制密碼在線猜測(文獻38)等。順便說一句,工作量證明這個詞是有由Markus Jakobsson和Ari Juels在1999年撰寫的一篇論文中首次提出來的,這篇論文也是到那時為止對這一研究的很好綜述(文獻24)。值得注意的是,這些研究人員似乎并不知道到hashcash,各自獨立地朝著基于哈希的工作量證明的方向匯集,這在Eran Gabber等人的論文以及Juels(文獻18)和Brainard(文獻25)的論文中都有提及(本文中使用的許多術語是在有關論文發表后很長時間才成為標準術語的)。
側邊欄:Sybil-對抗網絡(Sybil-resistant networks)
John Douceur在他關于Sybil攻擊的論文中提出,所有參與BFT協議的節點都需要解決hashcash難題。如果一個節點偽裝成N個身份,將無法及時解決N個難題,其偽造的身份將被清除。然而,惡意節點仍然可以獲得比只聲稱單一身份的誠實節點有更多的優勢。2005年發布的后續文章(文獻1)中提出,誠實的節點應該反過來模仿惡意節點的行為,并聲稱其計算能力能夠承擔的盡可能多的虛擬身份。 利 用這些虛擬身份執行BFT協議,原來的假設“最多只有部分f節點故障”可以用“由故障節點控制的總計算能力的分數至多為f ”來代替。 因此,不再需要驗證身份,并且開放的對等網絡可以運行BFT協議,比特幣恰好使用了這個想法,但中本聰提出了一個進一步的問題:什么激勵節點執行昂貴的工作量證明計算呢?答案需要進一步的飛躍:數字貨幣(digital currency)。
2.3工作量證明和數字現金:雙環困境(Proof of work and digital cash: A catch-22)
你可能知道,作為反垃圾郵件措施, 工作量證明沒有成功應用于其發源的應用。 一個可能的原因是不同設備解決難題的速度有巨大差異。這意味著垃圾郵件發送者可以用小額的投資來定制硬件,就可以將濫發垃圾郵件的速率提高幾個數量級。 在經濟學中,對生產成本不對稱的自然反應是進行貿易——即,工作量證明的交易市場。 但是,這里就是一個 雙環困境 (catch-22),因為這將需要一個可以工作的數字貨幣(digital currency)。事實上,正是因為缺乏這樣的貨幣,導致了工作量證明使用的最大動機不足。這個問題的一個粗暴的解決辦法是宣布難題解決方案是現金,正如hashcash試圖做的那樣。

*譯注:雙環困境,一般指互相抵觸之規律或條件所造成的無法脫身的困窘;或者是不合邏輯的或矛盾的問題。例如這就是一個相互矛盾的困窘:沒有人想要支持你除非你已經成功了,但是如果沒有人支持,你怎么可能成功呢?
在比特幣之前的兩篇文章中發現了更為清晰的方案來將難題解決作為現金來處理,文章分別描述了b-money(文獻13)和bit gold(文獻42)。這些方案提供時間戳服務,用來簽署錢的創建(通過工作量證明),并且一旦創建了錢,就可以簽署轉賬。但是,如果服務器或節點之間出現總賬本不一致的情況,文章則沒有給出明確的解決辦法。依靠多數原則來決定似乎是兩位作者的文章的隱含之意,但是由于Sybil問題,這些機制并不是很安全,除非有一個gatekeeper控制網絡的進入,或者Sybil對抗本身是通過工作量證明來實現的。
3 組合創新(Putting it all together)
通過了解所有這些貢獻了比特幣各種設計細節的前輩,你會體會到中本聰真正天才般的創新。在比特幣中,難題解決方案不能自我構建成為現金,相反,他們只是用來保護總賬本。而工量作證明的解決是由專門的實體稱為礦工來完成的(雖然中本聰低估了專業采礦將如何實現)。
礦工們需要不斷地相互競爭,尋找下一個難題解決方案。每個礦工都要解決這個難題的一個稍微不同的變體,因此成功的機會與礦工控制的全球采礦能力的一部分成正比。解決難題的礦工貢獻了基于鏈式時間戳的總賬本的下一個批次,或者區塊(即下一個交易)。通過維護和交換總賬本,貢獻一個區塊的礦工將會獲得一個新挖到貨幣的一份獎勵。很有可能的是,如果一名礦工貢獻了一個無效的區塊或交易,將會被大多數其他貢獻下一區塊的礦工拒絕,從而使無效區塊的獎勵失效。這樣,由于金錢上的激勵,礦工們確保了彼此都遵循同樣的協議。
比特幣巧妙地避免了困擾“工作量即現金(proof-of-work-as-cash)”機制的雙重支出(double-spending,雙花)問題,因為它避開了難題解決方案本身的價值。 事實上,比特幣實現了難題解決方案與經濟價值的兩倍脫鉤:生產一個區塊所需的工作量是一個浮動參數(與全球采礦能力成正比),而且更進一步每個區塊發放的比特幣數也不是固定的。 區塊獎勵(也就是新的比特幣是如何挖出的)每四年設定一半(在2017年,獎勵是12.5比特幣/塊,從最初50比特幣/塊減半而來)。比特幣包含了一個額外的獎勵計劃——即交易發起者向具有包含該交易的區塊的礦工支付交易費用,并且期望由市場決定交易費用和礦工的報酬。
那么, 中本聰的天才并不是比特幣的任何單個組成部分,而是創造了一種復雜方式——把各種技術融合在一起為整個系統注入生命活力。 客觀的說, 時間戳和拜占庭協議的研究人員沒有觸及節點激勵問題,直到2005年,也沒有使用工作量證明來消除節點身份問題 。 反過來說, hashcash,b-money和bit gold的作者并沒有吸收共識/一致性算法的思想來解決雙重支出(雙花)問題 。在比特幣中,一個安全的總賬本才能防止雙重支出(雙花)問題,從而確保貨幣有價值。有價值的貨幣才能獎勵礦工,然后保證采礦力量的強度才能保證總賬本的安全。如果沒有足夠采礦力量,一個對手可能會占據全球50%以上的采礦能力,從而能夠比網絡的其他部分更快地生成數據塊,然后雙重支付交易,并有效地重寫歷史記錄,使得整個系統赤字。因此, 比特幣是自舉的,在總賬本,貨幣,礦工這三個組件之間有一個閉環的依賴關系。 中本聰面臨的挑戰不僅僅在于設計,而是能夠說服最初的用戶和礦工社區一起,面向未知的時代,縱身一躍:那個時候比薩的價格超過了10000比特幣,網絡的采礦能力還不到今天的萬億分之一。
側邊欄:智能合約(Smart contracts)
一個智能合約就是把數據放在一個安全的總賬本中,并將智能合約擴展到計算。換句話說,它是一個公開指定程序正確執行的共識協議。用戶可以調用智能合約程序中的功能,并服從程序指定的任何限制,并且功能代碼由礦工串聯執行。用戶可以信任輸出而不必重做計算,并可以編寫自己的程序來處理其他程序的輸出。通過與加密貨幣(cryptocurrency)平臺相結合,智能合約尤其強大,因為上述程序可以處理資金——擁有,轉讓,銷毀,在某些情況下甚至可以打印。
比特幣實現一種限制性編程語言作為智能合約。一個“標準”交易(即將貨幣從一個地址轉賬另一個地址的交易)就是用這種語言實現的簡短腳本。以太坊(Ethereum)提供更寬容和強大的語言。
智能合約的想法是由Nick Szabo在1994年提出的(文獻41),因為可以類比于法律合同(智能合約比法律合同多了自動執行的功能),所以命名為智能合約。Nick Szabo早就預見性(這個觀點已經被Karen Levy (文獻31)和Ed Felten 所批評(文獻16))的提出了 智能合約作為數字現金協議的擴展,并且認識到拜占庭協議和數字簽名(等等)可以作為構建模塊。 加密貨幣的成功使智能合約成為現實,對這個話題的研究也開始興起。例如,編程語言研究人員已經調整了他們的方法和工具,以自動發現智能合同中的錯誤并寫出可校驗正確的智能合約。
3.1公鑰即身份(Public keys as identities)
本文基于這樣一個理解:一個安全的總賬本使創建數字貨幣(digital currency)更加容易。讓我們再回顧這個斷言。當Alice希望支付Bob時,她將交易廣播給所有的比特幣節點。一個交易只不過是一個字符串:一個聲明“Alice希望支付給Bob一些錢”并由Alice簽名。最終,這個聲明被礦工記入總賬本,交易即成為現實。請注意,這個過程中并不要求Bob以任何方式參與。但是讓我們把注意力放在這次交易的缺席者:顯然缺席的是Alice和Bob的身份;相反,交易只包含他們各自的公鑰。 這就是比特幣的一個重要的概念:公鑰是系統中唯一的身份。 交易向公鑰傳入或者傳出價值,這個公約就稱為地址。
*譯者注:從這個地址概念的引入,對比傳統的分布式系統,中本聰的創新很巧妙。
為了能夠“說出”一個身份,你必須知道相應的密鑰。你可以隨時創建一個新的身份——方法是生成一個新的密鑰對——而不需要中心機構或注冊機構。你不需要申請用戶名或通知其他人你已選擇了特定的名稱——這是去中心化身份管理的概念——比特幣沒有指定Alice如何告訴Bob她的化名(Pseudonyms)是什么,這是系統外部的。
與當今大多數其他支付系統截然不同,這些想法相當“古老”,可以追溯到數字現金(digital cash)之父David Chaum。實際上,David Chaum也對匿名網絡做了開創性的貢獻,正是在這個背景下,他發明了這個“數字化名”( Digital Pseudonyms)這個創意。在他1981年的論文“Untraceable Electronic Mail, Return Addresses, and Digital Pseudonyms(文獻9)” 他說:“數字化名”是一個公鑰,用來驗證由相應私鑰的匿名持有者是否取得簽名。
現在, 只有通過公鑰才知道收件人是一個明顯的問題:無法將郵件路由到正確的計算機。 這導致了David Chaum方案的效率極低:匿名交易,不能消除。與集中支付系統相比,比特幣同樣效率極低:包含每個交易的總賬由系統中的每個節點維護。無論如何,比特幣選擇了安全而同時選擇了低效率,從而實現了“免費”的匿名性(即公鑰作為身份)。David Chaum在1985年的論文(文獻11),把這些想法推進了一步,他提出了一種基于普遍“化名”隱私保護電子商務愿景,以及數字現金(digital cash)背后的關鍵思想——“盲簽名(blind signatures)”。
“公鑰即身份”的思想也存在于前面討論過的比特幣的先驅性質的文獻中:b-money 和 bit gold。但是,大部分工作都建立在David Chaum的基礎上,而David Chaum自己后來的工作(包括電子現金)都偏離了這個想法。Cypherpunk社區對隱私保護的通訊和商務有濃厚的興趣,他們擁抱了他們稱之為nyms的“化名”。但對他們來說,nyms不僅僅是密碼身份(即公鑰),而是通常與公鑰相關的電子郵件地址。同樣,伊恩·戈德堡(Ian Goldberg)的論文——后續匿名通訊工作的基礎——贊成David Chaum的觀點,但是認為“化名”nyms應該是人們容易記住的用證書綁定的綽號。因此,比特幣被證明是David Chaum思想最成功的例子。
4 區塊鏈(The Blockchain)
到目前為止,本文沒有提到區塊鏈。如果你相信炒作,區塊鏈是比特幣的主要發明。可能會讓你大吃一驚的是,中本聰壓根沒有提到這個詞。實際上,區塊鏈這個技術術語沒有標準的技術定義,但是被各方用來指稱與比特幣和總賬本有不同程度相似的系統。
討論受益于區塊鏈的示例應用程序將有助于澄清該術語的不同用途。首先,考慮一個銀行財團之間交易的數據庫后端,交易在每天結束時呈網狀結構,賬戶由中央銀行結算。這樣一個體系有少數的明確的各方,所以中本聰的共識將是矯枉過正的。也不需要區塊鏈上的貨幣,因為賬戶是以傳統貨幣計價的。另一方面,鏈式時間戳顯然是有用的,至少可以確保在網絡延遲的情況下實現一致的全局事務排序。狀態復制也是有用的:一家銀行會知道,其本地數據副本與中央銀行用來結算賬戶的數據是一樣的。這使銀行擺脫了目前必須執行的代價高昂的協調過程。
其次,考慮一個資產管理應用程序,例如追蹤金融證券,房地產或任何其他資產所有權的文檔登記冊。使用區塊鏈可以提高互操作性,降低進入門檻。我們希望有一個安全的全球文檔登記冊,最好能讓公眾參與。這本質上是20世紀90年代和新千年時代的時間戳服務所提供的。公共區塊鏈提供了一個特別有效的方法來實現這一點(數據本身可能被存儲在鏈外,只有元數據存儲在鏈上)。其他應用程序也受益于時間戳或“公告板”抽象,最顯著的是電子投票。
讓我們繼續資產管理的例子。假設你想通過區塊鏈執行資產交易,而不是僅僅保存交易記錄。如果資產本身在區塊鏈以數字形式發行,并且區塊鏈支持智能合約,則可以進行交易。在這種情況下, 智能合約解決了確保只有在資產轉移時才進行支付的“公平交換”問題。 更一般地說,智能合約可以對復雜的業務邏輯進行編碼,只要所有必要的輸入數據(資產,價格等)都在區塊鏈上表示出來。
這種區塊鏈屬性與應用程序的映射使我們不僅能夠欣賞其潛力,而且還能夠使我們注入極為需要的懷疑態度。首先,很多提議的區塊鏈應用,特別是在銀行業,并沒有使用中本聰的共識機制。相反,他們使用總賬本數據結構和拜占庭協議(這些技術,如前文所述,可以追溯到上個世紀90年代)。這就暗示了區塊鏈是一種新的革命性技術。相反,圍繞區塊鏈的嗡嗡聲(buzz)已經幫助銀行發起集體行動來部署共享總賬本技術, 正如“石頭湯(stone soup)”的隱喻。 比特幣也是分散式賬本工作的一個非常明顯的概念證明,并且比特幣核心項目提供了一個便利的代碼庫,可以根據需要進行調整。

*譯注: 《石頭湯》是一本根據法國民間故事改寫的作品,但瓊·穆特把故事的場景設定在古代中國。三個和尚來到一個飽經苦難的村莊,村民們長年在艱難歲月中煎熬,心腸變得堅硬,不愿接納任何人??墒?,和尚們用煮石頭湯的方法,讓村民們不知不覺地付出了很多,明白了分享與幸福在真諦。
瓊·穆特,美國圖畫書作家和畫家曾在日本學習,醉心于日本和中國傳統文化。創作了很多具有東方哲學智慧的圖畫書,比如《禪的故事》。
其次,有一個誤導性的說法:區塊鏈通常比傳統的文檔登記更安全。要明白為什么,必須把系統或平臺的整體穩定性與終端安全(即用戶和設備的安全性)分開。誠然,區塊鏈的系統性風險可能低于許多中心機構,但區塊鏈的端點安全風險遠遠高于傳統機構相應的風險。區塊鏈交易幾乎是即時的,不可逆轉的,而且在公共區塊鏈中,設計為匿名交易。在基于區塊鏈的股票登記中,如果用戶(經紀人或代理人)失去對其私人密鑰的控制權——只要手機丟失或在計算機上安裝了惡意軟件——則用戶將喪失其資產。比特幣黑客、盜竊和詐騙的非凡歷史并不會給人們帶來多大的信心,據估計,至少有6%的比特幣在流通中被盜過一次(文獻39)。
側邊欄:許可區塊鏈(Permissioned blockchains)
雖然這篇文章強調私人和許可區塊鏈并沒有使用比特幣的大部分創新,但這并不意味著這個領域發生的有趣工作就很少。許可區塊鏈限制誰可以加入網絡,寫交易或挖礦(區塊)。特別是, 如果礦工被限制在一個值得信賴的參與者名單,則可以放棄工作量證明,以利于更傳統的BFT方法。 因此,大部分的研究都是BFT算法的重生,并且可以提出如下問題:我們可以使用哈希樹來簡化共識算法嗎?如果網絡只能以某種方式出現故障呢?
此外,圍繞身份和公共密鑰基礎設施,訪問控制以及存儲在區塊鏈上的數據的機密性等話題,還有一些重要的考慮因素。這些問題很大程度上不在公共區塊鏈中出現,也沒有被傳統的BFT文獻所研究。
最后,還有一項工程性工作是提高區塊鏈的吞吐量,并將其應用于各種業務:比如供應鏈管理和金融技術。
5 經驗總結(Concluding Lessons)
這里描述的歷史為從業人員和專業學者提供了豐富(和互補)的經驗教訓。從業者應該對革命性技術的主張持懷疑態度。如前文所示,比特幣中那些引起企業興奮的大多數想法,例如分布式賬本和拜占庭協議,可以追溯到20年以上。 認識到你的問題可能不需要任何突破性創新——在研究論文中可以找到那些長期被遺忘的解決方案。
學術界似乎有相反的問題,至少在這種情形下:抵制激進的,外來的想法。比特幣白皮書的很多想法盡管都可以回溯其譜系,但比大多數學術研究更新穎。而且,中本聰不關心學術同行評議,也沒有完全把它與學術歷史聯系起來。因此在數年里,學術界幾乎完全忽視比特幣。許多學術團體非正式地認為,盡管比特幣事實上在實踐中運行的很好,但比特幣不可能基于過去系統的理論模型和經驗的來運行。
我們一再看到,研究文獻中的創意可能會逐漸被遺忘或被忽略,特別是如果這些想法是超越它們的時代,甚至在流行的研究領域之外。 從業者和專業學者都應該回顧舊的創意,收集當前系統的見解。 比特幣的非凡和成功之處不在于它處于任何組件研究的前沿,而在于它整合了許多不相關領域的舊創意。 要做到這一點并不容易,因為它需要彌合不同的術語,假設等,但這是創新的寶貴藍圖。
從業者應該能夠識別過度炒作的技術并因此受益。 識別技術炒作有一些指標:難以確定其技術創新;由于企業急于把自己的產品附加到流行趨勢上,所以難以確定所謂技術術語的含義;難以確定正在解決的問題;最后,要求技術解決社會問題或者制造經濟/政治動蕩。
相反,學術界卻難以推銷其發明。例如,不幸的是,最初的工作量證明研究人員沒有得到比特幣的信貸(credit for bitcoin),可能是因為這項工作在學術界以外并不為人所知。在學術界,諸如發布代碼和與從業者合作等活動沒有得到充分的獎勵。事實上, 迄今為止,學術工作量證明的原始分支仍然不承認比特幣的存在! 與現實世界接觸不僅有助于獲得信貸(credit),而且還會減少輪子再造,并且是找到新創意。
評論