要實現電子現金,第一件事是要能夠確定「現金」的所有權。線上下這種識別很容易,誰拿著那張錢,那張錢就是誰的;但線上上沒有實體貨幣,這種方法顯然不行,因此比特幣透過「數字簽名」識別所有權,該方式與雅浦島上確認貨幣所有權的方式有幾分相似之處。
太平洋的雅浦島上沒有金屬資源,島上的居民從距離該島 400 英里的帛琉島上開採石灰岩,再把石頭運回小島作為貨幣使用。買賣雙方在交易中決定買家使用多大的石幣付費,如果那塊石頭太大,那麼收款人只需要在付款人的石頭上做個標記,就可以把這塊石頭的所有權轉移給自己,雖然石頭可能依然放在付款人的家中。
比特幣在網路中的存在形式是一個數字簽名鏈。交易時,原所有者在該數字簽名鏈的末尾加上新所有者的公鑰(實際是公鑰的雜湊),就完成了比特幣所有權的轉移,就像雅浦島人在石幣上做個標記 / 簽名就完成了石頭所有權的轉移一樣。
也就是說,比特幣數字簽名鏈上最新的公鑰是屬於誰的(擁有與公鑰對應的私鑰),這筆「電子現金」就是誰的。
3. 電子現金的雙重支付問題
在實現了電子現金的所有權後,接下來需要解決的問題就是雙重支付(或稱為「雙花」)的問題。這或許是設計電子現金時最核心、也最難解決的問題。
讓我們回到現金,透過對比找出電子現金為什麼會面臨雙重支付問題,以及可以如何去解決該問題。
在使用現金支付時,我們把一張錢先給了誰,那張錢就是誰的,因此我們無法花費同一張錢兩次,抽象理解的話就是,我們用時間確定支付事件發生的先後次序,並只認可先發生的那筆支付。
與現金支付相同的是,在分散式網路中,我們同樣只認可最早發生的那筆交易。與現金支付不同的是,在分散式的網路中,我們無法透過時間確定交易發生的順序,因為網路的參與者們並未對時間達成共識。最簡單的例子,一臺計算機認為時間是上午 9:01,另一臺計算機可以認為時間是上午 9:02,物理時間是行不通的。
中本聰選擇的方法是透過時間戳,實現參與者在時間上的共識,從而使得系統能使用這種時間共識確定事件發生的順序。
時間戳功能是比特幣的核心,以至於中本聰稱比特幣系統是一個「分散式的安全的時間戳伺服器」。
我們也許可以這麼去理解時間戳:在現實世界中,一秒就是一秒,每一秒與另一秒的長短是完全相同的,一秒接著一秒構成時間的順序;在比特幣系統中,「一秒」就是一個時間戳,如果用物理時間衡量,每一秒的長短是由一個新區塊被挖出來的時間決定的,大約等於 10 分鐘,每一秒與另一秒的長短各不相同。但如果用比特幣時間衡量,可以認為每一秒與另一秒並無區別,一秒接著一秒(每一個新的時間戳被新增到之前的時間戳之後)構成一個連貫的時間的順序。
交易被打包進區塊,區塊被蓋上時間戳,也就相當於每筆交易都有唯一確定的發生「時間」,節點在處理新的交易時,會去檢查這筆交易對應的「電子現金」在當下的時間之前有沒有被花費過,如果沒有,就接受這筆交易,併為它打上時間戳(確定發生的時間);如果被花費過,就拒絕這筆交易。如此一來,「電子現金」的雙重支付問題就得到了解決。
在一個分散式系統中,誰來蓋時間戳,或者說誰來決定上一秒的時間結束了,接下來進入到下一秒?透過工作量證明(PoW),誰能搶先算出落在某個區間內的雜湊數值,誰就能蓋時間戳。
這個時間戳如何獲得共識?最長鏈原則,最長鏈代表的是大多數(大多數算力)的決定。工作量證明加上最長鏈原則也被稱為中本聰共識,共識是所有區塊鏈系統最核心的部分,它的本質是為了實現分散式的時間戳服務。
當所有權問題和雙重支付問題都得到解決之後,我們就有了一種可以在網路中使用的電子現金,它使得線上支付可以從一方直接傳送給另一方,而無需透過金融機構。中本聰把他實現的這種系統稱為比特幣。
二、八個依然散發智慧光芒的中本聰問答
中本聰在郵件列表和 bitcointalk 論壇中回覆了許多關於比特幣的問題,他對自己的答案很有信心,他認為這些問題幾乎都是他在設計系統前就已經考慮到了的。多年之後,這些回答讀起來依然散發著智慧的光芒。
我們選擇了那些放到今天依然有意義的問答,並歸納整理如下。
1. 挖礦是不是浪費能源?
中本聰回覆:這和黃金開採相似。黃金開採的成本與黃金的價格水平是一致的,開採是一種浪費,但這種浪費遠少於黃金作為交換媒介所產生的效用。比特幣也一樣,把比特幣用於交換媒介所產生的效用遠遠高於挖比特幣需要的電力。
2. 比特幣的價格模型是可持續的嗎?
中本聰回覆:當比特幣還沒有在市場上確立價格之前,基於生產成本的估值模型是有意義的,任何商品的價格都趨向於生產成本。但是在幾年以後,當新挖出來的比特幣只佔供應量很小一部分的時候,將會是比特幣的價格決定生產成本,而不是反過來。NLS (一位社羣成員)的基於能源消耗的估值模型是一個很好的起點。但在未來,市場力量將是決定比特幣價格的主要因素。
3. 如果「壞人」比「好人」有更多的算力怎麼辦?
中本聰回覆:這首先要求單個「壞人」的算力比所有「好人」的算力之和更大;其次,即使單個「壞人」的算力更大,他能做的只是雙花自己的錢,他需要透過買東西花費這筆錢(如今可以是在交易所交易),然後在收到「貨物」之後,透過攻擊網路重新花費這筆錢。這種攻擊對於攻擊者來說或許並不划算,如果有這種算力還不如好好的挖礦。
4. 比特幣是匿名的嗎?
中本聰回覆:比特幣的匿名性取決於比特幣地址是否關聯了使用者的個人資訊。如果沒有,那麼就是匿名的,因為比特幣地址是一串隨機數字,它本身是不包含識別資訊的。為了保護隱私,每個比特幣地址最好只使用一次。
5. 比特幣網路可以傳送「私人資訊」嗎?訊息加密是比特幣的內建功能嗎?
中本聰回覆:全世界都可以看到這條訊息,它是完全公開的。因為 ECDSA 只能用於數字簽名,不能用於訊息加密。RSA (比特幣並未使用該演算法)可以用於訊息加密,但它的資料量太大了,不管是對儲存空間還是對頻寬的要求都比 ECDSA 大一個量級,使用 RSA 是不合適的。
永久記錄一條所有人都可以看到的訊息是不明智的。如果需要訊息系統,它應該是一個與比特幣網路平行的獨立系統,訊息不應該被記錄在區塊鏈上。可以用比特幣金鑰對給訊息簽名,以證明訊息的來源。
6. SHA-256 被攻破了怎麼辦?(此問題類似於量子計算來了怎麼辦)
中本聰回覆:SHA-256 非常難以被破解,即使被破解了,我們可以在麻煩到來之前就有序地用新的演算法替換掉它。
7. 比特幣的可分割性好嗎?
中本聰回覆:比特幣顯示為 1.00,但它實際上包含 8 個小數位,是 1.00000000。
8. 那些找不回私鑰的丟失了的比特幣怎麼辦?
中本聰回覆:這些比特幣只會讓其他人的比特幣更值錢,可以把它看作是對所有人的捐贈。
三、重回最開始的地方
人們對比特幣的解讀有很多,對區塊鏈的解讀以及由此延伸開來的關於區塊鏈能做什麼的論點則更多。但如果你想從源頭出發認識比特幣、認識區塊鏈,下邊是還不錯的旅程開始的地方。
看上去最遠的路,也許是最快的路。
1. 比特幣白皮書:
https://bitcoin.org/bitcoin.pdf
2. 中本聰在郵件列表發表過的所有言論:
https://satoshi.nakamotoinstitute.org/emails
3. 中本聰在 bitcointalk 發表過的所有言論:
https://bitcointalk.org/index.php?action=profile;u=3;sa=showPosts
4. 與比特幣相關的重要文獻資料:
https://nakamotoinstitute.org/literature