比特幣的核心技術,區塊鏈的原理與應用(上):比黃金還貴的比特幣

作者 | 發布日期 2017 年 05 月 11 日 14:28 | 分類 Fintech , 科技教育 , 財經 follow us in feedly

上週比特幣直逼空前 1,500 美元,如果我們把每 1 比特幣對照每 1 盎司黃金,則比特幣比黃金還要貴了大約 200 美元,真的是大勝黃金,雖然這樣的對比有點奇怪,但是所有的媒體都是這麼形容的,誕生才 8 年的比特幣坐實了「數位黃金」之名,價值已超越貨幣史中地位悠久的黃金。每次聽到比特幣,總會提到區塊鏈,到底什麼是比特幣(Bitcoin)?什麼又是區塊鏈(Block chain)?區塊鏈是「區塊」(Block)了什麼?又「鏈」(Chain)了什麼呢?



比特幣的起源

比特幣的發明人 Satoshi(筆名,實姓名目前尚無定論)在 2008 年發表了一篇名為《比特幣:一種點對點電子現金系統》(Bitcoin: A Peer-to-Peer Electronic Cash System)的論文,提出了稱為「比特幣」的電子貨幣及其演算法,由於比特幣不適合即時大量的小額交易,而且比特幣在法規上存有疑義難以被主管機關接受,因此有人將比特幣的部分技術抽離出來尋找新的應用,並且取了新名字「區塊鏈」(Block chain),這是區塊鏈這個名稱的由來。由於區塊鏈這個名稱是源自於比特幣,因此要了解什麼是區塊鏈,就必須先從什麼是比特幣談起。

假設 Satoshi 創造比特幣(BTC:Bitcoin)與比特幣帳本(BTC ledger)並且給自己 50btc,他想要用 20btc 向 Alice 買一本書,並且記錄在比特幣帳本內,如圖一所示,Alice 第一次聽過有這種東西,她好奇的問 Satoshi:這個叫什麼幣的聽起來好酷,但是我要怎麼用它來和別人買東西呢?

▲ 圖一:Satoshi 創造比特幣與比特幣帳本,並且向 Alice 買一本書。(Source:杜宏毅,《Block Chain 的前世今生與未來》,台灣網路認證公司。[Icon made by Freepik from flaticon])

Satoshi 告訴 Alice:這個很簡單,妳可以用同樣的方法,支付 Bob 金額 10btc 買一顆蘋果,並且也記錄在我的比特幣帳本內,如圖二所示。既然比特幣真的可以買到東西,因此 Alice 很開心的收下了這種第一次聽過的虛擬貨幣。

▲ 圖二:Alice 支付 Bob 金額 10btc 買一顆蘋果。(Source:杜宏毅,《Block Chain 的前世今生與未來》,台灣網路認證公司。[Icon made by Freepik from flaticon])

後來 Alice 與 Bob 想想,不對呀!我們彼此之間的交易帳本都儲存在 Satoshi 的電腦裡,都是他說了算,我們有什麼保障呢?聽到了這樣的質疑,Satoshi 說:沒關係,那我把比特幣帳本複製給你們,如圖三所示,讓你們手上也有一份,這樣就可以了吧!

▲ 圖三:Satoshi 把比特幣帳本複製給 Alice 和 Bob。(Source:杜宏毅,《Block Chain 的前世今生與未來》,台灣網路認證公司。[Icon made by Freepik from flaticon])

但是這樣真的就沒有問題了嗎?

  1. 將比特幣帳本複製給所有使用者,那電腦記憶體要多少才夠?
  2. 每一筆交易都要通知所有使用者,那網路的反應夠快嗎?
  3. 使用者未必熟悉電腦操作,如何使用電腦進行交易?

比特幣的運作方式

為了解決最後的幾個問題,Satoshi 用這樣的方式來解決,如圖四所示:

  1. 由 Satoshi 發起建位第一個節點(Node),節點指的是在伺服器(Server)內安裝「節點軟體」(Node software)與「比特幣帳本」(BTC ledger)。
  2. 號召網際網路上熟悉電腦操作的自願者在世界各地建立節點,同時在伺服器內安裝節點軟體與比特幣帳本。
  3. 節點與節點之間經由「點對點網路連線」(Peer to peer network connection)軟體進行資料交換。
  4. 使用者安裝手機應用程式(App)「比特幣電子錢包」(BTC wallet),並且以手機付款與收款,使用非常簡單。
  5. 手機應用程式將交易內容回傳至節點,節點再將交易內容「溢散傳遞」(Propagating)給所有的節點。

▲ 圖四:比特幣的運作方式。(Source:杜宏毅,《Block Chain 的前世今生與未來》,台灣網路認證公司。[Icon made by Freepik from flaticon])

因此在比特幣的生態系裡,所有的節點是由網際網路上熟悉電腦操作的自願者在世界各地建立,節點指的是在伺服器內安裝「節點軟體」與「比特幣帳本」;使用者安裝手機應用程式「比特幣電子錢包」,並且以手機付款與收款,資料經由網路傳送給節點,再以溢散傳遞的方式傳遞給所有的節點,最後使全世界的節點內比特幣帳本是同步的。

比特幣與現有銀行體系的差異

如果我們將比特幣的生態系比喻為現在的銀行體系,那網際網路上的節點就好像各家銀行的分行一樣,唯一的不同是在目前的銀行體系裡,世界各國都有中央銀行來管理各家銀行,屬於「集中式拓樸」(Centralized topology),而比特幣的生態系沒有中央銀行這樣的角色,而是由分散在世界各地的節點互相溝通自主管理,屬於「分散式拓樸」(Distributed topology),也有人稱為「非集中式拓樸」(Decentralized topology)。

其實我們靜下來想想,如果世界上真的有一個大帳本可以記錄每一個人所有的資產與每一筆交易,而且大家都信任這個帳本,我們平常使用的紙紗根本就是多餘的東西,其實現在我們常用的悠遊卡、Apple Pay 這種電子貨幣就可以取代紙紗,唯一的不同是目前我們所使用的電子貨幣仍然是在現有的銀行體系裡運作,中央銀行與各家銀行仍然是主角,屬於集中式拓樸,與比特幣的分散式拓樸不同,這是兩者之間最大的差異。

【參考資料】網路的拓樸是區塊鏈很重要的特色,有興趣的人可以參考《知識力專家社群:網路拓撲(Network topology)》

比特幣的問題

前面的方法看起似乎可行,但是仍然隱藏了許多問題,例如:

  1. Alice 支付 Bob 金額 10btc 購買一顆蘋果,我們如何確認這個購買的訊息真的是 Alice 發送出來的?另外,如果隔天 Alice 後悔了,否認她曾經做過這件事怎麼辦?最常發生這種事情的就是早期投資人經由電話向證券公司的營業員下單買股票,結果收盤股票跌了,這個時候投資人否認曾經打過這通電話,為了解決這個問題,證券公司只有用電話錄音,但是在虛疑的電子世界裡沒辦法錄音,那麼要用什麼方法讓「使用者不可否認」呢?
  2. 比特幣帳本是儲存在網路上熟悉電腦操作的自願者所架設的節點(伺服器)內,這是很重要的東西,就好像銀行裡的帳本一樣,這麼重要的東西,我們如何信任這些熟悉電腦操作的自願者不會去篡改呢?
  3. 比特幣的節點是散布在整個網路的世界裡,當使用者進行交易改變了某一個節點的比特幣帳本,必須把這個改變通知散布在世界各地的節點,要如何把這個改變通知散布在世界各地的節點呢?

比特幣的三大特性

上面提到的 3 個問題,也就是比特幣的三大特性,我們簡單說明如下:

  1. 交易識別確認:使用公開金鑰驗證機制,確認這筆交易的真實性,使用者不可否認,而且是屬於「可驗證的匿名制」,保留貨幣交易的特性。
  2. 資料無法篡改:使用「區塊」與「鏈結」確保交易資料無法篡改。其中「區塊」主要是利用計算「條件雜湊」(Conditional hash)很不容易來保護資料,而「鏈結」主要是區塊與區塊之間利用「前區塊雜湊」(Previousblockhash)鏈結起來,由於篡改區塊內的交易資料已經很困難,區塊與區塊之間又被鏈結起來,等於篡改一個區塊要把所有的區塊都一起篡改,因此在合理的時間內根本不可能。
  3. 節點資料同步:使用「工作量證明」(POW:Proof of Work)達成收斂同步,由於比特幣使用「分散式拓樸」,因此保留總困難指數高的分支,刪除困難指數低的分支最後達成節點資料同步。

由於比特幣不適合即時大量的小額交易,而且在法規上存有疑義難以被主管機關接受,因此有人將比特幣的部分技術(主要是保護資料無法篡改的技術)抽離出來尋找新的應用,並且取了新名字「區塊鏈」,也有人擴大區塊鏈的定義,把前面提到的交易識別確認、資料無法篡改、節點資料同步 3 種技術統稱為「區塊鏈」。所以到底這 3 種技術的是怎麼做的呢?請參考區塊鏈的原理與應用(下):顛覆金融產業的創新技術

(首圖來源:Flickr/Jason Benjamin CC BY 2.0)