【冷知識札記|科技】區塊鏈為什麼安全?初學者寫的白話版不專業技術文

近年來區塊鏈( blockchain)簡直是科技領域的當紅炸子雞,大家為跟上這股熱潮,無不想盡辦法搞懂區塊鏈是什麼,然而區塊鏈技術並非外行人能夠輕易掌握其知識,於是大量區塊鏈懶人包、解說原理的文章和動畫也隨著這股熱潮如雨後春筍般冒出。
推薦以上兩部影片,在我理解區塊鏈時提供很大的幫助,建議在閱讀本文前先看過這些影片,兩部加起來不到20分鐘,絕對值得一看,若看完心中已無疑問,那就不用浪費時間看我這篇文章了XD
那我為什麼看完還要寫這篇文章呢?一方面是看過這麼多動畫跟文章,除了知道他是分散式帳本以及如何運作外,還是很難理解背後技術運行的原理。另一方面是我想透過整理資料和撰寫文章來學習這項知識,這過程會比單純閱讀文章更有效果。本身並非相關科系背景出身,因此本篇文章是諮詢多位較熟悉區塊鏈的友人後,經多次校稿才撰寫出來,當然若有任何謬誤,文責仍應由我本人自負,也歡迎大家提供指正及建議,我會非常感激的!
希望本文能讓大家了解:
1. 區塊鏈的運作方式及原理
2. 區塊鏈確保安全性的技術原理
〔進入本文〕
一、緣起
我將目前的世界用一個叫做原始部落的小社區作為比擬,以便說明。過去由於原始部落的銀行接連發生駭客入侵的事件,部落為此分裂成反對銀行設立的革命派與支持銀行存在的保守派。在革命派取得執政權後開始重新思索整個金融體系與支付系統,發現到就算許多記帳工作都由電腦完成,但是卻必須信任這個金融機構才能讓整個機制得以順利運作,然而機構畢竟是由人組成的,在我們必須把信任押注在少數幾個機構的情況下時,到底什麼樣的機構能夠讓我們完全信賴呢?在 《寫給未來社會的新帳本》一書中提到「根據歷史經驗來看,整個系統中往往最不可信任的就是人,或者由人組成的機構或政府,歷史往往最終被證明,那些違反規則的人就是規則制定者,而從工業革命到互聯網革命,技術發展的潮流也是通過取代人這個最不可靠、最脆弱且效率最低的環節來實現生產力大發展的。」在這樣的思考脈絡下,革命派認為未來需要一個能自動運作且具備去信任(不需要依靠相信環節中的任何人或機構)的機制來完成金錢的轉移。
二、引進區塊鏈技術
革命派在國外進行考察找尋解決辦法時,發現摩登部落在運用的區塊鏈技術非常接近他們的理想,於是決定引入這套在摩登部落供9000位居民使用,叫做區塊鏈的記帳系統。
這套系統引入原始部落後,為加速推廣這套系統以被廣泛使用,革命派首先在所有願意參與區塊鏈計畫的100名原始部落居民的電腦中,安裝具帳本功能的電子錢包。你可以把這帳本想像成存摺,裡面有好幾頁,會標上頁碼且每頁都會登載數筆交易紀錄。特別的是這本存摺記載的不是只有你自己的交易紀錄,而是系統會把所有人的交易紀錄都記在上面並隨時同步,所以當原始部落的居民安裝後,已經能看到帳本已有一萬五千多頁了,那正是摩登部落居民過去所有的交易紀錄,而且帳本會不斷新增頁數,因為在此同時摩登部落的居民只要有進行交易都會不斷更新到帳本上。
三、技術導入的過程
原始部落的居民們看著自己電腦中的帳本,個個都疑心重重,這本不斷在自動記帳的帳本到底憑什麼能比銀行更安全?革命派首領K為安撫民心,迅速召開部落大會跟大家說明這項技術用以維護安全的3道防護罩:
#防護罩1、每台電腦都擁有平等記帳的機會
#防護罩2、每本帳本需隨時跟頁數最多的帳本同步
#防護罩3、每本帳本都相同且每頁相互連動
聽完後大家一頭霧水,這些防護罩憑什麼能保障安全性?
於是革命派首領以「向參與區塊鏈計畫的居民A購買1000元的茶葉」的交易過程來示範,以解除大家的疑慮。
在這之前先來介紹每個電子錢包的基本配備:每個人都會有三樣東西:指紋、公鑰、地址。整個產生順序是:亂數→私鑰(下稱指紋)→公鑰→地址。產生過程如下:
首先,考量隱私性,系統會先產生一組亂碼代表首領,這組亂碼會再產生一組私鑰作為首領的密碼,這密碼跟我們平常設定的密碼不同的是,他不可能跟其他人一樣,就如同指紋獨一無二,只代表你自己。接著系統會再以私鑰產生出你的公鑰,公鑰就如你的帳號是能被所有人看到的。最後,再由公鑰產生一組地址,用來告訴大家如何把錢匯給你,就像是你的收款地址。產生的過程不仰賴人工,全是靠演算法算出來的,因此排除人為干預的可能性。而每一把鑰匙都是一連串無意義且獨一無二的亂碼,所以也無法從亂碼中看到交易內容。
讓居民都了解電子錢包的基本配備後,首領K用買茶葉來做示範,當要購買1000元的茶葉時,首領會用自己的電子錢包發送一個「首領K新增1000元到居民A的錢包」,系統運作過程如下:
#STEP 1
居民A將自己用來收錢的地址傳送給首領。
#STEP 2
首領將要匯款的金額(1000元)跟居民A的地址填上,形成一張「交易單」,同時系統確認首領的錢包的錢是足夠的,才核可這張交易單。
#STEP 3 (工作量證明)
系統將交易單轉成首領K的專屬指紋加密後,必須再用首領K的公鑰來解開這枚指紋所包含的交易訊息,才能將這筆交易紀錄記載在帳本上,那該由誰來解開並記帳呢?
第一道防護罩「每台電腦都擁有平等記帳的機會」變會在此時啟動,他確保系統需要有一套公平的機制來決定記帳權,而最公平的做法就是透過比賽機制進行!那要比什麼呢?既然目的是要解開指紋,那就來辦一場解題比賽並由最快解開者負責記帳!為增加比賽誘因,最快算出來的贏家不但能拿到首領支付的交易手續費,還能得到系統發行的貨幣並自動存入電子錢包。且為避免題目太簡單很快就被算出來,系統將解題的運算過程設定為10分鐘,也就是電腦算再快也一定要花費10分鐘才能解開。所以當首領的加密指紋產生後,系統就會馬上公告比賽訊息原始部落的100位居民以及摩登部落的9000位居民,聽到有獎勵大家都躍躍欲試,這次共有5000人的電腦報名參賽,原始部落居民B也是參賽者之一,他很幸運成為這次最快算出來的冠軍得主,並為首領K記下這筆帳在自己的帳本B中。
#STEP 4 (分散式架構)
居民B將這筆帳記到自己的帳本B後,他的帳本B會變成兩個部落中頁數最多的,此時「每本帳本需隨時跟頁數最多的帳本同步」以及「每本帳本都相同且每頁相互連動」的防護罩便會啟動,於是系統會將所有人(摩登部落9000人+原始部落100人)的帳本更新成和居民B一模一樣,首領K的這筆交易才算完成。
四、駭客的挑戰
革命派首領演示完交易過程後,居民們對於交易過程雖然有比較了解,但仍不清楚防護罩啟動對於安全有什麼幫助,於是首領K的幕僚建議不如請最強的駭客來破解先前的交易紀錄,藉此向大眾證明這套區塊鏈系統有多厲害吧!首領K覺得這提議不錯,馬上發布公告說:「只要有人能成功竄改任何一筆交易紀錄,重賞一千萬!」
►駭客H1的挑戰-修改自己帳本上的交易紀錄,使其他人同步進而承認此紀錄
駭客H1認為防護罩3簡直是個大漏洞,以前還要侵入別人帳戶才能修改資料,現在我修改自己的帳本別人還要跟著我同步阿!於是他直接在自己的帳本修改掉首領K的那筆交易,沒想到系統竟然直接銷毀被竄改頁以後的頁面,使駭客H1的帳本變成整個系統中頁數最少的帳本,並且在防護罩2「每本帳本需隨時跟頁數最多的帳本同步」的機制作用下,其他人的帳本是不可能與這本頁數最少的帳本同步的。
為什麼竄改頁以後的頁面都會被銷毀呢?原來他忽略防護罩3還有「每頁相互連動」的功能。設計者為確保交易紀錄不被竄改,不但為每人提供專屬的指紋,還使帳本每頁的交易紀錄形成一枚對應的指紋,且這指紋不是蓋在當頁,而是會蓋在下一頁。
如下圖:

舉例來說,帳本的第2頁會蓋上帳本第1頁形成的專屬指紋,蓋上第1頁指紋的第2頁則會形成一枚專屬指紋蓋在帳本第3頁。也就是說蓋在第3頁帳本上的指紋是由「帳本第2頁交易紀錄+帳本第1頁的專屬指紋」所形成。
因此當駭客H1修改一筆交易紀錄時,就使該頁的指紋產生改變,進而影響蓋在下頁的指紋,最終導致被竄改頁以後所有指紋都無法對應到交易紀錄,系統此時便會銷毀這些損壞的交易紀錄,使駭客H1無法成為最多頁數的帳本。
►駭客H2的挑戰-取得更多運算能力以掌握記帳權,使自己成為頁數最多的帳本
有鑑於駭客H1的教訓,H2研究後發現光竄改帳本沒用,還要取得記帳的權力,並讓自己的帳本變成頁數最多的帳本才有辦法成功竄改交易紀錄。
要獲得記帳的權力,關鍵在於贏得#STEP 3那場解題比賽,既然比賽是仰賴運算能力,那能取得越多運算能力勝率就越高,進而成為頁數最多的帳本的機率也越高。駭客H2在數學家M的指點下得知,若掌握整體區塊鏈計畫中總運算能力中的51%,在解題比賽中就幾乎無人能敵,且能確保新增帳本頁數的速度快過區塊鏈計畫中所有人。
要掌握這麼多的運算能力並不簡單,於是駭客H2和極力想讓革命派出糗的保守派聯手,採購數台超級電腦,頓時讓駭客H2佔有總運算能力中的30%,然而事與願違的是,駭客H2就算不斷採購新的超級電腦,過了好幾天運算能力佔有比率仍遲遲無法上升,他趕緊聘請數學家M研究此問題,數學家在區塊鏈計畫的總使用人數中發現問題的根源,原來在這幾天內由於駭客H1的失敗,使得信賴區塊鏈計畫進而加入的人數呈現爆炸性成長,進而拖垮駭客H2提升自己運算能力總占比的速度。不僅如此,在#STEP 3中系統將解題的運算過程設定為10分鐘,也就是每在帳本新增一頁,一定要耗費10分鐘,使得駭客H2在新增帳本頁數時,仍需耗費固定時間在運算上面,讓駭客H2更不可能趕得上使用人口增長的速度。
五、故事尾聲
在首領的努力推廣下,原始部落的居民漸漸體會到區塊鏈的便利性,因其能夠完成所有金錢轉移及儲存的功能,可取代銀行的大部分功能,造成原始部落的銀行紛紛倒閉,革命派認為這對他們的理念來說,是一項重大的里程碑,意味著原始部落未來將漸漸朝向透過一套能自動運作且具備去信任的機制來完成交易,免除許多交易安全上的問題。
註1:為方便說明,本文之故事內容皆為虛構,非真實歷史。
註2: 不熟悉的專有名詞會造成閱讀上的負荷,為使文章易於理解,文中將許多區塊鏈相關專有名詞改成白話版的名詞,但為避免看完後反而無法跟常用的專用名詞連上,故在底下整理出對應表供讀者參考。
(左邊為文章中使用的白話名詞,右邊為區塊鏈的專有名詞)
(1)信任的機器→區塊鏈技術
(2)介紹電子錢包時提到的「演算法」-SHA256演算法
(3)指紋→ID(也是由SHA256演算法得出)
(4)帳本→區塊
(5)比賽機制→工作量證明
(6)駭客2的挑戰→51%攻擊
(7)系統公告比賽訊息→全網廣播
