s先生 譯 技術瑣話
譯註:溫斯頓·邱吉爾說過一句名言,大概意思是:你回首看得越遠,你向前也會看得越遠。比特幣印證了這句話:比特幣的非凡和成功之處不在於它處於任何元件研究的前沿,而在於它整合了許多不相關領域的舊創意。
本文回顧了比特幣和區塊鏈的學術譜系,展示了其組合創新的典範。文章雖然很長,但著墨之處,句句都切中技術演進中的關鍵點。縱觀全文,如下圖目錄所示,讀者很容易建立比特幣技術路線的整體圖景。文章分別梳理總賬本,貨幣,礦工的技術路線,層層遞進,闡述這三個不同領域的技術積累如何彙集於比特幣這一神奇的創意。
值得一提的是,關於分散式一致性和共識機制,目前主流的分散式技術,包括各種雲計算解決方案,都沒有直面拜占庭故障,那麼基於大規模P2P網路結構的比特幣是如何解決這些問題呢?以及又是如何激勵節點參與共識呢?相信本文會給你精彩的答案!
如果你已經在媒體上看到過比特幣,並且對密碼學領域的學術研究有一定的瞭解,那麼你可能會有如下的印象:從David Chaum開始(文獻10,12),幾十年來很多人對數字現金(digital cash)的努力研究,最終都沒有獲得商業上的成功。因為這些工作需要一個集中的,類似銀行的伺服器來控制系統,而沒有任何一家銀行願意為其背書。隨著比特幣的出現,一種不需要銀行的去中心化加密貨幣(cryptocurrency)方案被提出,數字現金(digital cash)終於大獲成功。比特幣的發明者,神秘的中本聰,並不是一個學術界的人,比特幣與早期的學術方案並無相似之處。
*譯註:David Chaum,數字現金之父,早在1983年,即比特幣出現的25年前,David Chaum發明了數字現金(digital cash)。
本文認為,幾乎所有比特幣的技術元件都起源於20世紀80年代和90年代的學術文獻(見圖1)。這並不是為了削弱中本聰的成就,而是指出他站在巨人的肩膀上。事實上,透過追溯比特幣思想的起源,我們可以將中本聰洞察力的真正飛躍歸結為一個特定的,複雜的方式——一種組合創新(把底層元件整合在一起)的方式。這有助於解釋為什麼比特幣花了這麼長時間才被髮明。已經熟悉比特幣工作原理的讀者可以從這個歷史回溯中獲得更深入的瞭解(更多介紹,參見Arvind Narayanan等人的Bitcoin and 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和ScottStornetta方案的簡化版本中,文件被不斷建立和廣播。每個文件的建立者宣告一個建立時間(並簽名文件)、文件的時間戳和前一個廣播文件。前一個廣播文件友簽署了自己的前一個,所以文件形成了一個很長的倒退鏈。外部使用者不能改變時間戳的資訊,因為它是由建立者簽名的;建立者也不能在不改變整個資訊鏈的情況下改變時間戳的資訊。因此,如果透過可信源(例如,另一個使用者或專門的時間戳服務)獲得鏈中的某個專案,那麼該時刻之前的整個鏈是鎖定的,不可變,並且在時間上有序。進一步,如果你認為系統因為建立時間錯誤拒絕你的文件,那麼你必須地保證文件至少與其聲稱的一樣久遠。總之,比特幣只是借用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和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雜湊現金(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試圖做的那樣。
*譯註:雙環困境,一般指互相牴觸之規律或條件所造成的無法脫身的困窘;或者是不合邏輯的或矛盾的問題。例如這就是一個相互矛盾的困窘:沒有人想要支援你除非你已經成功了,但是如果沒有人支援,你怎麼可能成功呢?
工作量就是貨幣,而工作量又需要貨幣激勵,這就是雙環困境。
如果強制規定工作量證明就是貨幣,中本聰的共識和激勵邏輯應該是這樣的:工作量證明就是貨幣,這激勵礦工努力挖礦提供工作量證明,然後獲得貨幣;同時利用經濟學原理設定規則,讓惡意節點的投入大於受益,惡意節點沒有動力破壞共識,就可以解決BFT中因為將軍叛變而不能達成共識的難題。
在比特幣之前的兩篇文章中發現了更為清晰的方案來將“難題求解”作為現金來處理,文章分別描述了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),而且還會減少輪子再造,並且是找到新創意。
6 致謝(Acknowledgements)
The authors are grateful to Adam Back, Andrew Miller, Edward Felten, Harry Kalodner, Ian Goldberg, Ian Grigg, Joseph Bonneau, Malte Möser, Mike Just, Neha Narula, Steven Goldfeder, and Stuart Haber for valuable feedback on a draft.
7 參考文獻(References)
1. Aspnes, J., et al. 2005. Exposing computationally challenged Byzantine imposters. Yale University Department of Computer Science; http://cs.yale.edu/publications/techreports/tr1332.pdf.
2. Back, A. 1997. A partial hash collision based postage scheme; http://www.hashcash.org/papers/announce.txt.
3. Back, A. 2001. Hash cash; https://web.archive.org/web/20010614013848/http://cypherspace.org/hashcash/.
4. Back, A. 2002. Hashcash—a denial of service counter measure; http://www.hashcash.org/papers/hashcash.pdf.
5. Bayer, D., Haber, S., Stornetta, W. S. Improving the efficiency and reliability of digital time-stamping. Proceedings of Sequences 1991; https://link.springer.com/chapter/10.1007/978-1-4613-9323-8_24.
6. Benaloh, J., de Mare, M. 1991. Efficient broadcast timestamping; http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.38.9199.
7. Boyle, T. F. 1997. GLT and GLR: Component architecture for general ledgers; https://linas.org/mirrors/www.gldialtone.com/2001.07.14/GLT-GLR.htm.
8. Castro, M., Liskov, B. 1999. Practical Byzantine fault tolerance. Proceedings of the Third Symposium on Operating Systems Design and Implementation; http://pmg.csail.mit.edu/papers/osdi99.pdf.
9. Chaum, D. 1981. Untraceable electronic mail, return addresses, and digital pseudonyms. Communications of the ACM 24(2): 84-90; https://dl.acm.org/citation.cfm?id=358563.
10. Chaum, D. 1983. Blind signatures for untraceable payments. Advances in Cryptology: 199-203.
11. Chaum, D. 1985. Security without identification: transaction systems to make Big Brother obsolete. Communications of the ACM 28(10): 1030-1044; https://dl.acm.org/citation.cfm?id=4373.
12. Chaum, D., et al. 1988. Untraceable electronic cash. Advances in Cryptology: 319-327; https://dl.acm.org/citation.cfm?id=88969.
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.
16. Felten, E. 2017. Smart contracts: neither smart nor contracts? Freedom to Tinker; https://freedom-to-tinker.com/2017/02/20/smart-contracts-neither-smart-not-contracts/.
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.
19. Garay, J. A., et al. 2015. The bitcoin backbone protocol: analysis and applications. Advances in Cryptology: 281-310; https://eprint.iacr.org/2014/765.pdf.
20. Goldberg, I. 2000. A pseudonymous communications infrastructure for the Internet. Ph.D. dissertation, University of California Berkeley; http://moria.freehaven.net/anonbib/cache/ian-thesis.pdf.
21. Grigg, I. 2005. Triple entry accounting; http://iang.org/papers/triple_entry.html.
22. Haber, S., Stornetta, W. S. 1991. How to timestamp a digital document. Journal of Cryptology 3(2): 99-111; https://link.springer.com/chapter/10.1007/3-540-38424-3_32.
23. Haber, S., Stornetta, W. S. 1997. Secure names for bit-strings. In Proceedings of the 4th ACM Conference on Computer and Communications Security: 28-35; http://dl.acm.org/citation.cfm?id=266430.
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.
26. Just, M. 1998. Some timestamping protocol failures; http://www.isoc.org/isoc/conferences/ndss/98/just.pdf.
27. Lamport, L., et al. 1982. The Byzantine Generals Problem. ACM Transactions on Programming Languages and Systems 4(3): 382-401; https://dl.acm.org/citation.cfm?id=357176 .
28. Lamport, L. 1989. The part-time parliament. Digital Equipment Corporation; https://computerarchive.org/files/mirror/www.bitsavers.org/pdf/dec/tech_reports/SRC-RR-49.pdf.
29. Lamport, L. 2001. Paxos made simple; http://lamport.azurewebsites.net/pubs/paxos-simple.pdf.
30. Laurie, B. 2014. Certificate Transparency. acmqueue 12(8); https://queue.acm.org/detail.cfm?id=2668154.
31. Levy, K. E. C. 2017. Book-smart, not street-smart: blockchain-based smart contracts and the social workings of law. Engaging Science, Technology, and Society 3: 1-15; http://estsjournal.org/article/view/107.
32. Melara, M., et al. 2015. CONIKS: bringing key transparency to end users. Proceedings of the 24th Usenix Security Symposium; https://www.usenix.org/system/files/conference/usenixsecurity15/sec15-paper-melara.pdf.
33. Merkle, R. C. 1980. Protocols for public key cryptosystems. IEEE Symposium on Security and Privacy; http://www.merkle.com/papers/Protocols.pdf.
34. Nakamoto, S. 2008. Bitcoin: a peer-to-peer electronic cash system; https://bitcoin.org/bitcoin.pdf.
35. Nakamoto, S. 2008. Re: Bitcoin P2P e-cash paper; http://satoshi.nakamotoinstitute.org/emails/cryptography/11/.
36. Narayanan, A., et al. 2016. Bitcoin and Cryptocurrency Technologies: A Comprehensive Introduction. Princeton University Press; http://bitcoinbook.cs.princeton.edu/.
37. Pass, R., et al. 2017. Analysis of the blockchain protocol in asynchronous networks. Annual International Conference on the Theory and Applications of Cryptographic Techniques; https://link.springer.com/chapter/10.1007/978-3-319-56614-6_22.
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.
39. Reuters. 2014. Mind your wallet: why the underworld loves bitcoin; http://www.cnbc.com/2014/03/14/mind-your-wallet-why-the-underworld-loves-bitcoin.html.
40. Sirer, E. G. 2016. Bitcoin guarantees strong, not eventual, consistency. Hacking, Distributed; http://hackingdistributed.com/2016/03/01/bitcoin-guarantees-strong-not-eventual-consistency/.
41. Szabo, N. 1994. Smart contracts; http://www.fon.hum.uva.nl/rob/Courses/InformationInSpeech/CDROM/Literature/LOTwinterschool2006/szabo.best.vwh.net/smart.contracts.html.
42. Szabo, N. 2008. Bit gold. Unenumerated; https://unenumerated.blogspot.com/2005/12/bit-gold.html.
43. Wattenhofer, R. 2016. The Science of the Blockchain. Inverted Forest Publishing.
44. Rivest, R. L., Shamir, A. 1996. PayWord and MicroMint: Two simple micropayment schemes. International Workshop on Security Protocols.