時間是一條因果鏈
極端一點,整個世界無非就是一張關係網而已。 ——Tim Berners-Lee,《編織萬維網》(1999)
偽造日期是一個普遍問題,並不僅僅存在於數字世界。例如,在綁架案中,綁匪就需要一種辦法來證實綁票發生的時間。
- 時間證明-
這個方法之所以可行,是因為報紙很難偽造,而且易於驗證。由於報紙頭版報導的都是前一天的事件,綁匪是不可能提前預知頭版新聞、並提前幾週就偽造好人質照片的。因此,照片中人質手持的報紙的發行日期就是人質在世的證明。
這個方法凸顯了一個重要概念:因果關係。時間箭頭反映了事件的因果關係。沒有因果關係,就無所謂時間。在賽博世界,哈希函數對於解決時間戳問題來說至關重要,因為它引入了因果關係。如果沒有某份文檔,我們就無法生成對應的密碼學哈希值,因此文檔和哈希值之間存在因果關係:先要有數據,而後才能生成(該數據對應的)哈希值。換言之,如果沒有單向函數的計算不可逆性,賽博世界中就不會存在因果關係。
- 先有A,才有B -
有了因果關係,我們就可以創建出一連串環環相扣的事件。因此,安全的數字時間戳方案得以為原本不存在時間的數字世界譜寫歷史。
因果關係決定了事件的時間順序。如果一個事件由之前的某些事件引發,並且引發了之後的某些事件,則該事件在歷史上的位置得以確定,不會再更改。 ——Bayer,Haber,Stornetta (1992)
毋庸置疑的是,因果關係對於經濟計算而言至關重要。鑑於賬本其實是多個合作方之間經濟計算的具象化,因果關係對於每個賬本而言同樣至關重要。
我們需要一個能讓所有參與者就唯一歷史記錄達成共識的系統…… 我們提出的解決方案基於時間戳服務器。 —— 中本聰(2009)
有趣的是,讓比特幣得以運作的所有組件其實早已存在。早在1991 年,Haber 和Stornetta 就介紹了兩種“可以有效防止時間戳造假” 的方案。一個是依賴於可信第三方的方案,另一個是更為複雜的“分佈式信任” 方案,無需依賴於可信第三方。兩位作者甚至發現了信任事件因果鏈背後的固有問題,以及重寫歷史所需的條件。換言之,“有可能成功做惡的唯一方法是,準備好一條足夠長的時間戳鏈,長到連最疑心最重的挑戰者都懷疑不了的地步。”如今,比特幣也存在一個類似的攻擊向量,即51% 攻擊(詳見下一節)。
一年後,Bayer、Haber 和Stornetta 在之前的研究基礎上提出使用“默克爾樹”,而非簡單的鍊錶將所有事件連接起來。默克爾樹是一種簡單高效的數據結構,可以根據多個哈希值計算出一個確定的哈希值。從時間戳的角度來看,這意味著一單位時間可以容納多個事件。另外,這三位作者還提議對他們在1991 年提出的分佈式信任模型進行改進,即,不斷舉辦“世界冠軍錦標賽” 來決定唯一的“獲勝者”,由獲勝者在(類似報紙這樣)公開的地方發布計算出的哈希值。聽起來是不是很熟悉?
我們可以看出,報紙是一個絕佳的例子,能讓我們更好地思考時間的第二個特性:不可預測性。
因果關係和不可預測性
時間不是現實(hupostasis),而是一種概念(noêma)或計量單位(metron)……—— 智者安提豐,《論真理》(公元三世紀)
因果關係雖然很重要,但是遠遠不夠。時間流逝還離不開不可預測性。在物理世界,我們通過觀察自然過程來描述時間的流逝。我們觀察到熵是在不斷增加的,並稱之為時間箭頭。儘管在大多數情況下,自然規律看似與時間箭頭無關,但是某些事情實際上是無法撤銷的。俗話說得好,破鏡難圓。
同樣地,數字世界也需要增熵函數來創建時間箭頭。 SHA256 哈希值和密碼學簽名並非絕對不可破解,但就像破鏡幾乎不可能重圓,SHA256 和密碼學簽名也幾乎不可破解。
如果沒有熵增,我們就可以任意更改時間戳。例如,斐波納契數字的順序具備因果關係,但不具有熵增特質。在斐波納契數列中,每個數字都是由前兩個數字相加得到的。因此,斐波納契數列是一條因果鏈。但是,斐波納契數列無法用來報時,因為它是完全可預測的。這就好比說,綁匪不能用人質和日曆的合影來證明人質還活著。我們不能使用可預測的東西作為時間證明,只能使用無法提前預測的事物,如,當日報紙的頭版。
比特幣的不可預測性是通過交易和工作量證明實現的。就像沒人能預測明天的報紙會刊登什麼內容,也沒人能預測下一個比特幣區塊長什麼樣。你無法預測區塊中會打包哪些交易,因為你無法預測未來將有哪些交易被廣播。更重要的是,你無法預測誰會解開當前的工作量證明難題,以及得出的解是什麼。
不同於報紙,工作量證明直接 與已經發生的事件聯繫起來。工作量證明不僅僅是事件的記錄,而且是事件本身。正是這種基於概率的直接聯繫免去了工作量證明的信任需求。找到有效工作量證明的唯一方法是做出大量猜測,每次猜測都要花費少量時間。每找到一個解所需要的猜測次數是概率性的,從而構成比特幣的時間鏈。
利用哈希鏈的因果順序和工作量證明的不可預測性,比特幣網絡提供了一種機制,可以創建無爭議的事件歷史。如果沒有因果關係,我們就無法區分事件先後。如果沒有不可預測性,因果順序就毫無意義。
關於上文提到的綁匪的做法,其實Bayer、Haber 和Stornetta 早在1992 年就給出了明確解釋:“如果要確定某個文檔是在某個時間之後創建的,該文檔必須記錄已經發生但無法提前預料的事件。”
- 出版證明-
正是因果關係和不可預測性的結合,我們才能在原本沒有時間概念的數字世界中人為定義“現在”。正如Bayer、Haber 和Stornetta 在1991 年的論文中指出:“請求時間戳的客戶端的順序以及它們所提交的哈希值是無法預知的。因此,如果我們在簽名證書中包含之前客戶端請求序列的比特,就知道證書的時間戳晚於這些請求……證書中必須包括之前文檔的比特這一要求也可以從另一個方向指明時間的先後,因為時間戳機構無法預先發行證書,除非它擁有此時此刻的請求。”
所有組件都在這裡了。中本聰的高明之處在於將這些組件全都組合到了一起,從而免去對時間戳機構的需求。
時間證明
原因雖被深藏,結果卻已知曉。 —— 奧維德,《變形記》(公元8 年)
讓我們來概括一下:要想在數字世界花錢,我們必須依靠賬本。要想賬本變得可靠,我們必須明確交易順序。要想明確順序,我們必須使用時間戳。因此,如果我們想要在數字世界創造出免信任貨幣,我們必須移除任何創建並管理時間戳的實體,以及負責計時的單一實體。
天才如中本聰找到了解決方案:“為了實現點對點的分佈式時間戳服務器,我們需要使用工作量證明系統,類似於Adam Back 提出的哈希現金(Hashcash)。”
我們之所以需要使用工作量證明系統,是因為我們需要數字世界原生的東西。一旦你了解數字世界的本質是信息化的,那麼顯而易見的是,計算就是我們擁有的一切。如果你的世界是由數據組成的,就會存在數據操縱。
工作量證明是一種點對點機制,因為它無需信任。工作量證明之所以具備免信任性,是因為它與所有外部輸入(如,時鐘或報紙)隔絕。它只依賴於一樣東西:計算離不開工作量的投入。在我們的世界裡,產生工作量需要投入能源和時間。
通往時間的橋樑
我知道我已著魔。我們跑過橋—— 熊熊燃燒的橋——火焰在身後肆虐,我們站在死亡邊緣,親愛的,你我正與世界為敵。 —— Kate Bush,《燃燒的橋》(1985)
如果沒有工作量證明,我們必然會遇到信息輸入機制問題,因為物理世界和信息世界永遠有隔閡。牧羊人數羊時在列表上做的標記並不是真正的羊,地圖不能與真正的領土相提並論,報紙上的新聞也不一定是真實發生的事件。同理,即使你使用現實世界的時鐘來創建時間戳,也並不代表實際時間就是如此。
坦白來說,我們無法相信數據代表了現實,除非是數據本身所固有的現實。比特幣的難度可調節型工作量證明的高明之處在於,它創造了自己的現實,以及空間和時間。
工作量證明能夠將數字世界和物理世界直接聯繫起來。只有這種連接是以免信任方式建立的。其它一切都依賴於外部輸入。
比特幣的出塊難度是會調整的,從而維持比特幣時間與人類時間之間的聯繫。就像發條一樣,每挖出2016 個區塊,比特幣系統就會重新調整挖礦難度。難度調整旨在將平均出塊時間控制在10 分鐘,從而在物理世界和信息世界之間建立穩定的聯繫。因此,比特幣時鐘的走時需要根據人類的時間感知重新調整。純粹基於時鐘的難度調整是不可行的,因為這會將比特幣與人類世界完全割裂。難度調整的目的就是防止人們的出塊速度太快(或太慢)。
正如愛因斯坦告訴我們的那樣,時間不是絕對的。沒有什麼所謂的宇宙時間。時間是相對的,同時性並不存在。僅憑這一事實,所有時間戳(尤其是跨越了遙遠空間的)本質上都是不可靠的,即使參與者之間不存在對立也是如此。 (順帶一提,這就是為什麼GPS 衛星的時間戳必須不斷調整。)
對於比特幣來說,人類時間戳並不精確這一事實不是很重要。一開始就沒有絕對的參考係也不重要。時間戳的精確程度只需讓以2016 個區塊為基數計算得出的出塊時間足夠可靠,即可。為了保證這一點,只有在滿足以下兩個標準的情況下,一個區塊的“物理世界” 時間戳才會被接受:
該時間戳必須大於之前11 個區塊的時間戳中位數。該時間戳必須小於網絡調整時間加兩小時。 (“網絡調整時間” 就是與你連接的所有節點返回的時間戳的中位數。)
換言之,難度調整就是保持時間恆定,而非 安全性、難度或能源消耗量恆定。該設計頗具獨創性,因為良幣 必須 具備很高的時間成本,而非能源成本。如果貨幣只與能源關聯,並不足以產生絕對的稀缺性,因為一旦能源生產技術有了改進,我們就能創造出更多貨幣。時間是唯一一個無法再生的東西。正如Julian Simon 所言,時間是終極資源。正因如此,比特幣成了貨幣的終極形態,因為比特幣的發行量與宇宙的終極資源(時間)直接相關。
難度調整至關重要。如果沒有難度調整,隨著越來越多礦工加入網絡,或礦機效率提高,比特幣的內部時鐘就會越走越快。我們很快就會遇到協調問題。一旦出塊時間降到某個閾值(如50 毫秒)以下,系統就無法對某個共享狀態達成共識,即使在理論上也是如此。光從地球的一側到達另一側需要大約66 毫秒。因此,即使我們的電腦和路由器是完美的,我們也會束手無策:面對兩個事件,將無法斷言其先後順序。如果我們不對比特幣的出塊時間進行週期性調整,就會陷入絕境—— 必須以超越光速的速度解決協調問題。時間也是導緻密碼學不穩定性問題的根源(詳見第一章)。密碼學之所以能發揮作用,是因為利用了時間的不對稱性:建起一道密碼學牆壁只需要一瞬間,打破它卻需要很久,除非你有密鑰。
因此,從某種意義上來說,工作量證明以及難度調整都是在人為放慢時間,至少從比特幣網絡的角度來看是這樣。換言之,比特幣是在強行控制內部節奏,通過低頻率為對等節點之間的通信延遲提供充足的緩衝空間。每挖出2016 個區塊,比特幣的內部時鐘都會重新調整。因此,平均每10 分鐘只會挖出一個有效區塊。
從外部角度來看,比特幣就是將在全球廣播的異步消息集中到一個平行宇宙中。這個平行宇宙有自己的規則,以及時空觀。從比特幣網絡的角度來看,交易池中的交易是沒有時間屬性的。只有被打包進有效區塊的交易才會被賦予時間:該交易所在區塊的編號。
- BitCoin v0.01 ALPHA (2009) -
這個解決方案之精妙已經無以言表。一旦你能夠自行定義時間,就可以輕鬆辨別事件的先後順序。因此,人們也可以輕而易舉地在發生了什麼、按照什麼順序,以及誰欠誰什麼等問題上達成共識。
難度調整可以確保比特幣的內部節拍器打出的拍子是恆定的。它是比特幣這支樂團的指揮,可以讓音樂永葆鮮活。
但是,憑什麼認為,“工作量” 是一個最終值得依賴的東西呢?答案有三重。首先,因為計算需要投入工作量;產生工作量需要花費時間;而在我們這裡,工作—— 猜測隨機數—— 是無法取巧的。
基於概率的時間
時間無休止地生出岔路,通往無數個未來。 ——博爾赫斯,《小徑分叉的花園》(1958)
為比特幣區塊找到有效的nonce 就是一場猜謎遊戲,類似於擲骰子、拋硬幣或輪盤賭。本質上,你是在尋找一個天文數字。每一次猜測都不會讓你更接近答案。要么猜中,要么重來。
每次你拋硬幣,拋中正反面的概率都是50% —— 哪怕你之前拋了20 次,次次都是正面朝上。同樣地,在比特幣挖礦過程中,每一秒出現一個有效區塊的概率都是0.16% 左右。上個區塊是什麼時候找到的並不重要。找到下個區塊之前需要等待的時間永遠都一樣:10 分鐘左右。
因此,比特幣時鐘的每一次“嘀嗒” 都是不可預測的。相比我們人類使用的時鐘,比特幣時鐘似乎是粗糙且不准確的。正如Gregory Trubetskoy 所言:“這個時鐘是否準確並不重要。重要的是,每個人的時鐘都相同,並且整條鏈的狀態與時鐘的走時明確關聯。”雖然比特幣的時鐘是基於概率的,但它不是一種幻覺。
時間是一種幻覺。午餐時間尤其如此。 —— 道格拉斯•亞當斯,《銀河系漫遊指南》(1979)
然而,在比特幣系統中,“現在” 絕對是一種幻覺。由於網絡中沒有中央機構,可能會有奇怪的情況出現。雖然不太可能,但是萬一有兩個人同時找到有效區塊呢? (再次向所有物理學家致歉。)也就是說,兩個不同位置的時鐘同時嘀嗒了一聲。這兩個區塊的內容很可能不同。它們雖包含不同的歷史,但都同樣有效。
這就是所謂的鏈分裂(chain split),是中本聰共識在運行中自然而然會出現的一種情形。就像遷徙中的鳥群,時而分成兩列,時而合在一起。經過一段時間之後,比特幣網絡中的節點最終會形成一個共享的歷史,這得益於猜測所帶來的概率性。
中本聰共識只是簡單地要求,正確的歷史在最重的鏈(即,包含最多工作量證明的鏈)上。因此,如果我們有A 和B 兩個歷史,有些礦工會在A 上續寫歷史,有些礦工會在B 上續寫歷史。一旦某一方的礦工找到了下一個有效區塊,另一方的礦工就會接受自己是在錯誤的歷史上挖礦,並轉向最重的鏈(根據定義,就是代表實際發生的事件的鏈)。在比特幣中,歷史是由勝利者書寫的。
收款人需要有證據能夠證明,每筆交易發生時,絕大多數節點認同它們最先收到了該交易……當同一筆交易存在多個支付對象時,只有一個是有效的。收款人必須等待一小時左右,然後才能相信這個交易是有效的。屆時,網絡就能解決一切有可能發生的多重花費競賽。 —— 中本聰(2009)
上面段話揭開了分佈式協調問題的秘密。中本聰就是通過這種方式解決了上文提到的“同時付款” 問題,而且是一勞永逸地。讓相對論見鬼去吧!
由於比特幣時鐘具有概率性,“現在”(我們稱之為鏈頂端)永遠是不確定的。過去(鏈頂端以下的區塊)永遠是確定的。
若想理解得更深入,我們必須追溯到更早的時間。 ——Gordon Clark,《從基督教的角度理解人與物》(1951)
因此,對於某些對等節點來說,比特幣時鐘有時會倒退一兩下。如果你的鏈頂端(現在)恰好輸給了另一個鏈頂端,你的時鐘就會先倒退再前進,覆蓋你原先以為正確的歷史。如果你的時鐘具有概率性,你對歷史的記憶也不得不如此。
嘀嗒嘀嗒—— 幾點了?嘀嗒嘀嗒…… 停在了c619。真是這樣嗎?會不會慢了?管它準不准:8 在9 前不會錯。這個鐘不准,有時倒著走。準時才有鬼,中心化要不得!這個鐘在嘀嗒,嘀嗒复嘀嗒,使壞也沒好處,嘀嗒到下個區塊。 ——一首關於比特幣和時間的小詩(2020)
總結
時間依然是物理學最大的謎題之一,甚至引起了人們對物理學本身定義的質疑。 ——Jorge Cham 和Daniel Whiteson,《我們一無所知:通往未知宇宙的指南》(2017)
追踪信息世界的事物就意味著追踪一系列事件,因此需要追踪時間。追踪時間需要就“現在(永遠連接過去和將來的時間點)” 達成共識。在比特幣系統中,“現在” 是最重工作量證明鏈的端點。
對於時間結構來說,最重要的兩個組成部分是:因果關係和不可預測事件。因果關係用來定義過去,不可預測事件用來構建未來。如果事件順序是可預測的,就有可能跳過。如果每個事件之間沒有聯繫,要改變過去就很容易。由於比特幣系統定義了內部時間,作假難度極高。如果有人想作假,必須改寫過去或預見未來。比特幣的時間鏈可以有效防止這兩點。
如果從時間角度來看待比特幣,我們就應該清楚,“區塊鏈(通過因果關係將多個事件連接起來的數據結構)”並非主要創新,甚至不是什麼新想法。只要研究過前人關於時間戳的文獻,我們就能發現這點。
區塊鏈,就只是數據塊組成的鏈條而已。 —— Peter Todd
中本聰的創新之處在於,各方如何在沒有中心化協調的情況下獨立就事件歷史達成共識。中本聰找到了一種實現去中心化時間戳機制的方法。該機制(a)不依賴於時間戳機構或服務器,(b)不需要報紙或其它任何物理媒介作為證據,(c)可以確保走時節奏基本不變,即使是在CPU 時鐘時間更快的環境中運行也是如此。
計時需要 因果關係、不可預測性 和協調性。在比特幣中,因果關係由單向函數提供,即,位於比特幣協議核心的密碼學哈希函數和數字簽名。不可預測性是通過工作量證明難題和節點交互實現的:你無法提前預知其它節點在幹什麼,你也無法提前預知工作量證明難題的解。協調性是通過難度調整實現的,秘訣就是將比特幣時間與人類時間聯繫起來。只有將物理世界和信息世界連接起來,我們才能只依賴於數據在時間上達成共識。
比特幣是時間不只體現在一方面。比特幣的最小單位satoshi 是時間,因為它是貨幣;比特幣的網絡也是時間,因為它是一個去中心化時鐘。正是因為比特幣時鐘孜孜不倦地轉動,比特幣才能具備這些神奇的特性。否則,整個比特幣系統就會分崩離析。也正因如此,這一鬼斧神工般的互聯網貨幣才能惠及所有人。
(完)
原文鏈接:
https://www.swanbitcoin.com/bitcoin-is-time/
作者: Gigi
翻譯&校對:
閔敏& 阿劍