技術探索

從容錯的角度看區塊鏈技術

工研院資通所所長 闕志克

比特幣(Bitcoin)是一種由Satoshi Nakamoto(譯為中本聰或中本哲史)於2008年10月31日公諸於世的新興虛擬貨幣,和其他虛擬貨幣最大的不同之處在於參與比特幣系統運作之參與者毋須提供實名,而且他們之間也不必存有任何事先建立的信賴關係。虛擬貨幣系統中最重要的技術挑戰是如何防止同一虛擬貨幣被花費超過一次 (double spending problem)。為了有效解決這個問題,Satoshi Nakamoto發明了一種分散式帳本 (distributed ledger)技術叫作區塊鏈 (blockchain)來防止已被寫入帳本之虛擬貨幣使用紀錄被惡意竄改。然而,區塊鏈這種能夠在毋需中控或互信機制下防止資料竄改的能力,似乎也可以應用在其他金融或非金融的領域,因而觸發這一波區塊鏈的熱潮。

最大挑戰:如何建立共識且防惡意攻擊

一言以蔽之,區塊鏈是一個能夠抵擋惡意攻擊的點對點分散式資料庫管理系統。區塊鏈只允許新的資料區塊的加入,但不允許舊的資料區塊的直接變更,改變既存區塊內資料紀錄的唯一辦法就是產生一版新的資料紀錄,然後將其加入最新區塊。

顧名思義,區塊鏈把資料紀錄(data record)組成一個一個區塊(block),然後為每個區塊算出一個特徵值(fingerprint),最後把這些區塊用他們的特徵值串聯成一條線性鏈(linear chain)。因為第N個區塊的特徵值是由第N個區塊的內容和第N-1個區塊的特徵值所產生,所以第N個區塊的特徵值隱含了在同一條鏈上第1個到第N個區塊的內容。也因為如此,在第N個區塊的內容及其特徵值被寫入一區塊鏈後,想要更動第N個區塊內的其中一個資料紀錄且不影響其區塊特徵值的唯一方法就是同步修改第1個到第N-1 個區塊的內容。當然,這些修改也需保證他們相對應的特徵值不受影響;此外,用來計算特徵值的數學演算法經過了特殊的設計,以讓更改一區塊內容而不影響其特徵值這件事變得極端困難;上述兩個原因確保了區塊鏈上資料的不可竄改性。

比特幣最重要的設計理念是運用演算法去除類似中央銀行對一個貨幣系統的集中式掌控,因此比特幣將它的區塊鏈內容複製於成千上萬個節點(node)上以避免少數節點的把持壟斷,而且這些節點不需經過任何認證,可以散布在Internet的任何區域,更可以隨時選擇離開或加入。在如此鬆散的架構下,如何建立共識並防止惡意攻擊便成了區塊鏈設計最大的技術挑戰。更具體而言,當所有的節點都可以要求對既有區塊鏈增加新的資料區塊,多個節點可能同時會試圖對既有區塊鏈加入不同的資料區塊,或者說某惡意節點可能試圖對既有區塊鏈造成分支以顛覆歷史,要使用什麼樣的機制才能確保在這些狀況下區塊鏈大致保有單一線性鏈的結構而非樹狀結構,並讓所有節點對區塊鏈內容最後達成共識?

借鏡拜占庭容錯技術 提升區塊鏈效能

Satoshi Nakamoto提出工作證明(Proof of Work , POW)的方法來解決這個問題。當一個節點想要插入新的資料區塊,它需要先解答一個與此區塊特徵值相關的數學謎題。當多個節點競爭時,先解出其謎題的節點得以成功插入它的資料區塊,而其他節點必須針對最新區塊鏈內容重算其所屬區塊的特徵值,然後重新解答相應之數學謎題,因此POW 可以在多節點競爭的情況下挑出單一勝出者。此外,POW的設計也保證當一個區塊鏈內惡意節點的解題能力低於非惡意節點的解題能力,此區塊鏈可免於惡意攻擊的威脅。同時,因為解出POW所採用的數學謎題需要相當的電腦計算能力,POW也墊高了惡意節點攻擊一區塊鏈所需付的代價進而降低此類攻擊的動機與可行性。

雖然POW有種種資安的好處,但它的速度比之傳統SQL資料庫系統實在慢很多 (0.1 transaction/sec vs. 1000 transactions/sec)。從資料庫管理技術的角度來看,比特幣區塊鏈所要解決的問題是:如何在某些惡意分散式資料庫節點可以任意破壞資料與欺騙其他節點的狀況下,讓所有非惡意節點對區塊鏈內容形成單一共識,在研究文獻上這個問題叫做拜占庭容錯(Byzantine Fault Tolerance)問題。我們可以借鏡既有拜占庭容錯技術來改善現存區塊鏈系統的效能問題,譬如說,Linux Foundation的區塊鏈軟體叫Hyperledger,就是奠基於一種稱為PBFT (Practical Byzantine Fault Tolerance)的拜占庭容錯技術。尤其是針對私有鏈(Private Chain)的應用情境,也就是所有參與節點可以互相認證並有基本的互信,拜占庭容錯技術可以提供許多效能優化的機會。

在一般的認知上,區塊鏈最大的好處是它保證資料的不可竄改性。然而,把資料紀錄組成一條線性鏈以防止事後資料竄改,並非區塊鏈的獨創;事實上,類似的概念已經應用於許多現存密碼系統的設計。因此區塊鏈裡最重要的技術其實不是如何把資料紀錄互相鏈結,而是如何確保,即使在惡意節點攻擊下,所有非惡意節點仍能將資料紀錄形成單一線性鏈。過去數十年學術界對拜占庭容錯技術的研究應可以對進一步提升區塊鏈效能提供相當多可借鏡的地方。