原版前言通往比特幣的漫長道路

傑裡米·克拉克(Jeremy Clarek)

在通往比特幣的道路上,佈滿了無數失敗的嘗試。我收集了一份由約100個加密支付系統組成的名單。它們的技術基於電子現金(e-cash)和信用卡,在某些方面獲得顯著成就,見表0.1。其中一些是被廣泛引用的學術研究成果,還有一些是已開發和測試過的實實在在的系統。在這份名單上,被大家所知的大概只有一個——貝寶(PayPal)。而貝寶之所以倖存,得益於它及時糾正了最初想在移動設備上進行加密支付這一想法。

這段歷史會讓我們吸取很多教訓。比特幣的想法從何而來?為什麼一些技術成功了而另一些則一敗塗地?如何成功地商業化那些複雜的技術創新?即便不去思考這些,它至少讓我們明白,一個真實可行的基於互聯網的支付體系是多麼來之不易。

傳統金融體系

設想在政府和貨幣出現之前,人們以物物交換的方式進行著交易。比如,愛麗絲(Alice)需要工具,鮑勃(Bob)需要藥品。如果他們正好都有對方所需物品,就可以進行交換,滿足各自所需。

但是,如果愛麗絲有食物,願意拿食物換工具,鮑勃有工具但不需要食物,他想要藥品。在這種情況下,愛麗絲和鮑勃就沒法直接與對方交易。但是,如果有另一個人卡羅爾(Carol),他有藥品,而且願意拿藥品換取食物。那麼,這三個人就可以進行交易,各自獲得所需物品。

表0.1 一些優秀的電子支付系統和構想

當然,難點在於協調,即組織一群供需匹配的人在同一時間、同一地點進行交易。為解決這一難點,出現了兩個體系:信用和現金。二者哪個更早出現,歷史學家、人類學家和經濟學家們就此爭論不休,但這對本書的討論無關緊要。

在上面的例子中,在信用體系裡,愛麗絲和鮑勃可以與對方交易。鮑勃給愛麗絲她所需的工具,得到一個人情。換言之,愛麗絲欠下一筆債務,未來終將償還給鮑勃。愛麗絲的物質需求即刻得到了滿足,但她希望盡快還清債務,因此,她又有了新的需求。然後,愛麗絲又遇到了卡羅爾,她可以用自己的食物交換卡羅爾的藥品,然後把藥品給鮑勃。這樣,她就償還了債務。

對比而言,在現金體系裡,愛麗絲可以購買鮑勃的工具,然後把食物賣給卡羅爾,卡羅爾再把藥品賣給鮑勃,完成整個閉環交易。只要每場交易的買方有充足的現金,這些交易就可以按任意順序發生。當然,最終的結果是,看上去現金似乎從未易過手。

很難說這兩個體系哪個更優越。現金體系首先需要現金分配來觸發,否則交易無法發生。信用體系不需要這樣,但債權人需要承擔債務人不償還債務的風險。

現金還可以讓我們知道物品的準確價值。物物交換時,我們很難說工具和藥品到底哪個更值錢。現金交易把物品的價值標上數字,這就是為什麼我們現在將這兩種體系混合使用,即便使用信用,我們依然用現金來衡量所需償還的債務金額。

這些觀點被應用於許多場合,特別是用戶在進行虛擬物品的線上交易時。例如,在進行點對點(peer-to-peer)的文件分享時,我們就可能遇到吃白食的人,他們只下載,不分享。進行文件交易可能是一個可行的解決方案,但是如何找到兩個相互需要對方文件的人是個協調上的難題。在一些項目如莫佐(Mojo Nation)和學術構想如卡瑪(Karma)中,用戶自動獲得一定數額的虛擬貨幣。接收文件時,用戶可以用虛擬貨幣支付費用;向其他用戶發送文件時,賺取虛擬貨幣。無論是接收還是發送文件,一個或者多個服務器跟蹤記錄用戶的賬戶餘額,而且可以把虛擬貨幣兌換成真實貨幣。雖然莫佐項目在推出貨幣兌換功能之前就消失了,但它算得上是我們現在使用的比特流(BitTorrent,一種內容分發協議)和塔荷(Tahoe-LAFS,一種分佈式數據存儲方式)的鼻祖。

網絡信用卡的弊端

許多電子支付方式都可以根據信用和現金這兩個基本概念進行分類。比特幣顯然屬於現金類,但我們先來談談信用類。

信用卡交易是目前主要的線上支付方式。如果你在亞馬遜這樣的網站購過物,那麼你應該很清楚流程。首先,輸入你的信用卡信息,點擊發送,亞馬遜收到這些信息後反饋給「系統」,這一系統包括信息處理器、銀行、信用卡公司及其他中介。

然而,如果使用貝寶交易,那麼你體驗的就是中介式結構風格。你和賣家之間存在一個中介公司,你把信用卡信息發送給中介公司,中介公司核准交易並通知賣家,並在每個交易日結束時與賣家統一結算。

這一結構的優勢是,你不需要提供給賣家你的信用卡信息,規避了安全風險。你也無須向賣家提供個人信息,保護了個人隱私。劣勢在於,它增加了複雜性,你和賣家無法進行直接交流,都得在中介公司開設賬戶。

如今,我們已經習慣在網絡購物時提交個人信用卡信息,至少已經勉強地接受了這一點。我們也習慣了網絡公司搜集我們的網絡購物及瀏覽歷史。但在20世紀90年代,網絡尚是新興事物,數據加密協議剛剛興起,消費者對這些問題深感擔憂,對網絡購物的安全性並不信任。特別是,通過一個不可靠的渠道,把自己的信用卡信息提交給不知名的網絡商家,這在當時看來,幾乎難以置信。在這種背景下,中介式架構在當時引發了諸多興趣。

1994年,第一虛擬公司(First Virtue)成立。它是一家較早成立的中介支付公司,也是最早設立完全虛擬化辦公室的公司之一。顧名思義,它的員工遍佈全國,通過互聯網溝通。

第一虛擬公司的支付體系與貝寶現在的體系類似,只是早於後者很多年。用戶註冊,提交信用卡信息。當用戶進行網絡購物時,商家把詳細的支付信息發送給第一虛擬公司,第一虛擬公司與用戶確認支付信息,確認無誤後批准支付。其中有兩個細節值得注意:第一,所有溝通都通過電子郵件。那時網頁瀏覽器剛剛開始全面支持HTTPS等加密協議,多方參與增加了加密該支付的複雜性(其他中介採用把信息嵌入URL鏈接或者在HTTP上定制加密協議的方式)。第二,用戶有90天的拒付期,3個月之後賣家才能收到貨款。現在,賣家可以立即收到貨款,但是消費者依然可以索回貨款或者對信用卡賬單提出申訴。在這種情況下,商家必須把貨款退還給信用卡公司。

20世紀90年代中期,出現了一個較有競爭力的中介體系,我們稱之為安全電子交易協議(Secure Electronic Transaction,簡稱SET)。在SET體系中,用戶無須把信用卡信息提供給商家,也無須在中介公司註冊賬戶。進行網絡購物時,用戶的瀏覽器會將交易和信用卡信息加密存儲在電腦上的應用程序裡,只有中介能夠解密這些信息,甚至連商家都不能。這樣,消費者可以放心地把加密過的信息發給商家。商家再把這些加密信息和它們自己的交易信息一同轉發給中介。中介解密你的信息,與商家的交易信息進行對比,只有在雙方信息一致的情況下,中介才會批准支付。

SET由維薩(VISA)、萬事達以及多家當時重量級的科技公司開發而成,包括網景(Netscape)、IBM、微軟、威瑞信(Verisign)和RSA(美國知名信息安全、加密數據公司)。它融合了多個方案,成為一個標準性體系。

一家叫網絡現金(CyberCash)的公司採用了SET體系。這家公司在很多方面都很有趣。它們的產品除了處理信用卡支付交易之外,還包括一種叫作網絡幣(CyberCoin)的數字貨幣。這是一種小額支付系統,用於支付小額消費行為,比如,用戶可以用網絡幣支付幾美分在線閱讀報紙的費用。這也就意味著,用戶賬戶裡的網絡幣餘額一般都在10美元以內。但是,有趣的是,它們卻能得到美國政府聯邦存款保險公司(FDIC)對每個賬戶高達10萬美元的投保金額。

更有趣的是,網絡現金公司運行時,美國政府限制加密技術的出口,因為當時加密技術被認為是一種武器。當然,現在這種限制已被廢除。但在當時,這也就意味著國外用戶無權下載包含加密技術的軟件。但是,網絡現金公司得到美國政府的特批,國外用戶可以下載它的軟件。政府給出的解釋是,從網絡現金公司的軟件中提取加密技術遠比從頭開發一套全新加密技術要難得多。

最後,許多人懷疑網絡現金公司與其他為數不多的幾家公司一起受到千禧蟲感染(Y2K bug),向部分客戶重複收費。2001年,網絡現金公司破產,其知識產權被威瑞信收購,接著轉賣給貝寶,貝寶屹立至今。

為什麼SET體系行之有效?根本原因在於它的認證機制。認證就是把加密過的身份,即公鑰(public key),與現實身份連接起來。網站要從像威瑞信這樣的認證授權公司獲得認證,用戶的瀏覽器才會判定它是安全的(通常會顯示一個鎖形狀的圖標)。網絡現金公司和SET體系認為,安全性比操作的便捷性更重要,因此,它們不僅要求服務商和商家,還要求客戶也必須獲得認證。獲得認證的過程類似於報稅一樣煩瑣,因此,這個系統簡直是場災難。幾十年來,大多數用戶都拒絕使用要求終端客戶認證的系統,這種系統只會出現在學術論文裡。比特幣巧妙地避開了這一難題,而且無須用戶的真實身份。比特幣系統通過公鑰本身來辨別用戶身份。我們將在第1章探討這個問題。

20世紀90年代中期,正當SET體系標準化時,萬維網聯盟(World Wide Web Consortium)也在探索如何將金融支付方式標準化。它們試圖擴展HTTP協議,這樣,用戶不需要其他軟件,通過瀏覽器就可以完成交易。事實上,它們對如何擴展HTTP協議提出了一個總體方案,也給出了一個用戶支付案例。但這從未付諸實踐,整個擴展框架並未應用於瀏覽器中。近20年後,2015年,聯盟宣佈重新考慮擴展計劃,這次,比特幣將成為該標準化進程的一部分。但是考慮到以往的失敗教訓,我對此並不樂觀。

從信用到(加密)現金

現在該談談現金體繫了。如前所述,將現金和信用進行比較,我們發現,現金體系需要啟動自循環,但優勢在於,它規避了買家拒不償還債務的風險。此外,現金體系還有另外兩個優勢:第一,更好地確保了用戶的匿名性。信用卡與個人信息綁定,因此,銀行可以追查消費者的所有消費記錄。但是,如果使用現金交易,就與銀行無關,賣家也無須知道消費者的個人信息。第二,現金支持線下交易,無須致電第三方獲得交易批准。也許交易完成後需要把錢存入銀行,但這要容易得多。

比特幣沒有這兩個特點,但具備兩個類似的功能。它的匿名性比不上現金。用戶在使用比特幣支付時,無須使用自己的真實身份,但是,如果用戶不夠小心謹慎,可以借助公開的交易賬目和聰明的算法查出用戶的交易記錄並最終查出用戶身份。我們將在第6章展開這個複雜又有趣的比特幣匿名性問題。

比特幣並不完全支持線下交易。但優點是,它不需要中央處理器,而是依賴點對點網絡,這種網絡跟互聯網一樣具有很強的修復能力。我們將在第3章討論「綠色地址」和小額支付工具,它們可以幫助我們在特定條件和特定情境下進行線下支付。

大衛·喬姆(David Chaum)在1983年最早提出把加密技術運用於現金上的想法。我們可以拿現實中的例子來幫助理解。比如,我向人們發放紙條,上面寫著「拿到此條的人可以來我這裡領取1美元」。假設人們信任我不會食言而且我的簽名不可偽造,他們就可以像銀行匯票一樣流通紙條。事實上,銀行匯票最初就是商業銀行發放的支付承諾。只是到了近代,政府才開始介入,集中貨幣供給,用法律手段強制要求銀行兌現票據。

我可以通過數字簽名發放電子紙條,但那樣的話,又會遇到一個「雙重支付」(double spending)這一惱人的難題:收到表示一定金額的虛擬貨幣的數據時,人們可以複製該數據,然後傳輸給他人。假設人們的複製技術足夠優秀,我們難以辨別哪些是初始數據,哪些是複製品,那麼,我們能夠解決「雙重支付」的問題嗎?

可能的解決方案是:我在發出的每份紙條上印上一串獨特的序列號。當別人把紙條給你時,你檢查一下我的簽名,然後打電話給我,告訴我相應的序列號,詢問印有這個序列號的紙條是否已被使用過。如果我告訴你沒有,那你就可以放心地收下這個紙條。我會在賬本上記錄該紙條已被使用。你要做的是定期把收到的紙條交給我,我會再給你相同數量的印有新序列號的紙條。

這個方法是可行的。它在現實中施行起來頗為煩瑣,但在網絡上卻比較簡單明瞭,只要我設置一台服務器,用它來完成簽名和序列號的記錄工作。唯一的問題在於,因為難以匿名,它很難稱得上是真正的現金。不管是發行還是兌現紙條,我都可以把序列號和個人信息一同記錄在案。這也就意味著,我能夠追蹤你的所有消費行為。

喬姆提供了一個創造性解決方案。它不僅能夠保護用戶的匿名性,同時還杜絕了「雙重支付」。它的方法是:我給你一張紙條,你把它的序列號記錄下來,並且不要讓我看見。然後我再簽名,並不需要知道它的序列號。這在密碼學裡被稱為「盲簽」(blind signature)。選取一個較長、隨機的序列號能夠更好地保護你的利益,因為這樣的序列號更有可能是獨一無二的。我不必擔心你選取一個使用過的序列號,因為這樣你只會得到一個無效貨幣而遭受損失。

這是第一個真正意義上的電子貨幣方案。它雖然有效,但必須要有一個大家信任的中心機構管理運行的服務器。不僅如此,這個服務器還必須參與每筆交易。如果服務器停止工作,交易就不得不暫停。數年之後的1988年,喬姆與兩位密碼學專家阿莫斯·菲亞特(Amos Fiat)和摩尼·納歐爾(Moni Naor)合作,提出線下電子貨幣的概念。乍看上去這似乎是不可行的:如果用戶把同一個電子貨幣支付給兩家沒有連入同一個網絡或與同一家中心機構合作的不同商家,它們怎麼能夠發現並阻止這種行為呢?

與其去預防雙重支付,不如關注事後當商家重新連上銀行服務器的時候如何察覺。這才是比較聰明的做法。乘坐沒有網絡連接的飛機時,如果你用信用卡消費,真正的轉賬是在航空公司重新連上網絡之後才發生的。如果你的信用卡被拒付,你會欠航空公司(或你的銀行)一筆錢。仔細想想,傳統金融體系的很大一部分就建立在如何檢測錯誤和損失這一基礎之上,然後才是收回損失或懲罰失誤方。如果你給某人開一張個人支票,他不會知道這筆錢是否真實存在於你的賬戶裡,但當他去銀行兌現時被銀行拒絕,他會追究你的責任。類似地,如果線下電子貨幣系統被廣泛應用,國家應該制定相關法律,規定雙重支付屬於犯罪行為。

為了檢測出雙重支付,喬姆、菲亞特和納歐爾三人提出了一種複雜的加密機制。簡而言之,這套機制可以達到以下目的:發行方在電子貨幣中以加密方式嵌入你的個人信息,除了你本人,包括銀行在內的任何人都無法解密。你用電子貨幣消費時,接收方會隨機挑選一部分密碼要求你解密,並將之記錄下來。這種解密的內容不足以暴露你的身份。如果你用同一份電子貨幣雙重支付,當兩個接收方都去銀行兌現時,銀行可以把兩份解密的信息合在一起,最終幾乎可以肯定知道你的身份。

你可能會擔心,萬一有人陷害我雙重支付呢?比如,你支付給我一份電子貨幣,我不去銀行兌現成有我身份加密的新數字貨幣,而是直接拿著你給的貨幣進行重複消費。不必擔心,這是行不通的,因為我在用它支付時,接收方會要求我解密一段密碼,這段密碼與之前你解密的那段密碼肯定是不一樣的,因此,我無法完成這一解密任務。

多年以來,許多密碼學家一直在研究並完善這一機制。在喬姆、菲亞特和納歐爾提出的構想中,假設一枚電子貨幣價值100美元,如果你想買一個價格為75美元的物品,你沒法把這枚貨幣分割成75美元和25美元。你只能去銀行,把價值100美元的貨幣兌換成現金,再拿現金換取價值75美元和25美元的貨幣。但是,在一篇論文裡,Tatsuaki Okamoto和KazuoOhta用梅克爾樹(Merkle trees)建立了一個可以分割電子貨幣的系統。梅克爾樹在比特幣裡還會出現,我們將在第1章遇到它。這個機制的效率還有很大的提高空間。特別是,這一機制採用了由史蒂芬·布蘭德斯(Stefan Brands)在20世紀90年代,詹·卡姆實(Jan Camenisch)、蘇珊·洪博格(Susan Hohenberger)、安娜·莉斯卡亞(Anna Lysyanskaya)在2005提出的「零知識驗證」(zero-knowledge proofs),帶來了很好的效果。在第6章,我們將看到,零知識驗證也同樣被運用於比特幣體系中。

繼續回到喬姆。為把自己的想法商業化,他於1989年創立數字現金公司(DigiCash),應該是第一家致力於解決線上支付問題的公司。數字現金公司比我們之前提過的第一虛擬公司和網絡現金公司早了整整5年。數字現金系統使用的現金叫電子現金,另外,它們還有一個名為「網絡資金」(cyberbucks)的系統。包括美國的幾家銀行和芬蘭至少一家銀行在內的數家銀行,確實使用了這個系統。這可是遠在比特幣出現之前的20世紀90年代,可能會讓一些比特幣推崇者大吃一驚,因為他們認為銀行是懼怕科技、抵制創新的龐然大物。

當你需要交易時,你點擊一條由資金接收方發回的鏈接,跳轉至數字現金網頁,同時,會開通一條反向鏈接連回你的電腦。也就是說,你的電腦必須能夠接收外部鏈接,就像一台服務器。你需要擁有自己的IP地址,你的網絡服務提供商也必須允許外部連接。如果連接成功,電子現金軟件會在你的電腦上運用,然後你再批准交易,進行付款。

喬姆的數字現金技術獲得了幾項專利,特別是它使用的盲簽技術。外界對他的行為是有爭議的,因為專利妨礙了其他人用該技術進一步開發電子現金系統。但是幾位經常在一個叫「網絡朋克」(cyberpunks)的郵件組裡互動的密碼學專家則另闢蹊徑。著名的中本聰(Satoshi Nakamoto)第一次向全世界宣佈比特幣系統就是在一個郵件組裡,它的前身就是網絡朋克,這絕非巧合。我們將在第7章探討網絡朋克運動及比特幣的起源。

網絡朋克的幾位密碼學家開發出了一種名叫魔法貨幣(Magic Money)的類似於電子現金的產品。魔法貨幣雖然侵犯了電子現金的專利,但因為他們宣稱它只用於實驗目的,因此並未被禁止。魔法貨幣是一個很有趣的軟件。它採用純文本界面,你可以通過電子郵件發送交易信息,只需要把交易信息複製粘貼到電子郵件並發送給其他用戶就可以了。當然,你需要使用PGP(Pretty Good Privacy,一種加密軟件)等終端對終端的電子郵件加密軟件,以確保信息在傳輸過程中的安全。

隨後,本·勞裡(Ben Laurie)在其他人的幫助下創立Lucre系統。該系統試圖用一種非專利技術替代電子現金中的盲簽,其他則與電子現金系統大致類似。

另外一個由伊恩·戈德堡(Ian Goldberg)提出的方案則試圖解決無法分割電子貨幣換取零錢的問題。他的思路是:當你沒有零錢而向商家支付了過多金額時,如果商家有貨幣,它會轉回給你超額支付的部分。但是應該注意到,這一想法帶來匿名性問題。如前所述,在電子現金系統裡,付款人匿名而商家不匿名。但是當商家找零時,商家實際上成了付款人,因此他們是匿名的。從你收到商家的找零之後,你需要去銀行兌現,這時,你又是不匿名的。這一系統無法確保用戶的匿名性,因此,伊恩·戈德堡又重新設立了一個系統,在這個系統中有不同類型的貨幣,能夠確保用戶在匿名的情況下既能消費又能收到找零。

為什麼數字現金最終失敗了呢?主要原因在於它沒能說服銀行和商家使用它。因為使用這一系統的商家不多,用戶也就不願意用它。更糟的是,它並不或沒有支持好用戶和用戶之間的交易,只側重於用戶和商家之間的交易。因此,商家不接受它,這個系統就很難激發其他人的興趣。最終,數字現金敗給了信用卡公司。

另外,比特幣既支持用戶和商家之間的交易,也支持用戶和用戶之間的交易。事實上,比特幣體系並不把用戶和商家區別開來。比特幣的成功很大部分大概要歸功於它對用戶-用戶間交易的支持。從一開始,每位比特幣用戶都可以發給其他用戶,因而整個比特幣社區都努力爭取人們對比特幣的支持,並促使商家也接受它。

數字現金公司的最後幾年,它試圖通過防侵入硬件來預防雙重支付,不再把重心放在雙重支付發生後的檢測上。在這套系統裡,有一種叫作錢包或者類似於卡片的設備。這個設備會記錄你的賬戶餘額。消費之後,餘額減少;充值之後,餘額增加。這個設備的用處是,沒有人能夠更改計數器數額,不管是通過物理手段還是電子技術。因此,當計數器歸零時,倘若沒有繼續充值,用戶都無法消費。

許多公司推出過帶有防侵入硬件的電子現金系統。數字現金後來與一家叫CAFE的歐洲公司合作。另一家叫Mondex[1]的電子錢包公司也是基於這個想法創立的,後來被萬事達收購。維薩(Visa)也有類似的系統,名為維薩貨幣(VisaCash)。

在使用電子錢包時,使用者既持有一張智能卡片,又擁有一個「讀卡器」(wallet unit),兩者均可進行充值。使用者之間直接可以互相進行支付。支付方將智能卡插入讀卡器中,錢即轉入讀卡器。接受方將卡插入讀卡器,錢就轉入第二次插入的卡裡。這一過程交換的是數字貨幣,是匿名的交換流程。

Mondex公司在幾個地方推廣其技術,其中一個城市正好離我的家鄉安大略省圭爾夫市不遠。你大概已經猜到,這項技術並沒有被廣泛使用。主要原因是,電子Mondex卡片跟現金類似,一旦丟失或者被偷,錢也就丟了。更有甚者,如果卡片發生故障,或者讀卡器無法讀卡,就沒法知道卡里餘額是多少。這種事情真正發生時,Mondex公司一般會自擔損失。它們會假定卡裡有餘額並賠償用戶損失,這自然是一筆不小的開支。

此外,這個系統裡的錢包反應比較慢。用信用卡或現金支付要快得多。商家都不喜歡擁有太多支付終端,對它們來說,一個信用卡POS機就夠了。多重原因加在一起導致了Mondex公司的失敗。

儘管如此,Mondex公司的用戶卡是有小芯片的智能卡片,這項技術事實證明是相當成功的。如今,在很多國家,包括我所在的加拿大,每張信用卡和借記卡都採用了智能卡片技術。它們的目的不是防止雙重支付。非現金技術中不會存在雙重支付的問題,因為銀行而不是卡片記錄你的賬戶餘額和可用信用。智能卡片的目的是用於認證,也就是說,它為了證明你知道自己賬戶的PIN。雖然用途不同,早在銀行廣泛採用該技術之前,Mondex公司就已經開始運用這項技術。

憑空發行貨幣

如果你有一個價值100美元的電子現金,那怎麼能夠保證它的確價值100美元呢?數字現金給出的答案很簡單:要想獲得一個價值100美元的電子現金,你必須從你的銀行賬戶取現100美元,交給發行電子現金的銀行。但要實現這個目的可以通過不同的方式,不同的公司採取的方法也各不相同。設想一個小概率事件:如果一個政府授權某家銀行發行電子貨幣,憑空創造新電子現金,會怎麼樣呢?網格現金(NetCash)就是基於這一假設創立的,但是它並未真正實施過。電子黃金(E-Gold)則採用一套完全不同的體系,它在保險庫中存入一定量的黃金,根據黃金價格發行電子貨幣。一家名為數字黃金(Digigold)的公司並不完全依賴黃金,但也有部分黃金儲備。

歸根結底,這些方式都是使電子貨幣的價值隨美元或某種特定商品的價值而浮動。如果美元價值上升或下降,你的電子貨幣價值就相應地上升或下降。另一種比較激進的方案,就是使電子貨幣自成體系,其他貨幣不會影響其發行和價值。

要想創造一種自由浮動並且具有真實價值的虛擬貨幣,必須要設計出某種具有稀缺性的東西。其實,正是因為黃金和鑽石的稀缺性,它們才會成為貨幣的儲備。在虛擬世界,你可以這樣設計你的系統,即虛擬貨幣只有在需要花一段時間解決了一定的數學計算(或「謎題」)之後方可生成,這樣就保證了稀缺性。比特幣體系中的「挖礦」就是這樣的,我們會在第5章詳細探討。

通過解決數學計算來賦予虛擬貨幣價值,這一想法並不新鮮。早在1992年,密碼學家辛提亞·沃克(Cynthia Dwork)和摩尼·納歐爾(Moni Naor)首次提出這種方案,用來降低垃圾郵件問題。設想你每次發送郵件時,計算機都不得不花幾秒鐘的時間解決一道數學計算題目。如果你沒能附上題目的答案,收件人的郵箱會自動忽略你發來的郵件。對於普通用戶,因為他們發送郵件的頻率不高,不會帶來太大麻煩。但對於想同時發送成千上萬垃圾郵件的人來說,解決大量的數學計算幾乎是不可能的。1997年,亞當·貝克(Adam Back)在一個名為哈希現金(Hashcash)的體系中採用過類似設計。

要想阻止垃圾郵件,這些數學計算必須具備一定的特性。第一,垃圾郵件發送者解出一道題目之後,不能把這個答案附在他發送的其他郵件上。為了做到這一點,每封郵件會對應一個數學計算題目,題目內容取決於發件人、收件人、郵件內容和發送時間。第二,收件人無須重複解題的煩瑣過程,就可以輕鬆地檢查發件人附上的答案。第三,題目之間應是相互獨立的,也就是說,解決一道題目不會減少解決其他題目所需的時間。第四,隨著硬件性能的提升,解決數學計算變得越來越快、越來越容易,收件人必須要調整他們收到的答案的難度。通過密碼學中的哈希方程(hash functions)設計的題目可以滿足以上要求,我們將在第1章學習它。

比特幣使用的數學計算與哈希現金的基本類似,只是進行了微小的改進。比特幣能做的比哈希現金多得多,畢竟,要解釋比特幣需要一整本書呢!我之所以提這些,是因為哈希現金的創始人亞當·貝克曾經說過:「比特幣只是把哈希現金進行通貨膨脹控制得到的延伸產品罷了。」我覺得這話有點過分了,就像說:「特斯拉只是在輪子上加上電池而已。」

正如密碼學裡任何一個優秀的想法一樣,數學計算題目有許多變體,每個變體具有些微不同的特性。其中一個構想來自維萊特(Rivest)和夏馬爾(Shamir),他們提出了RSA加密系統(RSA中的R和S分別為Rivest和Shamir的首字母)。研究哈希現金之後我們發現,解決一系列數學計算題目的成本就是解決單個題目的簡單疊加。但政府發行貨幣時,成本可不是這麼計算的。單是紙幣上的防偽技術,政府就需要投入巨大的初始成本來購買設備,施加安全措施等。但是一旦研發出了防偽技術之後,成本就會降低,印一張貨幣和印一百張的成本差別並不大。換言之,發行紙幣的固定成本很高,但浮動成本很低。維萊特和夏馬爾想要設計的數學計算題目具有類似的成本結構,這樣,發行第一個電子貨幣需要巨大的計算量,但接下來就會變得很簡單。他們的設計也運用了哈希方程,但使用方式不同。我們不打算討論他們的詳細方案,但他們要解決的問題是非常有趣的。

人們為什麼沒有廣泛使用哈希現金來阻止垃圾郵件呢?也許是因為垃圾郵件問題還沒有足夠嚴峻。對大多數人來說,垃圾郵件只是個惱人的小問題,並沒有嚴重到他們願意用計算機算力來解決它。現在,我們有了垃圾郵件過濾器,能夠有效地阻擋垃圾郵件。另外一個可能的原因是,哈希現金無法真正阻止垃圾郵件。特別是,現在大多數垃圾郵件發送人通過殭屍網絡,用病毒大量入侵他人電腦,批量發送垃圾郵件。他們也可以通過這些電腦來獲取哈希現金。所以,通過數學計算進行限制的想法還在不斷發展中。在一些替代網絡協議的構想中,如小型LT協議(MinimalLT),我們還可以看到這一思路。

把一切信息都記錄在數據庫賬本中

區塊鏈是比特幣的另一項關鍵技術,它像一個數據庫賬本,安全記錄所有的比特幣交易信息。區塊鏈的理論基礎由來已久,可以追溯到哈勃(Haber)和斯托爾內塔(Stornetta)在1991年開始發表的一系列論文。他們提出的不是虛擬貨幣體系,而是一種可以安全地對數字文件進行時間戳記錄的方法。時間戳是為了記錄文件創建的大概時間。更重要的是,時間戳可以準確反映文件創建的先後順序:如果一份文件比另一份文件更早創建,可以從時間戳中看出來。時間戳的安全性體現在文件的時間戳一旦生成,無法更改。

用戶發送文件時,哈勃和斯托爾內塔設計的體系能夠向客戶提供時間戳服務。服務器收到文件時,它會用當時時間和指向之前文章的鏈接或者指針作為簽名,來簽名該文件並產生包含簽名信息的認證,見圖0.1。這裡所說的指針,指向的不是一個具體地址,而是一串數據。也就是說,如果該數據被更改了,那麼這個指針也就自動失效。在第1章,我們將學習如何使用哈希方程來創建這種指針。

圖0.1 鏈接的時間戳

註:要想對一份文件進行認證,時間戳服務器必須包括指向之前文件認證的哈希指針,當前時間和文件內容本身,並用這三條信息來對文件進行簽名。

這種協議實現的效果是:每份文件的認證都確保了上一份文件內容的完整性。其實,反覆運用這一理論:每次認證基本上都保障了這個認證點之前的所有文件和認證的完整性。假設這個系統中的每個用戶都能記錄包括自己的文件、之前和之後的文件的認證在內的幾個認證信息,那麼合起來,就可以確保整個文件系統不會被更改。特別是,文件的先後順序被保存了下來。

隨後的一篇論文提出了一個可以提升效率的方案:不必單獨鏈接各個文件,而是把它們集合成塊,然後在一條鏈中鏈接整個塊。在每個塊裡,文件通過樹狀結構而非線性結構的方式相互鏈接。這一方法減少了在整個系統中查找特定文件所需的工作量。圖0.2展示了這一混合而成的體系的工作方法。

圖0.2 高效的鏈接時間戳

註:箭頭表示哈希指針,點狀垂直線表示時間間隔。

這一數據結構形成了比特幣區塊鏈的框架,我們在第3章可以看到這一點。比特幣將它進行了微妙但至關重要的改進,它用一種類似於哈希現金的協議來降低在區塊鏈裡增添塊的速度。這種改進對比特幣的安全性帶來了深遠而有益的影響。比特幣體系通過一群未被認證過的節點,即「礦工」,來記錄事件,不再需要認證過的服務器。通過每個礦工而不是普通用戶記錄塊的信息。任何人都可以通過解決數學計算,新建塊,而成為一名礦工。比特幣還捨棄了簽名,只依靠哈希指針來確保數據結構的完整性。最後,真正的時間戳對比特幣來說不是很重要,整個系統的意義在於根據先後順序記錄交易信息,並確保它不能被篡改。事實上,比特幣塊並不按固定時間表產生。在比特幣系統裡,平均每10分鐘產生一個新的塊,單相鄰的兩個塊的時間間隔會有較大的差別。

比特幣從根本上融合了用數學計算來控制新幣的產生和用安全的時間戳來記錄交易信息並防止雙重支付這兩種思路。在比特幣之前,有人曾提出過,不這麼成熟但也融合了這兩種思路的方案。比如,戴偉(Wei Dai)在1998年提出的B幣(b-money),任何人都可以通過一個類似於哈希現金的系統創造虛擬貨幣。它跟比特幣類似,也有一個點對點網絡。每個節點維護一個數據庫賬本,但它不同於比特幣的區塊鏈,並不記錄全部交易信息。每一個節點都有它自認為是準確的記錄每個人賬戶餘額的賬本。

尼克·薩博(Nick Szabo)還提出一個類似的方案,名為比特黃金(Bitgold)。薩博宣稱他早在1998年就有了創建比特黃金的想法,但直到2005年才在博客上公開發佈。我之所以提這件事,是因為《紐約時報》記者納薩尼爾·波普(Nathaniel Popper)曾寫過一本關於比特幣歷史的不錯的書,他發現,公開發佈比特黃金的那篇博文的發表時間被修改過,改成了中本聰正式發佈比特幣之後的兩個月。他跟許多觀察者一樣,認為薩博就是中本聰,即使薩博否認。他認為,薩博修改博文發表時間就是證據,這樣,後者就可以掩蓋自己在比特幣發佈之前就已經發明了比特黃金這一事實。

但這一證據並不可信。仔細閱讀博文,你就會發現,薩博明確表示自己在1998年就有了比特黃金的想法。他沒有試圖更改這些時間。更為合理的解釋是,比特幣開始流行後,他把那篇博文置頂,這樣,人們就可以看到他在比特幣之前就有了類似的構想。

比特幣與B幣和比特黃金有很多重要的不同之處。B幣和比特黃金通過數學計算直接創造貨幣。任何人都可以解題,答案本身就是貨幣。但在比特幣體系中,解決數學計算並不構成貨幣,只是確保區塊鏈安全,間接地在有限時間裡創造新貨幣。此外,B幣和比特黃金靠時間戳給貨幣的創造和轉賬簽名。但比特幣不需要被認證過的時間戳,它只是用時間戳來保存區塊和交易的先後順序。

最後,如果服務器和節點對數據庫賬本的記錄不符,B幣和比特黃金並沒有提供一個明確的解決方案。兩位發明人所著文章暗示的解決方案是,由大多數人來決定到底哪個是對的。但是,因為任何人都可以用不同身份設置一個或一百個節點,這個解決方案並不可靠,除非有一個管理員來監管網絡入口。比特幣則恰恰相反,如果攻擊者想更改數據,他必須要比其他所有人加起來的解決數學計算的速度還要快。這樣就保證了安全性,還可以讓我們量化直觀地看到整個系統有多安全。

B幣和比特黃金都不是正式發佈的體系,B幣是在一篇發表在郵件組的文章中提出的,比特黃金則是在幾篇博文中提出的。二者未被真正實施和廣泛應用。不像比特幣白皮書,它們也沒有給出詳細設定或程序源代碼。二者都涉及可能無解的若干問題。其一是前文討論過的數據庫賬本不一致的問題。另外的問題是,如何設置創造新貨幣的數學運算的難度?具有同等運算能力的硬件隨著時間的推移越來越便宜,針對這一問題,比特幣採用了週期性自動調節運算難度的機制。B幣和比特黃金沒有這樣的機制,因此,它們的貨幣會因為創造難度降低而貶值。

關於中本聰的猜測

你大概知道,中本聰是比特幣創造者的化名。他的真實身份依然是一個謎團,但在比特幣早期,他還是比較活躍的。我們可以從他留下的這些印記中,探討一下他本人,比如說他是從什麼時候開始研究比特幣的?我們談論過的那些早期構想對他有什麼影響?是什麼在激勵著他?

中本聰說他從2007年5月左右開始編寫比特幣。他選擇匿名並不表示他會在這一點事情上說謊,因此,我姑且相信他所說的。他於2008年8月註冊域名bitcoin.org。同時,他開始給一些他認為可能會對比特幣感興趣的人發送郵件,闡述他的想法。2008年10月,他公開發表白皮書,解釋比特幣協議。此後不久,他又公開了比特幣的源代碼。隨後兩年,他在論壇上發佈信息,與許多人寫郵件交流,回答人們的關切。在編程方面,他對源代碼進行了多次修改。他和幾位開發人員一同維護源代碼,修復補丁。2010年11月,別人逐漸開始接手比特幣項目,而他卻不再出現。

我用「他」來表示中本聰,但其實我並不知道中本聰到底是男性還是女性,只是因為中本聰是個男性名字而已。此外,我認為中本聰是一個人,而非一個團體。原因是,仔細研究中本聰所有的網絡交流記錄,在兩年的時間裡,一個團隊裡的多個人共用一個賬號回復郵件,修改代碼,保持風格、語氣和內容一致,這簡直難以想像。更為合理的解釋是,展現在我們面前的中本聰的所有行為是由同一個人完成的。

此外,從他的文章和所打的補丁來看,這個人完全瞭解比特幣的整套代碼體系和設計細節。我們有理由相信源代碼和白皮書由同一個人所寫。最後,可能在一開始有人幫助過中本聰。雖然如此,比特幣正式發佈之後,我們可以看到,中本聰在得到幫助之後,會很快對其他有貢獻的幫助者表示感謝。從這點性格來看,他應該不會在接受別人的幫助之後閉口不言,故意誤導人們相信比特幣是他一個人的作品。

我們可能會想:「中本聰知道電子現金的歷史嗎?」為更好地弄清楚這個問題,我們可以看看他在比特幣網站上早期發佈的白皮書裡的引用和索引。在白皮書中,他引用了一些基本密碼學和概率論的論文,也引用了我們之前所討論的時間戳。因為比特幣裡的區塊鏈與他所引用的內容相似度極高,自然而然地,我們會認為他有參考別人的區塊鏈設計。他還引用了哈希現金,它的數學計算與比特幣的非常類似。此外,他還引用了B幣。隨後,他又在網站上添加了比特黃金和一個由哈爾·芬尼(Hal Finney)設計的重複利用計算數學方案的參考索引。

但是,從與中本聰有早期交流的人公開的郵件來看,我們發現,B幣是在亞當·貝克的提議下才加入比特幣體系的。隨後,中本聰給B幣的創造者戴偉發郵件。從郵件中可以看出,是戴偉告訴了他比特黃金。因此,激發中本聰創造比特幣的,並不一定是這些方案。他之後與哈爾·芬尼有過多封往來郵件,這可以解釋他為什麼在網站上或者其他地方引用了芬尼的成果。

基於上述信息,比較可信的推斷是,在創建比特幣體系時,中本聰只知道電子現金、哈希現金和時間戳,認為只有這些與比特幣是相關的。然而,等他知道B幣和比特黃金的時候,他才發現,這兩個也與比特幣有很大關係。2010年,維基百科主編認為比特幣不值一提,準備刪除比特幣詞條。中本聰跟另外一些人討論如何編寫比特幣詞條,好讓維基百科接受它。中本聰建議這樣描述比特幣:「比特幣是戴偉在1998年在網絡朋克中所提到的B幣構想和尼克·薩博提出的比特黃金的具體實現。」可見,中本聰這時確實把比特幣看成二者的延伸或具體實施,以便更好地解釋比特幣的工作原理。

那麼,中本聰創建比特幣時,他知道其他體系嗎?比如我們提過的喬姆的電子現金和信用卡方案。這個很難講。我們找不到他瞭解它們的證據,但也有可能他雖然知道,但並未提及它們,因為它們與比特幣無關。比特幣採用了完全不同的去中心模式,沒有理由去提已經失敗了的中心化體系。

中本聰自己也表明了這一點。他在發表在比特幣論壇裡的一篇文章裡,曾粗略地提了一下喬姆的電子現金體系。他當時正在寫一篇關於opencoin.org的文章,他說他們似乎在「討論老一套的喬姆中心造幣體系,但也許是因為他們別無選擇,也許他們會對新的方向感興趣。20世紀90年代以來所有的虛擬貨幣公司全都失敗了,這導致許多人對這一行業非常不看好。我希望,人們可以看到,這些系統之所以失敗,顯然是因為它們的中心化控制這一特性。我想我們正在首次嘗試建立一個去中心化的非認證系統。」從這段話裡,我們可以清晰地瞭解到中本聰是怎麼看待之前的系統的,特別是,他認為比特幣與它們是不同的。去中心化這一特性確實真正讓比特幣從其他虛擬貨幣脫穎而出。

中本聰寫下的另一段話暗示他不是學術派人士。大多數學術研究者先有了構思,然後寫下來,再把自己的構思付諸實施。中本聰說他的方式截然相反:「我在建造比特幣時,其實是倒著來的。我必須寫下所有代碼,才能使自己相信我是可以解決任何問題的,然後我才寫下理論。我認為我能在寫出具體設計細節之前就可以公開代碼。」

中本聰是一個神秘的人,值得一提的是,跟所有人一樣,他也會犯錯,也無法預測未來。比特幣的源代碼和設計中都存在很多漏洞和瑕疵。例如,比特幣體系有一個可以向IP地址發送比特幣的功能。雖然當時人們並未發現,但現在看來,這一設計十分糟糕。中本聰在構建比特幣用途時,他主要側重於比特幣在互聯網上的使用。這當然是比特幣的主要用途,但並非唯一用途。他從未想過,可以去咖啡店用比特幣付錢。

瞭解了虛擬貨幣的歷史之後,我們可能還存在一個疑問:「為什麼中本聰要匿名?」有許多可能的原因。首先,也許他就是喜歡這樣。許多小說家都選擇匿名,像班克西(Banksy)這樣的塗鴉藝術家也一直不公開身份。其實,在中本聰活躍的網絡朋克社區和密碼學郵件組,大家都普遍採用匿名方式發表文章。

此外,中本聰選擇匿名可能還有法律上的顧慮。自由儲備(Liberty Reserve)和電子黃金(e-Gold)這兩家美國公司都因為非法洗錢惹上了麻煩。2006年,自由儲備的創始人之一擔心被指控洗錢,逃離美國。電子黃金的創始人一直待在美國,但其中一位創始人被指控洗錢並最後認罪。這一事件正好發生在中本聰創建比特幣網站並公開討論比特幣的前夕。縱然如此,許多人都創立過虛擬貨幣系統,沒有人因為法律顧慮而選擇匿名。所以很難說這到底是不是他選擇匿名的根本原因。

值得注意的是,我們之前提過,電子現金的一些技術是有專利保護的。網絡朋克運動擔心實施電子現金系統會侵犯這些專利。事實上,有人曾在網絡朋克郵件組發表文章,建議由一群匿名的程序員來架設電子現金系統,這樣,即使侵權,也查不出是誰。但是,比特幣的設計與電子現金的專利差別很大,很難判定比特幣侵犯了它的專利權,也許中本聰選擇匿名只是比較謹慎。又或者,他是受到網絡朋克社區里程序員匿名的啟發。

許多人認為中本聰選擇匿名是出於個人安全方面的考慮。眾所周知,他早期時挖礦獲得大量比特幣,時至今日,比特幣的巨大成功也就給他帶來了巨額財富。我認為這個原因是可能的。畢竟,選擇匿名不是一時的決定,而是一貫的風格。儘管如此,這可能還不是他一開始就選擇匿名的原因。當他首次使用中本聰這個化名時,他還沒有發佈白皮書和源代碼,很難想像他那時就能夠預測到比特幣後來會取得如此巨大的成功。其實,在早期,中本聰對比特幣的未來持樂觀且謹慎的態度。他明白許多之前的嘗試都失敗了,比特幣最終也可能失敗。

結語

與之前的失敗嘗試相比,比特幣的成功令人矚目。它有許多優秀的創新,例如區塊鏈和去中心化實現用戶之間直接交易的模式等。它能夠有效地確保用戶的匿名性,雖然還做得不夠完美。我們將在第6章詳細瞭解保密性。比特幣的保密性從某種意義上來說做得不如數字現金那麼好,但從另一個角度來看,它的保密性要更強。因為在數字現金系統,只有消費者能夠匿名,商家則不能。比特幣為消費者和商家(不管是消費者還是商家)提供了同等程度的保密性。

把比特幣和我們之前討論過的虛擬貨幣系統進行對比,我學習到的經驗教訓是:第一,遇到困難時不要輕易放棄。20年來,人們在開發虛擬貨幣的道路上一直失敗,但這並不意味著永遠開發不出一套成功的體系。第二,要願意折中妥協。如果你想把保密性和去中心化功能做到完美和極致,可能就必須犧牲其他的功能。回顧比特幣的發展史,它找到了一個完美的平衡點。它的保密性不夠完美,需要用戶連接到點對點的網絡,但用戶願意接受這樣的設定。

最後,眾志成城。比特幣吸引了一批具有激情的用戶和開發者,他們願意為開源技術出一分力,這與之前由公司開發的虛擬貨幣很不一樣,後者的支持者只是公司內部員工而已。比特幣如今的成功很大一部分是因為它擁有一個龐大的生機勃勃的支持群體,他們共同推動科技的發展,招徠客戶,說服商家採用它。

延伸閱讀

一篇關於虛擬貨幣架構的綜述,淺顯易懂,側重實踐:

P.Wayner. Digital Cash: Commerce on the Net (2nded).Waltham,MA:Morgan Kaufmann,1997.

從密碼學角度看電子現金系統(第一章)和微支付(第七章):

B.Rosenberg,ed. Handbook of Financial Cryptography and Security . Boca Raton,FL: CRC Press,2011.

雖然不是喬姆最早一篇關於電子現金的論文,但這篇是公認的最富有創造性的論文。它的模式成為後來類似論文競相模仿的對象:

D.Chaum, A.Fiat, and M.Naor.「Untraceable Electronic Cash.」 In CRYPTO 88: Proceedings of the 8th Annual International Cryptology Conference on Advances in Cryptology .London:

Springer Verlag, 1990.

運用現代密碼學技術來提升喬姆-菲亞特-納歐爾體系效率的論文有許多篇,這是其中最重要的一篇:

J.Camenisch, S.Hohenberger, and A.Lysyanskaya.「Compact E-cash:

Theory and Applications of Cryptographic Techniques,」 2005.

對金融市場和金融構想,包括對Mondex電子錢包體系進行的一些比較實用的安全性分析:

R.Anderson. Security Engineering , second edition.Hoboken, NJ: Wiley, 2008.

喬姆的電子現金構想的實施綱要:

B.Schoenmakers.「Security Aspects of the Ecash Payment System.」 In State of the Art in Applied Cryptography .New York: Springer, 1997.

這兩篇論文曾被中本聰在比特幣白皮書中引用,被運用於比特幣的設計中:

A.Back.「Hashcash—A Denial of Service Counter-Measure,」

2002.Available at hashcash.org/papers/hashcash.pdf.

S.Haber and W.S.Stornetta.「Secure Names for Bitstrings.」 CCS, 1997.

[1] Mondex是一種靈活的電子現金,是當今世界上幾種主流的開放式通用電子錢包標準。最初是英國西敏寺銀行開發的電子錢包,是世界上最早的電子錢包系統。——譯者注。

《區塊鏈:技術驅動金融》