比特幣的漫漫長路區塊鏈
比特幣的想法從何而來?為什么有些技術存活了下來,而另一些則會死亡?復雜的技術創新要成功地商業化需要些什么?
通往比特幣的道路上到處充斥者失敗的嘗試。我已經編制了大約一百個密碼支付系統,無論是電子錢包還是信用卡為基礎的技術,在某些方面它們是非常著名的。有些是已經得到了很好的學術引用,有些則是實際部署和測試的系統。這份名單上所有的名字,有可能你只認識一個——Payply。而Payply存活的唯一原因,僅僅是它迅速轉離了原來以手持設備密碼支付為核心的想法!
從這段歷史中可以學到很多東西。比特幣的想法從何而來?為什么有些技術存活了下來,而另一些則會死亡?復雜的技術創新要成功地商業化需要些什么?如果不出意外,這個故事會讓你欣賞到,我們最終擁有的一個真正的、有效的互聯網付款機制是多么地引人注目。
表1 : 值得注意的電子支付系統和提議
1.傳統金融的安排
回溯歷史,在有政府和貨幣之前,一個為獲取貨物而運作的系統是以物易物。比方說,Alice想要一個工具,Bob需要藥品。如果他們恰好都有對方需要的東西,那么他們可以交換,兩者都能滿足他們的需要。
另一方面,假設Alice有食物,她希望通過交換得到一個工具,然而Bob擁有一個工具,但沒有食物的需求,反而他需要藥物。Alice和Bob不能相互交易,但如果有第三個人,卡羅爾,她有藥物,想交換得到食物,那么就有可能安排三方交易,每個人得到他們所需要的。
當然,它的缺點是需要協調——組織一群人在同一個時間、同一個地點,讓他們的需求達成一致。為了解決協調的問題,出現了兩個系統:信貸和現金。歷史學家、人類學家和經濟學家對這兩者哪一個是最先發展起來的起了爭論,但這對我們的目的無關緊要。
在一個基于信用的系統中,上面例子中的Alice和鮑伯將能夠與對方進行交易。鮑伯會給Alice這個工具,Alice則欠鮑伯一個人情。換句話說,Alice有個債務,她需要在未來的某個時候與鮑伯和解。Alice的物質需求現在已經得到滿足,但她想要取消債務,所以這是她的新“希望”。如果Alice在未來遇到卡羅爾,Alice可以用食物交易卡羅爾的藥物,然后再返回到Bob處,給Bob藥物并取消債務。
另一方面,在以現金為基礎的系統中,Alice會從Bob那里購買工具。后來,她可能會把食物出售給卡羅爾,卡羅爾則能把他的藥物賣給Bob,以此來完成這一循環。這些交易可以以任何順序發生,只要確保每筆交易中的買方手頭有現金。最后,當然,這就像錢從未轉過手一樣。
沒有哪個系統更勝一籌。基于現金為基礎的系統,需要在無交易發生的情況下,初始分配一些“自舉”現金。基于信用為基礎的系統不需要引導,但缺點是任何欠了債務的債權人都承擔了一些風險,債務人有可能永遠不會回來償還債務。
現金也能讓我們精確地知道某物的價值。假如你是物物交換,很難說一個工具的價值超過了藥物,或者藥物的價值超過了食物。現金讓我們用數據來談論價值。這就是我們今天使用混合系統的原因——甚至當我們使用信用卡,我們依舊用它所需的現金來度量債務。
這些想法的出現有很多背景,尤其是用戶在線交易某種虛擬物品。例如,對等(P2P)文件共享網絡,必須處理好“不速之客”的問題,也就是那些下載了文件卻沒有反過來共享文件的用戶。雖然可以交換文件,但依舊有協調的問題:尋找誰真正擁有你想要的文件,還有希望你有那個確切的文件。在MojoNation項目和Karma學術建設中,用戶必須初始分配一些虛擬現金,以便他們接受文件時支付,發送文件副本給其他用戶時獲得報酬。在這兩種情況下,一個或多個中央處理器幫助跟蹤用戶的余額,并提供內部貨幣與傳統貨幣之間的兌換服務。雖然MojoNation沒有存活足夠長時間來實現這樣的交換,它卻成為當今使用的一些協議的知識產權祖先:比特流BitTorrent和開源分布式文件儲存系統Tahoe-LAFS.
2.在線信用卡的麻煩
就基本概念這一點,我們可以將大量的電子支付方式分成信用和現金兩堆。比特幣顯然是在“現金”堆,但讓我們先看看另一個。
信用卡交易是當今網絡上使用的最主要支付方式。如果你曾經從Amazon這樣的在線賣家那里買過東西,你就知道這個安排是如何進行的。你輸入你的信用卡詳細信息,把它發送到Amazon,然后亞馬遜轉發這些信用卡詳細信息,并與“系統”—— 涉及處理器,銀行,信用卡公司和其他中介的金融系統進行交談。
另一方面,如果你使用像PayPal這樣的東西,你所看到的就是一個中介架構。在你和賣方之間有一家公司,你將信用卡信息發送給這個中介,該中介批準交易并通知賣方。每一天結束時,中介會與賣方結平賬目。
你從這個架構中得到的好處是,你不必向賣家提供你的信用卡詳細信息,這可能是一種安全風險。你甚至不需要讓賣家知道你的身份,這很好地保護了你的隱私。它的不足是你失去了直接與賣家簡單互動的機會。你和賣家可能不得不在同一個第三方機構都擁有賬戶。
今天,我們大多數人都樂于在網上購物時提供信用卡信息,或者至少我們勉強接受。我們也習慣于收集有關網上購物和瀏覽活動的數據公司。但在20世紀90年代,網絡是個新新事物,協議級加密標準正在出現,這些企業使消費者深感不安和猶豫。特別是,通過不安全的渠道將信用卡信息交給不知名的網絡供應商被認為是瘋狂的。在這樣的環境下,人們對中介架構產生了濃厚的興趣。
FirstVirtual是一個早期的支付中介,它成立于1994年。順便說一下,他們是最早建立純粹虛擬辦公室的公司之一,員工遍布全國,通過互聯網進行溝通,因此獲得了這個名字。
FirstVirtual提出的系統有點像PayPal當前的系統,但在它先于Paypal之前很多年。作為用戶,你要注冊并提供你的信用卡詳細信息。當你想要從賣家那里購物時,賣家聯系FirstVirtual請求所要求付款的詳細信息,FirstVirtual將與你確認這些信息,你的信用卡則會在你批準后付款。但有兩個細節很有趣。首先,所有這些通信都發生在電子郵件上;當時的Web瀏覽器剛剛開始普遍支持像HTTPS這樣的加密協議,而多方性的支付協議也增加了其他的復雜性。(其他中介機構將信息編碼到URL中或在HTTP之上使用自定義的加密協議)第二,用戶有三個月的時間來質疑這筆費用,商人則只能在三個月之后收到錢!今天的商家能立即得到報酬,但是,仍然有用戶提出退款或對信用卡對賬單存有爭議的風險。如果發生這種情況,商家將不得不將付款退還給信用卡公司。
在90年代中期,出現了一種稱之為集合架構(SET)與這些中介架構進行競爭。SET即避免了用戶向商家發送信息卡信息的需要,同時還免除了用戶不得不在第三方進行注冊的麻煩。在SET中,當你準備購買時,你的瀏覽器會將你的交易細節傳送給你計算機上的購物程序,該購物程序將你的信用卡信息加密,以便除了第三方沒有人可以解密它。以這種方式加密了你的數據后,你就可以放心的將其發送給賣家。賣家機械地將加密數據轉發給第三方,連同他們自己對交易細節的看法。第三方揭秘你的數據,當你的想法與賣家的想法相符時才批準交易。
SET是一個由VISA和萬事達主導,當今諸多技術巨頭:Netscape、IBM、Mircrosoft、Verisign和RSA參與開發的標準。它是一個規范總括,一統了幾個現有提議。
有一家采用SET的公司被稱為CrberCash,在很多方面這是一個有趣的公司。他們除了處理信用卡支付,還有一款名為CyberCoin的數字現金產品。這是一個小額支付系統,用于支付例如用幾美分來閱讀在線報紙的交易。這意味著你的CyberCoin賬戶任何時候,都可能不會超過10美元。然而,有趣的是,他們能夠為每個賬戶獲得最高達10萬美元的美國政府(FDIC)保險。
回顧過去,還有更多故事。當CyberCash運行時,加密技術被認為是一種武器,美國政府限制了它的出口,現在已被放棄。這意味著不能將有意義的加密軟件提供給其他國家的用戶下載。然而,CyberCash能夠得到國務院對他們軟件的特別豁免權。政府的觀點是,從CyberCash的軟件中提取加密技術,將比從頭開始編寫密碼更難。
最后,CyberCash成為少數幾家受到Y2K攻擊的公司,造成了他們的支付處理軟件對用戶進行雙重收費。后來,他們在2001年破產。他們的知識產權后來由Verisign收購,然后他轉過身賣給了現在的Paypal。
為什么SET沒有起作用?根本問題與證書有關。證書是一種安全地將加密身份(即公鑰)與真實身份相聯系的方法。它是一個網站需要從Verisign這樣被稱為認證機構的公司獲得,為了展示瀏覽器安全的協議(通常用鎖定的圖標表示)。CyberCash和SET決定不僅系統中的處理器和商家必須獲得證書,所有用戶也必須獲得證書,不然網站就不能安全的使用。獲得證書就像納稅一樣可愛,這樣的系統注定是一場災難。過去幾十年,主流用戶對任何需要最終用戶證書的系統都表示了堅定和一致的“否定”,而這些提案現在已經被歸為學術論文。Bitcoin通過避免現實生活中的身份驗證,巧妙地避開了這個惱人的問題。在比特幣中,公鑰本身就是用戶所知的身份,我們將在第1章中講述。
在90年代中期,當SET被標準化時,萬維網聯盟也在考慮金融支付的規范化。他們想通過擴展HTTP協議來實現這一點,以便用戶不需要額外的軟件來進行交易,只需使用瀏覽器即可。事實上,他們有一個關于如何擴展協議的一般性建議,以及他們在付款中使用的一個用例。這從來沒有發生過,整個擴展框架從未部署在任何瀏覽器中。2015年,差不多二十年后,W3C宣布它想再次嘗試它,且把比特幣納為標準化的一部分。然而,不管過去如何失敗,我都不會屏住呼吸。
3.從信用到(加密)現金
現在讓我們轉到現金。我們先前比較了現金和信貸,并指出現金需要“自舉”,但好處是它避免了買家拖欠債務的可能性。現金還有另外兩個優勢。第一個是更好的匿名。由于你的信用卡是以你的名義發行的,因此銀行可以追蹤你的所有支出。但當你用現金付款時,銀行沒有看到,而賣方也不需要知道你是誰。第二,現金可以在不需要第三方批準的情況下啟用離線交易。也許后面他們還要去像銀行這樣的第三方存錢,但那就沒有那么麻煩了。
比特幣不完全具備這兩個屬性,但足夠接近,這已經相當有用了。比特幣并不像現金那樣匿名。你不需要用你的真實身份來支付比特幣,但可能你的交易可以通過巧妙的算法與公共交易賬簿捆綁在一起,然后如果你不小心,它進一步與你的身份相關聯。我們將在第6章中講述比特幣匿名背后凌亂而迷人的細節。
比特幣不能以完全離線的方式工作。好消息是,它不需要中央服務器,而是依靠一個具有彈性、互聯網本身方式的對等網絡。在第3章中,我們將討論“綠色地址”和小額支付等技巧,這些技巧讓我們在某些情況下,或者一定條件下做離線支付。
最早將加密技術應用于現金的想法來自于1983年的大衛·肖姆(DavidChaum)。我們通過物理比喻來理解這一點。假設我開始分發一些附有我簽名的紙,上面寫著:“這張票據的持有者可以把它兌換成一美元”。人們如果相信我會遵守我的承諾,并考慮我的簽名是不可偽造的,他們就可以像紙幣一樣傳遞這些紙張。事實上,紙幣本身就是從商業銀行簽發的期票開始的。只有在最近的歷史中,各國政府才著手集中貨幣供應,并要求銀行合法贖回票據。
我可以用電子化的數字簽名做同樣的事情,但這會遇到惱人的“雙花”問題——如果你收到一個代表虛擬現金單位的數據,則可以制作兩個(或更多)副本,并將其傳遞給不同的人。為了更好的說明這一點,讓我們稍微延伸一點,假設人們可以復制出完美的副本,而我們卻無法分辨出來。這個世界的雙花問題能被我們解決嗎?
這里有一個可能的解決方案:把唯一的序列號放在我發出的每一個票據中。當你從某人那里收到票據時,請檢查我的簽名,你也可以打電話給我,詢問該序列號的票據是否已經花了。在我說“不”的情況下,你接受這筆票據。我將在我的分類賬上把這些序列號記錄為已使用,如果你嘗試花費該票據,則無法使用,因為收件人會打電話給我,我會告訴他們該票據已經使用。你需要做的就是定期為我帶來你收到的所有票據,我將向你發送相同數量的新票據,并附上新的序列號。
這樣方案完全OK。這在現實生活中很麻煩,但是我提供了一個簡單的數字服務器來完成序列號的簽名和記錄。唯一的問題是,它不是真的現金,因為它不是匿名的——當我發給你票據的時候,我可以把序列號和你的身份對應起來,同時當別人兌換它時我可以做同樣的事。這意味著我可以追蹤你所有花錢的地方。
這就是Chaum的創新所在。他想通了如何既保持系統的匿名性,又可以通過發明以下等效的程序來防止雙花問題:當我向你發出新的票據時,你來挑選序列號。你把它寫在紙上,蓋住它使我看不到。然后我會簽署它,仍然無法看到序列號。這在密碼學中被稱為“盲簽”。根據愛好選擇一個長的、隨機的序列號,以確保它很有可能是獨一無二的。我絲毫不必擔心你會選擇一個已經被選中的序列號,你這樣做只能在結算中發送你自己,最終會出現一個不能花費的票據。
這是第一次重要的數字現金提案。它有效,但仍然需要由一個中央權威機構(如銀行)運行的服務器,并且需要每個人都信任該實體。此外,每個交易都需要這個服務器的參與才能完成。如果服務器暫時關閉,付款就會中斷。幾年后,在1988年,Chaum與另外兩家密碼學家Fiat和Naor合作提出了離線電子現金。最初看來這是不可能的:如果你嘗試在兩個不同的商店使用相同的數字票據或硬幣,除非他們連接在相同的支付網絡或中央機構,否則如何阻止他們?
這個聰明的想法是停止考慮如何阻止雙重支付,而是當商家重新連接到銀行服務器時把重點放在檢測它。畢竟,這就是為什么即使天空中沒有網絡連接,你還可以在飛機上使用你的信用卡的原因。當航空公司能夠重新連接到網絡時,交易就會開始處理。如果你的卡被拒絕,你將欠該航空公司(或你的銀行)的錢。如果你想到這一點,相當多的傳統金融就是基于發現錯誤或損失的想法,來試圖追回錢或懲罰犯罪者。如果你寫一張個人支票,他們不能保證金額實際上在您的帳戶,但如果支票跳票他們就會去找你。可以想象,如果離線電子現金系統得到廣泛采用,法律體系就會認識到雙重消費是一種犯罪行為。
Chaum,Fiat和Naor的檢測雙重支出的想法是一個復雜的加密藝術。在高水平上,它是這樣實現的:發給你每個數字硬幣都會對你的身份進行編碼,除了你和銀行之外,沒有人可以解碼它。每次你花你的硬幣時,收件人將要求你對編碼的一個隨機子集進行解碼,他們將保持這一記錄。這種解碼不足以讓他們確定您的身份。但是,如果你雙重消費,最終兩個收件人都會去銀行兌現他們的票據,當他們這樣做時,銀行可以把兩塊信息放在一起,以極大的概率對你的身份進行完全解碼。
你可能想知道是否有人可以在系統中陷害你成為雙重消費者。你和我一起花了一枚硬幣,然后我轉過身去,試圖雙重消費(不用銀行兌換,直接用我的身份編碼獲得一個新的硬幣)。這將不會起作用——新的收件人將要求我解碼一個隨機的子集,這幾乎肯定不會與為你解碼的子集相同,所以我將無法執行他們的解碼請求。
多年來,許多密碼學家已經看到了這種結構,并以各種方式對它進行了改進。在Chaum-Fiat-Naor的方案中,如果一枚硬幣價值100美元,而您想要購買的成本僅為75美元,那么根本沒有辦法把這個硬幣分成75美元和25美元。你唯一可以做的是回到銀行,花費$ 100硬幣,并要求一個$ 75硬幣和一個$ 25硬幣。但是Okamoto和Ohta的一篇文章使用“Merkle trees”來創建一個允許您細分硬幣的系統。Merkle trees也將出現在比特幣中,我們將在第1章中講述他們。Chaum-Fiat-Naor的方案同時也為提高支付效率留下了很大的空間。特別的是,方案中應用的非零知識證明(最著名的由Brands、Camenisch, Hohenberger、Lysyanskaya發明),非常的富有成效。非零知識證明也已經應用在比特幣中,我們將在第6章中看到。
回到Chaum:他商業化了他的想法,于1989年組建了一家名為DigiCash的公司,可能是最早試圖解決在線支付問題的公司。他們比我們剛剛討論的諸如FirstVirtual、CyberCash等早五年時間。Digicash系統中的現金叫做Ecash,他們還有一個叫做cyberbucks的系統。幾家美國的銀行和至少一家芬蘭的銀行實際實施了他們的方案。這是在二十世紀九十年代,早于比特幣很久很久,這可能會讓將銀行視為科技恐懼癥,反創新的龐然大物的比特幣愛好者異常的驚訝。
Ecash是基于Chaum的協議。客戶是匿名的,所以銀行無法追蹤他們是如何花錢的。但是,ecash的商家并不是匿名的。他們必須在收到貨幣后立即換回硬幣,所以銀行知道他們什么時候做了什么等等。
圖2:DigiCash的屏幕截圖
圖2顯示了這個軟件的界面。正如你看到的,它顯示了你的余額以及你從銀行發給你的所有硬幣。既然沒有辦法分割你的硬幣,銀行會向你發出一整套硬幣,價錢分一美分、兩美分、四美分等等(以2為倍數)。這樣,你(或者代表你的軟件)就可以選擇一套硬幣來支付交易的確切金額。
當你想要交易的時候,比如說你想要向非盈利組織EPIC捐款,你需要點擊一個會帶你到Digicash網站的捐贈鏈接。然后,將打開一個反向Web鏈接回到你的計算機,這意味著你的計算機必須能夠接受傳入的鏈接并充當服務器。你必須擁有你自己的IP地址,且你的ISP將不得不允許傳入鏈接。如果連接成功,ecash軟件會在你的計算機上啟動,你可以批準交易并支付現金。
Chaum擁有Digicash技術的幾項專利,特別是其使用的盲簽方案。這是有爭議的,它阻止了其他人使用相同的協議開發電子貨幣系統。一大堆密碼學家們就此掛上了所謂的Cypherpunks郵件列表來替換它。Cyperpunks是日本Satoshi Nakamoto后面向世界宣布的Bitcoin郵件列表的前身,這不是巧合。我們會在第7章談論Cypherpunk運動和比特幣的根源。
解密高手破譯ecash實現的一個版本的電子貨幣被稱為magicmoney。它確實違反了專利,但被廣而告之僅用于實驗用途。這是一個有趣的軟件,它的界面是基于文本的。你可以通過電子郵件發送交易。你只需將交易復制并粘貼到你的電子郵件中,然后將其發送給其他用戶。希望你最好使用了端到端電子郵件加密軟件(如PGP)來保護傳輸中的交易。
后來,Ben Laurie和其他很多人一起發展了一個叫Lucre的提案。Lucre試圖以非專利-作保的方式取代ecash中的盲簽方案,系統其他部分大致相同。
另外,伊恩·戈德伯格(Ian Goldberg)提出了一個提案試圖解決不能分割硬幣來找零的問題。他的想法是,如果商家還有一些硬幣,那么他們可以向你發回硬幣,以便你沒有多余零錢時可以多支付,然后收到商家發回的硬幣。但請注意,這引入了匿名問題。正如我們以前看到的那樣,在ecash中,發送者是匿名的,但商家不是。當商家發回現金時,從技術上來說他們是發件人,所以他們是匿名的。但是你,作為必須將這筆現金退回銀行的人,不是匿名的。沒有辦法設計這個系統而不破壞試圖購買商品的用戶的匿名性。所以,戈德伯格提出了一個提案,其中有不同類型的硬幣來允許交易的發生,允許你改回去,并保持你的匿名。
現在我們來看看,為什么DigiCash失敗了?DigiCash的主要問題是很難說服銀行和商人采用它。既然沒有很多商家接受ecash,用戶當然也不想要它。更糟糕的是,它不支持用戶和用戶的交易,或至少支持的不是很好。它真正集中在用戶對商家的交易上。因此,如果商人不在船上,就沒有其他方法可以引導人們對系統感興趣。所以一天結束時,DigiCash失敗了,信用卡公司勝利了。
作為附注,比特幣允許用戶到商家和用戶到用戶的交易。實際上,協議沒有與用戶的概念分開的商家概念。對用戶到用戶的交易的支持可能有助于比特幣的成功。從一開始就有一些事有助于你的比特幣:把它發送給其他用戶,社區試圖鼓勵對比特幣的支持,讓商家接受它。
在公司的后幾年里,DigiCash還試用了防篡改硬件,試圖防止雙重支出,而不是僅僅檢測它。在這個系統中,你會得到一個通常被稱為錢包或某種卡片的小型硬件設備。該設備將跟蹤您的余額,當您花費時余額減少,充值是余額增加。設備最關鍵的是,應該沒有物理或數字的辦法進入并篡改其計數。所以如果這個計數變為零,那么這張卡就停止支付,直到它被重新加載為止。
圖3:電子貨幣系統,用戶的卡和錢包
圖3顯示了Mondex系統的用戶端。有一個智能卡,一個錢包單元,他們都可以加載現金。如果您想進行用戶之間的交易,那么提供者的用戶將首先把卡片放入錢包中,并將錢從卡上轉移到錢包上。然后接受者會將他們的卡片插進錢包中,你將錢移到第二張卡上。這是一種匿名交換數字現金的方法。
Mondex在一些社區試用了他們的技術。一個社區恰好是一個非常接近我長大的城市:圭爾夫,安大略。你可能已經猜到它并沒有真正流行起來。Mondex卡的一個主要問題是它和現金極像——如果你失去他們或被盜,錢就丟失了。更糟糕的是,如果卡片有某種故障,讀卡器不讀取,則無法確定該卡是否有結余。在這些情況下,Mondex通常會cover成本,他們會假設卡被加載,并向用戶賠償了這筆錢。當然,這可能會使公司損失很多錢。
此外,錢包笨重而反應緩慢,用信用卡或現金支付要快得多。零售商也討厭有幾個付款終端,他們只想要一張信用卡。所有這些因素加在一起導致了Mondex的失敗。
然而,這些卡是智能卡,這意味著它們上面具有小型微控制器,并且該技術已被證明是成功的。在今天的許多國家,包括加拿大在內的每一張信用卡和每一張借記卡現在都擁有智能卡技術。但它用于不同的目的。它不用于防雙花問題,因為它不是一種基于現金的技術,因此不會出現這個問題。銀行而不是你的信用卡,隨時監控著你的余額或可用信用。相反,芯片是用于認證的,也就是證明你知道和你的帳戶相關聯的PIN。但是,Mondex這一技術很久之后才被銀行業廣泛采用。
4.憑空鑄造的錢幣
在DigiCash系統中,如果您有一個價值100美元的數字現金,那么憑什么它值100美元?答案很簡單:為了獲得價值100美元的ecash,你必須從你的銀行帳戶中拿取100美元,并將其發送給正在發行你的電子現金的銀行。但是,關于如何做到這一點,人們提出了一系列不同的建議,而不同的公司采取的做法也不同。一個牽強的可能:如果一個國家的政府實際授權了創造數字現金的服務,讓錢幣憑空出現,那又怎么樣?那就是NetCash背后的想法,盡管它從未實踐過。一個不一樣的系統e-Gold將一堆黃金放在金庫中,并發行對應價值的數字現金。另一家名為Digigold的公司并沒有完全由黃金支撐,而只是獲得了部分儲備。
所有這些想法最終都會將數字現金的價值與美元或商品掛鉤。如果美元的價值上漲或下跌,你的數字貨幣持有量的價值將隨之而變。一個完全不同的可能性是允許數字現金是自己的貨幣,獨立于任何其他貨幣發行和估價。
要創建一個可能獲得真正價值的自由浮動數字貨幣,你需要設計一些稀缺的東西。事實上,稀缺性也是黃金或鉆石被用作貨幣支持的原因。在數字領域,實現稀缺的一種方法是設計一套系統,使得鑄幣需要一段時間的破解才能成功解決計算問題(或“拼圖”)。這就是比特幣“采礦”中發生的事情,我們將在第5章講述。
基本思想是——用計算解決一些具有一定價值、相當古老的數字對象謎題。1992年,密碼學家Dwork和Naor首先提出了一個潛在的回復垃圾郵件的解決方案。你每次發送電子郵件,你的電腦必須解決一個需要幾秒鐘解決的難題,那該怎么辦呢?為了執行這一要求,接受者的電子郵件程序會簡單地忽略沒有解決計算難題的電子郵件。對于一般用戶而言,發送電子郵件不是一個很大的障礙,因為你不經常發送電子郵件。但是,如果你是垃圾郵件發送者,你正在嘗試一次性發送數千或數百萬封電子郵件,解決這些計算難題可能會變得令人望而卻步。一個類似的想法后來被亞歷山大(1997年)獨立發現,提出了一個名叫哈希凱什(Hashcash)的東西。
這些計算謎題需要具有一些特定的屬性才能成為有用的垃圾郵件威懾工具。首先,垃圾郵件發送者不可能解決一個謎題,卻將解決方案附加到他發送的每封電子郵件中。為了確保這一點,電子郵件中的謎題應該是特定的:它應該取決于發件人和接收者、電子郵件的內容以及發送的大致時間。其次,接收者應該能夠輕松地檢查拼圖解決方案,而無需重復解決難題的過程。第三,每個謎題應該完全獨立于其他謎題,在某種意義上,解決一個謎題并不會減少解決任何其他謎題所需的時間。最后,隨著時間的推移硬件在不斷改善,解決任何給定的計算難題會變得更快更便宜,接受者要能夠接受調整他們的謎題解決方案的難度。這些屬性可以通過使用加密哈希函數(Hash fuctions)設計謎題來實現,我們將在第1章中研究。
比特幣使用與Hashcash基本相同的計算難題,但有一些小的改進。比特幣比Hashcash做的還要多,畢竟Bitcoin需要一本書來解釋!我只提到這一點,因為Hashcash發明家亞當·本德(Adam Back)說:“比特幣是控制通貨膨脹的哈什凱什。”我認為這有一些夸張。這就像說:“特斯拉只是電池裝在輪子上一樣。”
就像密碼學中的其他好主意一樣,許多計算謎題旨在實現略微不同的屬性。一個來自Rivest和Shamir的提案,RSA密碼系統的R和S就來自于他們。請注意,在Hashcash的設計中,你解決一些難題的成本僅僅是個人成本的總和。這與政府造幣的成本結構不同。如果你考慮到紙幣的防偽技術,獲取所有設備,創建安全特性等方面都有巨大初始成本。但是一旦他們完成了所有這些工作,他們的成本就會下降,印制一張紙幣或一百張紙幣并沒有什么太大的區別。換句話說,鑄造紙幣具有巨大的固定成本,但邊際成本較低。Rivest和Shamir想要設計出可以模擬這些屬性的計算謎題,以便鑄造第一枚硬幣在計算上具有很大的挑戰性,但鑄造后續硬幣便宜得多。他們的提案也使用的哈希功能,但是以不同的方式。我們不會了解他們解決方案的細節,但他們試圖解決的問題在很大層次上是非常有趣的。
為什么Hashcash沒有達到防止垃圾郵件的預期目的呢?也許垃圾郵件只是一個不夠大的待解決問題。對于大多數人來說,垃圾郵件只是一個滋擾,而不值得他們花費他們的計算周期來打擊。我們今天的垃圾郵件過濾器可以很好地將垃圾郵件從我們的收件箱中刪除。也有可能Hashcash實際上不會阻止垃圾郵件發送者。特別是,大多數垃圾郵件發送者今天使用“僵尸網絡”發送他們的垃圾郵件,他們使用惡意軟件控制大量其他人的電腦。他們也可以用這些電腦來收獲Hashcash。也就是說,使用計算謎題來限制對資源的訪問仍然只是一個想法。你可以在一些替代網絡協議的建議中看到它,例如MinimaLT。
5.記錄分類帳中的所有內容
Bitcoin的另一個重要組成部分是區塊鏈:所有比特幣交易都被安全地記錄下來的分類帳。區塊鏈背后的想法相當古老,可以追溯到Haber和Stornetta在1991年的一篇論文中。他們提議的是一種安全時間戳的數字文檔,而不是數字貨幣計劃。時間戳的目的是給出一個文件大致產生時間的概念。更重要的是,時間戳準確地傳達了這些文檔的創建順序:如果在另一個文件之前存在,則將在時間戳上反映出來。安全屬性要求文檔在事后的時間戳不能更改。
在Haber和Stornetta的方案中,有一個將客戶文檔發送到時間戳的服務。當服務器接收到文檔時,它會將文檔與當前時間以及鏈接,還有指向上一個文檔的指針一起簽署,并發出帶有該信息的“證書”。這里所說的指針是一種特殊類型的指針,它指向的是一個數據而不是一個位置。這意味著,如果這里所說的數據發生更改,指針就會自動失效。在第1章中,我們將研究如何使用散列函數(Hash functions)創建這樣的指針。
這樣做是用每個文檔的證書確保前一個文檔內容的完整性。實際上,你可以遞歸地應用此參數:每個證書基本上修復了文檔和證書的全部歷史記錄直到這一點為止。如果我們假設系統中的每個客戶端至少記錄幾個證書——他們自己的文檔證書以及上一個和后續文檔的證書,那么所有參與者可以一起確保在事實之后不能更改歷史記錄。特別的是,文件的相對排序得到保留。
圖4:鏈接時間戳
要為文檔創建證書,時間戳服務器包括一個指向上一個文檔證書的哈希指針,當前時間,并將這三個數據元素簽名在一起。
后來的一篇文章對效率提出了一個改進:我們可以將它們收集到區塊中并將鏈接塊鏈接在一起,而不是單獨鏈接文檔。在每個塊中,文檔將再次以樹形結構鏈接在一起,而不是線性結合。這減少了驗證特定文檔出現在系統歷史記錄中某個特定點所需的檢查量。視覺上,這種混合方案如圖5所示。
圖5:有效鏈接時間戳。 箭頭表示散列指
我們將在第3章中看到,這個數據結構形成了比特幣區塊鏈的骨架。比特幣改進了一個微妙但重要的方式:使用Hashcash-esque協議來延遲新塊添加到鏈中的速度。此修改對Bitcoin的安全模型有著深遠而有利的影響。Bitcoin不再需要可信服務器;相反,事件由被稱為“礦工”的不可信節點集合記錄。每個礦工跟蹤塊,而不是依靠普通用戶來完成。任何人都可以通過解決計算謎題來創建塊成為礦工。比特幣也擺脫了簽名,只依靠散列指針(hash pointers)來確保數據結構的完整性。最后,實時的時間戳在比特幣中也并不重要,系統的亮點是以防篡改的方式記錄事務的相對順序。事實上,比特幣塊并不是按固定的時間表創建的。該系統確保平均每10分鐘創建一個新的區塊,但連續塊之間的時間有相當大的變化。
本質上,比特幣結合了計算謎題的想法來規范新貨幣單元的創造,并以安全的時間戳來記錄分類賬上的交易,同時防止雙花問題。早些時候,較不復雜的提案結合了這兩個想法。第一個叫做b-money,由魏代于1998年所創造。在b-money中,任何人都可以使用hashcash的系統來創造貨幣。同時有一個像比特幣一樣的對等網絡(p2p網絡)。每個節點都維護一個分類帳,但它并不是比特幣區塊鏈中的全局分類帳。每個節點都有自己的分類帳,它考慮的是每個人的平衡。
另一個叫做Bitgold的類似提案是由Nick Szabo創造的。Szabo說他早在1998年就有了Bitgold的想法,但直到2005年才開始共享出來。我之所以提到這一點,是因為有一個小陰謀論被紐約時報記者Nathaniel
Popper所宣傳,他寫了一本非常好的關于比特幣歷史的書。波佩爾指出,在Satoshi發布了Bitcoin白皮書之后,網志的時間戳已經改變,因此Bitgold的提案看起來像是在比特幣發布后大約兩個月寫的。波普爾和許多其他觀察家認為的那樣,Szabo可能就是Satoshi,他引用時間戳變化作為Szabo / Satoshi試圖掩蓋他在知道Bitcoin之前已經發明了Bitgold事實的證據。
這個解釋的問題是,如果你真的讀了博客的內容,Szabo在1998年是非常明確的有了這個想法,他不想去改變這些日期。因此,一個更合理的解釋是,在比特幣推廣了類似的想法后,他只是把這個帖子頂到了博客的頂端,以確保人們知道他先前的提案。
比特幣與b-money和Bitgold有幾個重要的區別。在這些提案中,計算謎題直接用于發行貨幣。任何人都可以解決一個謎題,解決方案是一個單位的錢本身。在比特幣中,謎題解決方案本身并不構成錢。它們被用來固定區塊鏈,且只能在有限的時間間接導致鑄幣。其次,b-money和Bitgold依靠在創建或轉移資金時簽署的時間戳服務。我們已經看到,比特幣不需要可信的時間戳,只是嘗試保留區塊和交易的相對順序。
最后,在b-money和Bitgold中,如果服務器或節點之間對分類帳有不同意見,則沒有明確的解決方法。在兩個作者的著作中,讓多數人作出決定似乎是含蓄的。但是,由于任何人都可以設置一個或多個隱藏在不同身份的節點——這些機制不是很安全,除非有一個集中的看門人控制著網絡的入口。相反,在比特幣中,攻擊者要改變歷史,他們必須以比其他參與者更快的速度解決計算謎題。這不僅更加安全,而且還量化了系統的安全性。
b-money和Bitgold是非正式的提案——b-money是郵寄名單上的一個帖子,Bitgold是一系列博客文章。既沒有起飛,甚至沒有實施開來。不像比特幣白皮書,他們沒有一個完整的規范或任何代碼。這些提案掩蓋了可能或不可能解決的問題。第一,正如我們已經提到的,如何解決分類帳的分歧。另一個問題是確定計算難題對于打造貨幣單位是多么困難。由于硬件在一定的計算能力下會隨著時間的推移而變得更加便宜,因此Bitcoin采用了一種周期性地自動調整謎題難度的機制。b-money和Bitgold不包括這樣的一種機制,這可能會導致問題,因為硬幣可能會變得非常容易地創建而失去價值。
6.中本聰的暗示
你可能會知道Satoshi Nakamoto是比特幣創始人采用的假名。雖然他的身份仍然是一個謎,他卻在比特幣的早期廣泛傳播。讓我們用這個來挖掘一些問題,比如當他開始創造比特幣時,他在多大程度上受到先前我們所看到的想法的影響,以及是什么激勵了他。
Satoshi說,他在2007年5月左右開始編碼比特幣。我選擇相信他,他是匿名的事實并不是他會說謊的理由。他于2008年8月注冊了http://bitcoin.org域名。當時他開始發送私人電子郵件給一些他認為可能對該提案感興趣的人。然后在2008年10月稍后,他公開發表了一份描述協議的白皮書,不久之后,他發布了比特幣的初始代碼。然后他在那里逗留了大約兩年,其間在論壇上張貼了大量的信息,給很多人發送了電子郵件,并回應了人們的關注。在編程方面,他提交了一些補丁。他與其他開發人員一起維護源代碼,并在出現問題時進行修復。2010年12月,其他人已經緩慢接管了項目的維護,然后他停止了與他們溝通。
我一直把Satoshi Nakamoto稱為“他”,但是我沒有理由相信Satoshi是個男人,而不是女人。我只是因為Satoshi是一個男性的名字而使用男性代詞。我也認為他是一個單身漢。有一種理論認為,Satoshi Nakamoto可能是一個個體的集合。我不買這個理論的帳——我覺得Satoshi可能只是一個人。原因是,如果我們考察Satoshi假名進行的所有在線互動,以及Satoshi回復電子郵件和修補代碼的兩年時間,很難想象這可能是多人共享用戶帳戶和密碼,以類似的風格和聲音作出回應,并確保彼此沒有矛盾。這似乎是一個更簡單的解釋,至少這部分Satoshi的活動是由一個人完成的。
此外,從他的著作和補丁中可以清楚地看出,這個個體理解了比特幣及其所有設計方面的全部基礎代碼。所以假設同一個人寫了原始代碼庫和白皮書是非常合理的。最后,Satoshi可能對原始設計有幫助。但是,在比特幣發布之后,我們可以看到Satoshi很快把他收到的其他人的任何幫助歸功于我們大家。如果他得到了別人的幫助,卻誤導我們是自己發明的東西,那就太不好了。
接下來,我們可能會問自己:“Satoshi對于ecash的歷史知道些什么?” 為了更好地理解這一點,我們可以先看看他在白皮書中引用的內容,以及早期版本的Bitcoin網站上的參考資料。在白皮書中,他引用了一些關于基本密碼學和概率論的論文。他還引用了我們早些時間看到的時間戳工作,因此認為他基于這些參考文獻進行區塊鏈設計是很自然的,因為他們是如此的相似。他還引用了Hashcash提案,其計算謎題與Bitcoin中使用的方案非常相似。他也提到了b-money。 后來,他在網站上還添加了對Bitgold的引用,以及Hal Finney的一個計劃來重用計算謎題的解決方案。
但是,如果看一看早期與Satoshi Nakamoto對應的人發布的電子郵件,我們發現B-money的提案實際上是按照Adam Back的建議添加的。Satoshi然后通過電子郵件與創建b-money的魏代聯系,顯然魏代是那個告訴他Bitgold的人。所以這些提案并不是來自原始設計的靈感。他后來和Hal Finney通信了很多,這對于他為什么引用Finney的作品至少在網站上是一個合理的解釋。
基于此,在創建比特幣時以下似乎是可信的:ecash歷史上的Hashcash和時間戳是Satoshi知道或認為唯一與比特幣相關的事。然而,在他了解b-money和Bitgold之后,他似乎更贊賞他們之間的相關性。2010年年中,維基百科上Bitcoin的文章被標記為維基百科編輯已刪除,因為他們認為這不值得一提。Satoshi和其他人之間有一些關于如何寫Bitcion的討論,以便維基百科接受它。為此,Satoshi提出了比特幣的這種描述:“比特幣是對1998年以魏代為主的Cypherpunk進行的b-money提案和Nick Szabo的Bitgold提案的實施。所以,Satoshi在這點上確實把Bitcoin定位為這兩個想法的延伸,或者作為對兩個現有系統有效解釋的一個很好的實施。
但是,其他的所有的呢——比如我們看過的Chaumian的ecash計劃和信用卡提案呢?在設計比特幣時,Satoshi是否知道任何關于這些的歷史呢?很難說,他沒有任何跡象表明知道這個歷史,但同樣可能因為他們與比特幣無關而沒有提到這一點。比特幣使用了完全不同的分散模型,所以沒有理由去關注那些失敗的舊集中式系統。
Satoshi自己就這樣做了,他在比特幣論壇上的一個帖子提到了Chaumian的ecash。在寫另一個名為http://opencoin.org的提案中,他指出,他們似乎是在談論舊的Chaumian中央造幣廠的東西,但也許只是因為這是唯一可用的。也許他們會對新的方向感興趣。許多人自動將電子貨幣視為失敗的,因為自1990年代以來所有的公司都失敗了。我想這很明顯,這些中心化系統的中央控制性注定了他們的結局。我認為這是我們第一次嘗試分散的、不信任的系統。這給了我們一個很好的了解Satoshi對早期提案的看法,特別是他是如何認為比特幣是不一同的。比特幣的分散化確實是一個定義的特征,這使它與我們所看到的幾乎所有的東西不同。
Satoshi的另一個有趣的引語表明,他可能不是一個學術界人士。大多數學術研究者在構建系統之前,會在思考想法時立即寫下來。Satoshi說他采取了相反的做法:“我其實使比特幣倒退了。在說服我自己可以解決所有問題之前,我必須寫下所有代碼,最后我才去寫這篇論文。我想我將能夠盡快發布代碼,而不是寫一個詳細的規范。”
由于Satoshi有一些神話,值得一提的是,他像其他人一樣犯了錯誤,在未來這不是一個完美的神話。在原始的比特幣代碼以及其設計中,存在著錯誤和可疑的設計選擇。例如,有一個功能可以將bitcoins發送到從未被抓取到的IP地址,回想起來,這真是一個壞主意。當他描述比特幣對什么有用的時候,他的腳本集中在互聯網上使用它的想法。這個場景當然是Bitcoin的核心,但它并不是唯一的。例如,他并沒有指出進入咖啡店的愿景,并且可以用比特幣支付咖啡。
最后一個問題我們會問自己,我們從數字貨幣的歷史中了解到的是有色的。“為什么Satoshi保持匿名?”,這有很多可能的原因。首先,這可能只是為了樂趣。許多人匿名寫小說,像Banksy這樣的涂鴉藝術家也保持匿名。事實上,在當時Satoshi參與的社區、Cypherpunk社區以及加密郵件列表中,人們常常以匿名方式發布。
另一方面,Satoshi的選擇可能會有法律上擔憂的考慮。兩家美國公司“Liberty
Reserve”和“e-Gold”都面臨洗錢的法律問題。2006年,自由儲備金的創始人之一逃離了美國,擔心他會因洗錢罪被起訴。另一方面,e-Gold的創始人則留在了美國,其中一人實際上被起訴,并最終對指控承擔了罪責。這些有罪的入獄恰恰在Satoshi設立比特幣網站,并開始向他人通過電子郵件發送他提案之前。也就是說,許多人發明了ecash系統,沒有人不害怕法律或選擇保持匿名的。所以這可能是原因,也可能不是。
這也是值得回憶的,ecash的某些方面獲得了專利,Cypherpunk運動的成員關心由于這些專利而實施ecash系統。事實上,cypherpunks郵件列表中的一個帖子提出,一組匿名編碼器實施ecash,以防如果有人要起訴,他們將無法找到編者。很難想象比特幣會因為設計有所不同而違反了ecash專利,但是Satoshi則更加謹慎。或者靈感只是來自cypherpunk社區的匿名編碼器的想法。
最后一個原因可能是人身安全。我們知道,Satoshi早期的礦業有很多比特幣,由于Bitcoin的成功,這些現在值很多錢。我認為這是一個合理的理由。畢竟,選擇匿名不是一次就能做出的決定,而是你一直在做的事情。也就是說,這可能不是Satoshi最原始原因。Satoshi第一次使用Satoshi Nakamoto,他甚至沒有發布白皮書或比特幣的代碼庫,很難想象他有什么想法會像現在一樣成功。事實上,在早期的許多時刻,Satoshi對Bitcoin的前景樂觀而謹慎。他似乎已經明白許多以前的努力失敗了,比特幣也可能會失敗。
7.結語
如果你認為所有失敗的企業都試圖做到這一點,比特幣的成功是非常了不起的。比特幣有幾個顯著的創新,包括區塊鏈和支持用戶之間的交易的分散式模型。它為用戶提供了實用但不完美的匿名級別。在第六章中,我們將詳細介紹比特幣的匿名性。在某種意義上,它比DigiCash中強大的匿名性弱,但在另一個意義上說它更強。那是因為在DigiCash中,只有這些錢的發送者才能保持匿名,而不是商人。比特幣給予發送者和商家(不管是用戶還是商戶)具有相同的匿名級別。
讓我最后總結一些我們可以從比特幣中學習的經驗教訓。第一個是面對困難不要放棄。僅僅因為人們在開發數字貨幣方面失敗了20年,并不意味著沒有一個系統能起作用。二是愿意妥協。如果你想要完美的匿名或完美的分權,你可能需要惡化你設計的其他領域。回過頭來看,比特幣似乎做出了正確的妥協。它縮小了匿名性,并要求參與者在線并連接到對等網絡(p2p網絡),但這被用戶認為是可以接受的。
最后一個教訓是通過數字獲得成功。比特幣能夠建立一個充滿激情的用戶社區,以及匯聚愿意為開源技術做出貢獻的開發人員。這是一種明顯不同于以往的數字現金嘗試,那些通常是由一家公司開發,唯一的技術倡導者是公司本身的雇員。比特幣當前的成功在很大程度上要歸因于充滿活力的支持社區,他們推動了這項技術,讓人們使用它,并讓商人采用它。
1.TMT觀察網遵循行業規范,任何轉載的稿件都會明確標注作者和來源;
2.TMT觀察網的原創文章,請轉載時務必注明文章作者和"來源:TMT觀察網",不尊重原創的行為TMT觀察網或將追究責任;
3.作者投稿可能會經TMT觀察網編輯修改或補充。