您的瀏覽器不支援JavaScript語法,但是並不影響您獲取本網站的內容。

區塊鏈簡介與技術探討

106-05-09

工研院資通所 高靖鈞 丁川偉 陳耀鑫 馬金溝 陳澤世

區塊鏈(Blockchain)在初始以及字面上的定義為一串採用密碼學方法產生的關連資料塊,前後相連牽一髮動全身,且儲存在多個分散節點中,它的歷史資料幾乎不可能被篡改,也由於此特性的緣故,最為人所知也是第一個知名的應用就是比特幣(Bitcoin)交易帳本,但在談加密貨幣(Cryptocurrency)之前我們仍應先從區塊鏈本身來了解,尤其區塊鏈發展至今,在智能合約的概念與技術上有了長足的進步,已能發展出多樣化的應用,自2009年至今區塊鏈的演進如下圖1所示,目前區塊鏈較為活躍的國家則有:美國、日本、中國、俄羅斯、以色列、愛沙尼亞、丹麥、瑞典、韓國、荷蘭、芬蘭、加拿大、英國、澳大利亞。

圖1 區塊鏈演進與應用示意圖

圖1 區塊鏈演進與應用示意圖

區塊鏈中每一個區塊中記錄著好幾筆資訊,例如,在比特幣區塊鏈的每一個區塊所包含的資訊包括:區塊的容量大小(Block Size)、區塊頭(Block Header)、該區塊包含的交易數量(Transaction Counter),以及每一筆被包含在這個區塊中的交易資訊(Transactions),如圖2所示。

圖2 區塊結構

圖2 區塊結構

每一個區塊的Block Header裡的Version值是規範此區塊的軟體版本;有一組Previous Block Hash值(256 Bits),這是將前一個區塊的Block Header進行Hash Function而得到的值,這可讓每一個區塊與前一個區塊資料產生無形的連結(區塊鏈),並確保區塊序列及歷史紀錄的正確性。Merkle root 是此區塊所包含所有交易的Hash值運算後之Hash值(256 Bits),此機制可簡化網路下載交易資料並做安全正確驗證。Time Stamp是從”1970-01-01 T00:00 UTC”至”現在”的秒數。Difficulty是衡量在給定目標下找到Hash值的難度,每2016區塊後更新一次Difficulty值。Nonce為一隨機數,更動此值來為區塊重新計算Hash值,直到找到包含所需數量的Leading Zero的 Hash值,所需的零位數由Difficulty決定。 所得到的Hash必須是小於當前Difficulty的值,因此必須有一定數量的前導零位以便小於該值。由於這種迭代計算需要時間和資源,因此我們稱此類計算能力的資源為算力,擁有的算力越大在機率上可能越快找到此解答,但實際上卻無法預測哪個運算節點能最快找到,也因此此種方式具備了所需的隨機性,在後面章節我們將解釋使用此種機制的區塊鏈如何能避免被單一團體所掌控或攻擊。

1. 區塊鏈為什麼值得信任?

在此我們先介紹區塊鏈的原理,解釋它為什麼值得人們的信任,為什麼建立於其上的交易帳本如比特幣,在這麼多年後仍未有任一駭客能攻破或篡改其上任何一筆資料。
如圖3所示,區塊鏈的資料塊是前後相關連的,假設駭客竄改了歷史資料中的區塊T,則T之後的所有區塊皆需重新計算且一併篡改才能符合規則。這邊重新計算是指由於區塊之間皆經密碼學保護,若要讓區塊T+1與區塊T之間能通過驗證,則駭客需要重新算出符合解,即使僅算一個區塊也需要相當大的計算能力,更遑論要重新計算之後的所有區塊。

圖3 區塊鏈資料塊示意圖

圖3 區塊鏈資料塊示意圖

且由於所有資料塊保存在眾多節點中,僅修改少數節點上的資料塊同樣是起不了作用。

2. 可能的攻擊手段與所需代價

那麼若駭客想要修改當前正在生成的區塊,有無可能?

嘗試1. 駭客想偽造某一筆交易資料內容

然而由於每一筆交易資料皆受到簽證以密碼學方式保護,除了簽證的所有者以外是無法偽造的。且即使是簽證的所有者,也僅能對自己的交易做追加更新,無法修改已寫入區塊鏈的資料,其他使用者對此交易則無任何修改能力。

嘗試2. 駭客修改了當前區塊的資料內容,並打算寫入區塊鏈中
我們在嘗試1中解釋了駭客無法偽造其他人的交易資料,這裡指的修改是例如駭客花了一筆錢訂購了某樣商品後,緊接著在其所控制的節點上當作這筆錢還沒被交易掉並將這筆錢轉走,亦即將這筆錢花費了兩次,這種攻擊手法稱為Double Spending。

Double Spending並非不可能,在解釋這種攻擊之前我們需要先簡單介紹一種共識機制如目前最常見到的POW(Proof-of-work),意即算力證明。在本文開頭我們已介紹了算力的概念,而在網路環境上,節點或是IP都是可能偽造盜用的,駭客可以使用少數幾台伺服器偽裝為自己擁有一萬個節點,當區塊鏈表決誰有權力寫入當前區塊時,得到較大獲選機率,然而常用的POW機制可以有效遏止此種手法,因其要求每一個節點證明自己是確實擁有相當等級的算力,駭客儘管能將一台伺服器偽裝成一萬個節點,然而其算力總和仍僅有一台伺服器,以比特幣網路擁有六千個節點來估算,駭客需要擁有相當於2500個節點的算力才有50%機率拿到當前的區塊寫入權,且由於交易通常要求至少六個驗證,僅拿到一次寫入權並不夠,駭客必須要能拿到六次寫入權才能完成此種攻擊,代價過大且若擁有此等算力,實際上加入比特幣網路的「好人方」能直接拿到相當大的獎勵金額,加入「好人方」的行為則俗稱為挖礦。

3. 什麼是挖礦/礦工?

比特幣或是以太幣網路是由六千個左右的節點所組成,這些節點分散在世界各地難以被單一組織所控管,因此區塊鏈網路可被視為最佳分散式資料庫,這些節點不斷驗證所有交易資料,並保存所有交易記錄,其背後的動機則因為可獲得相當不錯的經濟獎勵,足以支付其硬體成本與電力開銷。
在上面我們介紹了POW共識機制,其原理是依據當前區塊的資料來產生下一個數學難題,所有的節點嘗試去解題的行為則稱為挖礦,在六千個節點中第一個解出來的幸運者則獲得下一個區塊的寫入權以及獎勵。上面我們提到若駭客擁有能夠拿到六次寫入權的算力,則依據筆者撰文時的時價來計算,可獲得75枚比特幣相當249萬台幣的合法獎勵,也因此頂尖的算力擁有者都加入礦工行列,這又讓其防護更加牢固,因其他想嘗試攻擊的駭客很難追上這樣的算力總和。

4. 共識機制

共識機制可說是區塊鏈的核心構成之一,但區塊鏈為什麼需要共識機制?
在現行的銀行體系中,存戶之間的交易可透過查帳來驗證不會有疑慮,這是中心化的運作模式,所有人相信銀行這個中央體系不會做假帳,值得信賴。但在區塊鏈上並沒有這樣的中心化角色,它本身便是去中心化的帳本,以比特幣或以太坊這樣的大型區塊鏈來說,裡頭有六七千個節點,每個節點對於當下該記什麼帳有不同的順序選擇,那麼該以哪個節點的版本為準?且其中甚至可能混雜有惡意節點的假帳本,如何避開假帳本,同時獲得多數節點的認同與記錄,這個方法與過程就是共識機制。

底下將簡單介紹幾種常見的共識機制,並分析他們的優缺點:
4.1. POW (Proof-of-work) 算力證明
上面已先介紹過POW可有效阻止惡意攻擊,其原理是由各節點以算力解題的方式來競爭當前區塊的寫入權,最快解得答案者將答案與他自己選擇好的交易內容(也就是當前區塊內容)發布給其它節點驗證,若其它節點驗證區塊內容正確且同意他是最早解題者,則加入此鏈並將此區塊內容儲存起來,並以此區塊內容作為依據開始解下個題目。

POW的優點有:
(1) 為最安全的公有鏈共識機制
(2) 機制較簡單容易實行
(3) 相對公平的挖礦機制(也就是加密貨幣的產生與分配)
POW的缺點為:
(1) 消耗大量能源,算力是以能源消耗為代價製造出來的
(2) 區塊的確認時間較難縮短
(3) 可能產生分叉,需要等待多個確認才能完成交易
(4) 基於(3),理論上我們可說POW沒有最終性,因為永遠可能出現更長鏈來取代當前帳本,但實際上六個確認後其機率已趨近於0

4.2. POS (Proof-of-stake) 權益證明
白話來說,POS即擁有越多加密貨幣(權益)的鍛工越容易拿到當前區塊的寫入權(挖到礦)。它與POW不同,不需要消耗大量的算力,因為沒有算力競爭的需求。原始版本的POS在創世初期就已產生出所有的貨幣,意即新的區塊並不會誕生新的貨幣,因此執行節點驗證者不稱為礦工,改稱鍛工,但他們仍然可拿到交易手續費作為獎勵。後來版本的POS則亦有出現區塊挖礦獎勵的設計,尤其若要將POS應用在公有鏈上的話。 
而POS具體而言如何選出當前區塊的寫入者?若總是選擇權益最高者,則擁有最多貨幣的成員將永遠獨占寫入權,因此通常實行底下兩種方法:
(1)亂數化的選擇方法:
產生隨機亂數,並以亂數搭配特定公式來選出寫入者,唯權益高者仍有較大機率被選中。
(2)依據貨幣年齡的選擇方法:
此方法被用於改善大者恆大的情況,具體可參考Peercoin的做法,持有的貨幣超過30天後可加入寫入權競爭,將每批貨幣的數量乘以持有天數加總起來,可得到一個數字,此數字越大則有越高的機率被選為寫入者,且一旦獲得寫入權則此批貨幣的幣齡將被歸零,需再持有30天才能重新加入計算。唯上述所提的數字有上限值,幣齡超過90天將無法進一步提高機率,持有大量的貨幣也可能達到機率最大值。這個方法可有效改善集中化的情形,也大幅增加了攻擊的難度。[8]

POS的優點有:
(1)不須競爭算力,因此低耗能
(2)競爭寫入權的成員必定擁有貨幣,因此相較於破壞,他們寧可選擇守護系統,以避免幣值蒸發
(3)相較於POW,同樣規模的硬體預算,可保護更多的鏈上資產
POS的缺點為:
(1)擁有權益的成員未必希望參與記帳
(2)拿到寫入權的壞人若想改寫出另一條假鏈,僅需花費很小的算力,這可能導致double spending攻擊成功
(3)做壞事的代價很低,沒有懲罰機制
(4)基於上述(2)和(3),實行POS需要搭配其它機制來改善此種情況,也因此比起POW較為複雜

4.3. DPOS(Delegated-proof-of-stake)權益授權證明
在上面提到了POS的缺點之一為擁有權益的成員未必希望參與記帳,而DPOS便可以解決這個問題,類似於民主的代議制度,它先通過權益證明選出記帳參與者(驗證節點),再透過運作機制讓這些驗證節點競爭區塊寫入權。同時由於驗證節點數量大幅縮減的緣故,可快速達成共識。
目前提出DPOS共識機制的有Bitshares以及Ethereum,Ethereum為了解決上述POS共識中做壞事代價很低的缺點,提出的做法為要求有意參與驗證節點者繳納保證金(加密貨幣)才能參加,而如果驗證節點違反規則參與了作假或攻擊,甚至僅只是做了系統認為「無效」的事,則保證金將會被沒收,這個共識機制則稱為Casper,Ethereum宣稱在未來某個適當的時機點將採用Casper作為共識算法。
Casper並不是單純的DPOS,實際上還參考了PBFT的機制來做改良。單純的DPOS和POS一樣,會有分叉存在,無法有最終性,而Casper透過改良機制使區塊的最終性獲得保障,如果真的發生攻擊使得兩個同樣高度的區塊都被最終確認的話,則存在至少三分之一的驗證節點違反了規則,這些節點的保證金將被沒收,價值可能高達數千萬美金,而由於這些加密貨幣從市場上消失的緣故,將導致貨幣的價格上升,這可能取代以往啟用緊急硬分叉來修正攻擊的手段。[9]

OS除了具備POS的優點以外,還有:
(1)縮小參與驗證節點的數量,大幅提高共識速度
POS的缺點為:
(1)必須依賴加密貨幣,然而現今聯盟鏈中許多情況並不存在加密貨幣
(2)撇除Casper的話,多數DPOS仍無法有區塊最終性

4.4. PBFT(Practical-byzantine-fault-tolerance)實用拜占庭容錯算法
上面介紹的幾種共識機制皆較適合用於公有鏈,而PBFT則是一種較適合用於聯盟鏈的共識機制。PBFT以數學證明模型來驗證其取得共識的速度與容錯能力,在其容錯範圍內時可得證系統無法被分叉,上述的POW或是POS在制度上皆能阻止駭客偽造大量有效益的驗證節點,然而原生PBFT並無此能力,但若使用在聯盟鏈,則由於聯盟鏈的成員與節點原本就受到篩選與驗證,自然地解決了此一問題。

PBFT的優點有:
(1)系統在容錯範圍內無法被分叉
(2)系統在容錯範圍內可容忍任何類型的錯誤
(3)驗證與共識速度極快
(4)不須競爭算力,因此低耗能
(5)基於前述點(1),區塊具備最終性
PBFT的缺點為:
(1)若超過1/3的驗證節點故障時,則系統無法繼續運作
(2)無防範駭客偽造大量驗證節點的能力

5. 匿名性和隱私性

在比特幣(Bitcoin)和以太坊(Ethereum)這樣的公有鏈上,每個用戶都是匿名的,難以被追蹤或與真實身分關連,也因此非法活動常選擇比特幣作為交易媒介,而各國政府對於區塊鏈是無法掌控、技術上也禁止不了,因此所採取的因應措施則從法定貨幣的進/出入點來管制,加密貨幣的交易有賴於交易所來進行,而在交易所內若要將加密貨幣與法定貨幣做兌換則須透過交易所合作的銀行,因此各國政府目前是從合作銀行來監控金流的流向,每一筆入金必須證明是合法所得,以此來防止洗錢等行為,大額領出也同樣遭到監控,但有些刻意躲避監控的交易所則會不斷更換合作銀行,這些合作銀行通常位於海外未有邦交的小國,以此躲避追蹤。
雖然用戶皆為匿名,然而在公有鏈上,每個用戶的交易與餘額卻是完全透明,可被任何人查詢,包含創世以來的歷史交易皆然,對此很多大戶則是開設多個電子帳戶來分散交易與餘額保管,只要有把握能管理好多組加密簽證金鑰,區塊鏈並無限制每人可開設帳戶的上限。
而當銀行業考量使用區塊鏈技術來保存交易資料時,上述的匿名性與隱私性則成為一個課題,因為銀行需要的是可以管控的匿名與隱私,亦即用戶可讓同意對象驗證自己的真實身分,非同意對象無法查詢自己的歷史交易或餘額,可以辦到這一點的區塊鏈則為聯盟鏈,或稱私有鏈。

6. 什麼是聯盟鏈/私有鏈?

聯盟鏈/私有鏈的特徵為僅有獲得同意的節點可加入成為驗證節點,也就是說所有的驗證節點通常都是聯盟裡的成員,彼此知道真實身分,並共同維護一個區塊鏈。相對於公有鏈來說這樣的區塊鏈就顯得不太分散式、不那麼去中心化,這裡指的並非是數量上的不同,而是因為聯盟鏈是由聯盟集體控管的,包括成員的加入需要經過審核、整體運作模式可被定義改變等。
若這是一個銀行業組成的聯盟鏈,則一般存戶通常並不關心銀行背後使用的是傳統資料庫或是區塊鏈,但他們仍然可以感受到帶來的好處,例如以往電匯至海外銀行通常需要2~7天的時間,使用區塊鏈後卻只需要幾十秒。
此外,聯盟鏈的節點數相較於公有鏈在數量上少得多,通常僅有數十至數百個,以上述的POW共識機制來說在安全上會有隱憂,因此需要額外的安全防護制度與措施如權限控管,將在下一節介紹。

7. 聯盟區塊鏈監管技術

如上所述,由於企業對於交易處理速度、隱私資料的保護、甚至商業應用(例如金融交易等)的合規要求等需求相當重視,因此越來越多企業傾向以聯盟鏈的設計理念來堆疊其上的應用服務。當然,要堆疊出各式各樣的多元服務,除了底層的聯盟鏈基礎環境外,還必須因應企業需求在區塊鏈架構、或是連結區塊鏈的中介層發展眾多關鍵技術,其中包含最被廣泛探討的技術發展議題之一-監管。在此議題下,又可進一步細分為針對區塊鏈系統安全性的監控管理技術,包含權限控管與協定層舞弊偵測技術;以及與區塊鏈交易安全相關的技術,包含實名認證、隱私資料加密、鏈上資料監管與異常交易偵測等技術。

7.1. 權限控管
聯盟區塊鏈的節點數相較於公有鏈的六千個節點來說是非常少的,可能只有十幾個,因此可說並無數量上的安全防護機制,常見的POW共識演算法以全網算力來保護區塊鏈,要發動有效攻擊需要全網算力的一半以上,然而在聯盟區塊鏈中若不限制參與者,則有心發動攻擊者要達到此條件並不困難,因此需要一個機制來控管參與者,並對參與者所能行使的行為做一個規範,這就是權限控管的概念。
在權限控管機制中,可針對區塊鏈中常見的五種操作以及四種節點角色來規劃,讓管理者可依據不同的架構需求來設定角色,並針對不同目的的節點給予相對應的權限。這樣就能有效保護區塊鏈免於攻擊,依據需求甚至可設定為區塊資料不外流的架構模式。
區塊鏈中常見的五種操作如下圖4:

圖4 區塊鏈中常見的五種操作

圖4 區塊鏈中常見的五種操作

依照這些操作再劃分為四種節點和相關權限,如下圖5:

圖5 四種節點和相關權限

圖5 四種節點和相關權限

-聯盟鏈系統建立初期,Administrator節點會建立相關權限。
-當節點A連接此聯盟鏈時,節點A會向其他節點請求權限資訊,並且節點A將會依照此權限來運作。
-權限相關資訊必須由Administrator節點所簽證,避免其他不具權限的節點發送權限資訊。
-在聯盟鏈系統運行過程中,Administrator節點可以在任意時間改變權限。而此權限資訊將會傳輸到整個聯盟鏈網路中,類似交易或區塊訊息傳輸至整個網路。
-如果一個節點想要進行某個操作,除了此節點本身必須持有該權限之外,網路中其他節點也必須認可此節點確實擁有該權限。
-如果一個節點沒有相對應的權限,但是它透過某種非法的修改,得以執行某個操作。

情境1:
(1)假設一個participant節點試圖改變自己的節點權限,並且此權限訊息傳輸到聯盟鏈網路中。
(2)其他節點將會拒絕此訊息,因為此訊息的發送者並沒有此權限。
情境2:
(1)假設一個validator節點試圖發布smart contract並認證此交易區塊,且此區塊訊息傳輸到聯盟鏈網路中。
(2)其他節點將會拒絕此區塊,因為此區塊的發送者並沒有此權限。

有了權限控管機制之後,我們可針對不同目的的節點給予相對應的權限,這和從網路層來做硬性限制是截然不同的,例如我們可設定任意節點皆可連線進入區塊鏈並發出交易請求(手機輕量節點),然而未經授權的任意節點皆無法做認證(挖礦),這從基本上就阻斷了51%攻擊。對於要求做到資料不外流的聯盟鏈,則可設定為不在白名單上的節點無法連線,這麼一來其餘的操作皆不可行,聯盟鏈中的區塊資料也能安全的守護。

7.2 協定層舞弊偵測

區塊鏈系統對於每個節點所扮演的角色、每種資訊的傳遞與驗證都有明確的定義,但這不代表在看似一切合法的表象中,不存在有系統漏洞。為避免信賴節點遭到駭客入侵而做出違反公平性的操作行為,破壞企業/使用者對區塊鏈系統的信任,必須發展協定層的舞弊偵測技術。在機制設計上,首先需要由區塊鏈所有的節點共同蒐集所觀測到的區塊鏈活動資料,再傳送至特定伺服器進行資料的整合與深層分析,當發現有異常活動或攻擊可能時,能即早發出系統警訊通知相關維護人員進行確認與處理,在駭客嘗試的初期階段便做出反應。
所謂的協定層,主要涵蓋了資料傳輸、加密簽名、資料儲存、共識機制等技術,因此在舞弊的偵測設計便可由上述技術切入,發展對應的預防機制,例如在資料傳輸層面進行監控,計算分析每個節點的封包發送量並建立模型,當有節點出現高頻率的封包量時,可合理懷疑是由駭客侵入所製造的阻斷服務攻擊;或是從共識機制出發設計舞弊預防策略,舉例來說,若該聯盟區塊鏈所採用的共識演算法為POW,而POW共識機制在每個驗證節點的算力相同的假設前提下,每個驗證節點贏得區塊寫入權的機率理當趨近於隨機分布,因此若有某個節點屢屢拿到區塊鏈寫入權,則代表該區塊鏈系統已失衡,需要有適當技術與管理層面介入處理。

7.3 實名認證

比特幣、以太坊等以公有鏈為出發點的區塊鏈大多為匿名制,但有越來越多的業者開始致力於發展實名認證的私有鏈/聯盟鏈,以推動更多元之創新應用。特別是金融相關應用,更需要實名認證的技術來確保行為人/單位的可追溯性,此點可從2016年金管會公布的「金融科技發展策略白皮書」中,最為基礎的便是建構整合安全的網路身份識別中心來得到驗證。在實務的做法上可以在使用者/企業申請區塊鏈帳號時,透過第三方認證單位(政府戶政單位、自然人憑證系統、TWCA等)確認使用者/企業身份,將通過實名認證程序的用戶憑證存入區塊鏈,並藉由智能合約以及區塊鏈的安全與信任機制管理用戶憑證,提供API服務予應用端介接,作為應用服務「實名」認證使用。若要擴展到「實人」認證,則可結合生物辨識(例如人臉、聲紋、指紋)等身分識別技術來進一步確認,甚至在申請區塊鏈帳號/交易時,可再搭配要求申請者輸入特殊語音內容/動作來證明申請者之身分與真實性。

7.4. 隱私資料保護

區塊鏈在最初的設計中,是以公開透明的角度為出發點,每個節點都可以存取所有的資料。但在聯盟鏈中,特別是金融相關的需求,無法像公有區塊鏈一般讓所有節點都看到所有的交易資料,因此對於資料的隱私保護是無可避免的。而隱私資料的保護技術,主要可以分為兩個層面來設計,首先為隔離層面,例如由國際各大銀行區塊鏈聯盟R3所發展的區塊鏈平台Corda,便設計可透過權限隔離的方式來達到隱私資料的保護,其做法概要來說,即各個節點之間的資料傳輸並非是向所有節點傳遞,只有交易的相關節點才能收到對應的資料,此外,Corda亦導入了公證人的角色(節點)來記錄區塊交易資料,亦即只有交易的公證人以及相關對象能夠看到原始資料。另外則為加密層面,意即透過如PKI(Public Key Infrastructure,公鑰基礎設施)、多重簽章等技術對交易/智能合約等內容進行加密,讓僅有擁有密鑰的交易相關對象可解密以保護資料的隱私性。
在加密的技術中,近幾年區塊鏈技術人員也嘗試採用零知識證明(ZKPs, Zero Knowledge Proofs)技術來達到隱私資料的保護,概念上它允許證明者(Prover)與驗證者(Verifier)可以取得一論述(例如謎題的解答)是真實/正確的共識,但卻不需透露除了論述是真實的以外的任何訊息。上述的說明看起來很玄,舉一個簡單例子來讓大家更理解零知識證明的概念,假設驗證者需要確認證明者所提出的一份數獨解答是否正確,則證明者可將解答以81個小紙片,每個小紙片都寫了一個數字,依解答排列後將紙片背面朝上(讓驗證者看不到數字)。驗證者要確認解答是否正確時,可依據數獨的解題規則一次檢查一行/一列是否符合1到9各出現一次的事實,在每次檢查時,證明者會將該行/列的9張小紙片打亂/洗牌後再拿給驗證者,檢查是否1到9皆有出現。反覆進行此作業,則驗證者可證明解答是對的,但卻無從得知真正解答的樣貌。透過此技術,可將交易參與者的身份與交易內容進行加密,在不公開交易相關資料的情況下維護區塊鏈的安全。

7.5 鏈上資料監控

除了上述介紹監控區塊鏈系統運作公正性的技術外,對於區塊鏈上所產生各種交易資料的監控以保障交易合法性與安全性,同樣也是監管單位、服務營運商、甚至使用者重視的議題。在鏈上資料的監控技術上,支援視覺化的介面以呈現平台整體即時交易的負載狀態是最基本的功能,以太坊、Hyperledger、Corda等區塊鏈平台皆提供了視覺化的介面(Dashboard)來監視區塊鏈上的交易現況、網絡狀態等資訊;此外,即時交易資料的合規性確認亦是技術上因應服務需求可強化之處,這部分可藉由智能合約中引入法律規則(例如金融交易需確認交易雙方是否有通過身份/資產/所有權的認證、每人/每個企業在一日的交易上限等),或是使用者/企業自訂可疑事件,來確保交易符合契約規則與法律規範,同時能在異常事件發生時發出警示通知,提供區塊鏈服務除基礎建設之監控外,應用服務面層級之運作與安全保障。

7.6 異常交易偵測

交易資料的異常偵測,可簡單分為規則模式(Rule-based)與資料驅動(Data Driven)模式兩大類。規則模式包含上一小節提到的法規面規範,或是透過經驗法則所定義出的規則,進行即時交易的異常偵測;資料驅動模式則是透過人工智慧、智能運算、機器學習等方式對交易的大數據進行分析,線下(Offline)自動蒐尋可能的異常交易樣態(Pattern),在此資料驅動模式之下,還能進一步以偵測對象的差異性將技術分為個人化的異常交易偵測與群眾式的異常交易偵測。個人化的異常交易偵測著重在理解個人的交易行為,包含交易對象的範圍、交易的數位資產類型與數量、交易的頻率等習性,建立個人化的行為模型以偵測異常的交易事件;群眾式的異常交易偵測技術則是追求從錯綜複雜的多帳號、多交易的長時間累積數據中,分析交易間的關聯與脈絡,挖掘出類似洗錢、詐欺等可能異常的交易樣態。而所偵測到的個人/群眾式異常樣態,可反饋給鏈上資料監控系統(例如可疑的帳號ID、交易的時間點、甚至是交易的地點等),以Offline-to-online的方式提供舞弊/洗錢/詐騙等複雜異常交易之偵測模組,提高區塊鏈上交易風險控管的有效性。

8. 為什麼要用區塊鏈?

與傳統資料庫相比,區塊鏈的處理速度是慢很多的,那麼除了上面提到的值得信任與不可竄改性以外,區塊鏈還有什麼優點呢?為何要選擇使用區塊鏈?
區塊鏈還有一個優勢是智能合約的成形,將在下一節介紹,在此我們先說明一個重要觀念,實務上並非所有的情境都適合使用區塊鏈,或可以說以目前的處理速度與複雜度而言,大部分的應用都還不適合,但還好Bitcoin與Ethereum已提出閃電網路與分片處理等技術,在未來可望能大幅提高每秒交易次數,但即使如此由於區塊生成時間的先天限制,仍與傳統資料庫的即時性與處理速度相距甚遠,所以有些應用仍舊是使用傳統資料庫較有優勢的,在此不做技術性的深入探討,以實際舉例來說明,例如線上即時策略遊戲,若將玩家資料儲存於傳統資料庫則所有其它玩家的行動所參照到的資料都會是非常即時的,但若儲存在區塊鏈,則有可能發生賴以做出判斷的資料依據,是較舊的資料,因最新資料尚未同步至整個區塊鏈,也尚未寫入區塊,若要等待同步時間或確認時間,則遊戲體驗將會非常差,所以對於「即時性」需求非常高的應用類型就不適合,但兩者是可相輔相成的,例如每隔一段時間就將傳統資料庫的資料同步至區塊鏈上做保存,以確保玩家資料永遠不會因為任何意外而消失,甚至直到遊戲公司倒閉後仍會繼續存在。
相反的例子則是如世界性的電子錢包系統,就非常適合使用區塊鏈,首先它確保了錢包內的有價物是有憑有據的,且無任何實體單位能掌控或拿走它,透過此電子錢包所進行的交易無法造假或塗改,對交易雙方而言都同樣的有保障,且無論交易對象身在世界何處,都能迅速完成。
然而還有一個重點必須闡明,才能真正理解為什麼要使用區塊鏈,那就是智能合約的價值。

9. 什麼是智能合約(Smart Contract)?

在解釋智能合約之前先舉個例子,我和麥可打賭一百元今天12點整美元兌台幣為多少,我賭小於等於30.91,麥可賭大於30.91,則我們有三種方式來完成賭注:
(1)我和麥可為此簽訂合約,依據合約輸的一方要付錢給贏的一方,但萬一輸的一方屆時不願意付,則贏方可能要花時間花錢去打官司,只為了一百元似乎不值得。
(2)我和麥克彼此信任,若雙方是好朋友這可能是個不錯的方式,但若是陌生人呢?在電子論壇的留言板常見各種下注,但實際上都是無法兌現的。
(3)找一個中立的第三者,我們先各自交一百元給他,但這個中立的第三者有私吞兩百元的可能。

以上是常見的情況,交易雙方是陌生人無法互相信任,而智能合約可以實現中立第三者的角色,且決不會私吞,完全依據合約訂定的程式碼來執行,當智能合約成立時向雙方收取一百元,等12點整一到自動查詢央行的匯兌率,並將兩百元匯到贏家的帳戶中。
可知智能合約兼具安全、快速、和便宜等特性,且小至1元的打賭,大至千萬或上億元的買賣,都能被安全執行。
而智能合約不只是一個可以自動執行的程式,它自己就是一個參與者,可以接受和儲存訊息以及有價物,也可以發送訊息和有價物,並總是按照事先的規則執行操作。

9.1 充滿無限想像的智能合約

虛擬貨幣系統將交易紀錄在區塊鏈的去中心化資料結構之中。虛擬貨幣始祖比特幣支援基本的腳本語言(Script)以自動化處理交易資料。以太坊則更進一步地提供圖靈完備(Turing Complete)的程式語言,能夠將全世界的所有合約以程式方法重新撰寫,因此開啟人們對於智能合約的無限想像,目前有數以百計的智能合約正自動地執行於以太坊區塊鏈網路上。
智能合約由電腦程式語言編寫而成,能夠自動執行在去中心化的區塊鏈網路節點之中,負責處理與轉移具有實際價值的數位資產。以太坊提供一種名為Solidity的程式語言,專門用來撰寫智能合約,讓開發者可以撰寫如:電子投票、拍賣、電子商務、小額付款等智能合約,甚至可以開發一個全部由程式碼組成的無人公司。除正確執行的基本需求之外,如何安全地實作智能合約更是成敗的關鍵。

9.2 價值五千萬美金的程式漏洞

在2016年6月,The DAO是全世界第一個以智能合約組成的無人公司,同時也是史上募資金額最高(約1億5千萬美元)的群眾募資公司,然而由於智能合約原始碼存在數個資安漏洞,才剛開始運作即遭到駭客攻擊,盜走價值約5千萬美金的虛擬貨幣ETH。此事件成為開啟智能合約資安研究的契機,許多資安專家紛紛投入發展智能合約的資安工具。比起人工驗證方法,形式化驗證(Formal Verification)更可以涵蓋所有的測試案例,且自動化執行提升測試效率,目前研究顯示The DAO的資安漏洞可以被正確地檢驗出來[2]。另一方面,由智能合約專家研發的Zeppelin程式框架(Framework),則是提供基本的無漏洞的智能合約函式庫(Library),讓開發者有跡可循的開發出無資安漏洞的智能合約[3]。

9.3 開發智能合約超輕鬆

只要簡單兩步驟就可以馬上開發智能合約,首先,安裝MetaMask[10],這是一個Chrome的套件,所以你要先安裝Chrome,再安裝MetaMask,裝完之後Chrome右上角就會有隻可愛的狐狸跑出來,如圖7所示,開好帳號之後就可以進入下一步。
接著使用Google Chrome瀏覽器開啟Ethereum基金會提供的網頁版Solidity編輯器[11],此編輯器可將開發的程式碼編譯成EVM (Ethereum Virtual Machine)看得懂的bytecode。這邊使用Solidity開發文件[12]中的第一個範例來示範,只要依照圖8的操作步驟,就可以輕易的部署智能合約至區塊鏈進行測試。

圖8 網頁版Solidity編輯器的操作步驟

圖8 網頁版Solidity編輯器的操作步驟

在Browser-solidity按下Create之後,會自動透過MetaMask發送交易訊息,此時會跳出如圖9最左邊的確認視窗,按下Accept就會將創建此智能合約的交易發送出去,接著等交易被收到區塊之後即完成。

圖 9 透過MetaMask創建智能合約

圖 9 透過MetaMask創建智能合約

回到Browser-solidity,看到多出兩個合約定義的function可以使用如下圖10,constant function可以直接呼叫,不需要發出交易,其他的function一樣會透過MetaMask發出交易。

圖 10 使用browser-solidity進行合約測試

圖 10 使用browser-solidity進行合約測試

10. 異質區塊鏈介接

隨著區塊鏈技術越來越受到關注,更多數位貨幣與區塊鏈平台也不斷被發展出來,這些新的平台技術,除了修正與強化早期區塊鏈平台(如比特幣)的不足外,特別在聯盟鏈中,更容易出現專為某種應用服務需求所設計的區塊鏈平台。當各種金融服務、物聯網服務、醫療服務等資源建立在不同的區塊鏈,甚至同類型的服務(例如金融服務)因不同業者/組織/地域性/國家而建立在不同的區塊鏈,為了避免每個區塊鏈閉鎖性的運作造成了創新應用的發展阻礙與限制,連結異質區塊鏈並能協同運作便成為了區塊鏈技術發展一重要議題。
過往談到異質區塊鏈的介接,大多是環繞在比特幣之上(這是由於比特幣經歷過最長久的市場考驗,即使存在一些缺點與限制,但其仍是最去中心化、最公平的區塊鏈),例如Blockstream所發展的元素鏈、ConsenSys的BTC Relay等側鏈(Sidechain)技術都是以比特幣為出發點。元素鏈提供了一種交互協議,透過雙向錨定(Two-way Peg)技術讓新的鏈(側鏈)可以跟原始的鏈(主鏈)連接起來,並允許數位貨幣可以在兩者之間相互轉移,而不讓幣的價值與總量受到影響;BTC Relay則是透過以太坊的智能合約,將以太坊與比特幣的區塊鏈透過一種安全去中心化的方式連結起來,讓以太坊的用戶能用比特幣來進行交易。
而針對不同區塊鏈之間的價值交換的需求,Ripple公司基於對金融產業市場的瞭解,發現金融單位傾向建置自己的區塊鏈環境發展自有服務,因此提出了互聯帳本協議(Interledger Protocol, ILP),希望透過第三方「連接器」或「驗證器」來達到貨幣的自由傳遞,在此機制下,兩邊的記帳系統皆不需信任「連接器」,因為在ILP中已定義了加密機制,並且為兩邊的記帳系統創建管理信託資金,以達到交易雙方在對資金達到共識時便能直接進行資金轉換,這與現有金融體系的處理方式是相當類似的。除了上述幾項較常見的異質區塊鏈介接技術外,Polkadot、Bletchley、Factom也都是基於不同的角色分工/信任轉移等觀點所設計的技術解決方案。

11. 小額交易與打賞

在有區塊鏈之前,即時性的小額交易是難以實現的,例如聽一首音樂或看一篇文章0.1元,光是轉帳的費用就高出不知多少倍,所以往往變成需要先儲值例如三百元的點數,但若從頭到尾就只聽了一首歌,剩餘的點數多半也拿不回來了。
而在區塊鏈興起後,連打賞這樣的事情都變為可能,甚至已成為使用區塊鏈先驅者們的一股風氣。打賞指的是,在看完某樣創作例如文章、音樂、影片、生放送表演後,不只是想對作者按個讚,還想實質給予鼓勵時,所給予的任意金額獎勵,小至即便只是0.001元這樣的數字,區塊鏈都能迅速的達成任務。

12. 創作記錄

創作歷程之舉證是著作權當中的核心關鍵,底下列舉幾個目前的實際應用:
Blockai —美國,此服務透過影像比對技術建立創作與著作權人之關聯,紀錄於區塊鏈中,雖無法定證據效力但可做為有力證據使用。

圖11 資料來源: Blockai網頁 [4]

圖11 資料來源: Blockai網頁 [4]

Verisart—美國,透過提供創作工具更進一步紀錄創作歷程細節,除了創作內容外更可包含如創作時間、地點等資訊,透過行動裝置與區塊鏈結合,使其不受地點與時間提供服務 [5]。
Ascribe—德國,可分享與追蹤創作交易狀況,並提供如真實性驗證、發行數量管制等服務,基本服務與Blockai相同 [6]。
Law4tw—台灣,透過網頁上傳單一檔案,產生檔案指紋碼以及納入區塊鏈,聲明單一檔案當下存在狀態(收費服務,單一文件$399) [7]。

13. 區塊鏈特性總結

在上面我們已解釋了區塊鏈的諸多特性,茲整理如下:
(1)資料無法被篡改,因此值得信任
(2)本質為分散式資料庫,難以被單一實體壟斷掌控
(3)資料安全、透明、可永久記錄
(4)可擔任公正的第三方
(5)區塊鏈由參與成員共同維護、記錄分散式資料庫,參與成員可即時追蹤和掌握有價物的移轉及交易紀錄
在了解區塊鏈的本質後,不難理解為何它被譽為Internet問世以來最具影響力的發明,在近未來也許將出現一波金融革命,並改變我們常用的交易行為,甚至改變整個世界的運作方式。

參考文獻

[1]Michele D'Aliessi, “How Does the Blockchain Work?” [Online]. https://medium.com/@micheledaliessi/how-does-the-blockchain-work-98c8cd01d2ae#.8hekczgqa
[2]Loi Luu, Duc-Hiep Chu, Hrishi Olickel, Prateek Saxena, and Aquinas Hobor. 2016. Making Smart Contracts Smarter. In Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security (CCS '16). ACM, New York, NY, USA, 254-269. DOI: https://doi.org/10.1145/2976749.2978309
[3]The Zeppelin Website. [Online]. https://openzeppelin.org/
[4]Blockai Website. [Online]. https://blockai.com/
[5]Verisart Website. [Online]. https://www.verisart.com/
[6]Ascribe Website. [Online]. https://www.ascribe.io/
[7]Law4tw Website. [Online]. https://law4tw.com/
[8]Proof-of-stake wiki [Online]. https://en.wikipedia.org/wiki/Proof-of-stake
[9]Vlad Zamfir, Introducing Casper “the Friendly Ghost” [Online]. https://blog.ethereum.org/2015/08/01/introducing-casper-friendly-ghost/
[10]MetaMask. [Online]. https://metamask.io/
[11]Browser-Solidity. [Online]. https://ethereum.github.io/browser-solidity/
[12]Solidity Document. [Online]. https://solidity.readthedocs.io/en/develop/index.html