試玩Blockchain Demo:瞭解區塊鏈如何防止攻擊、挖礦電腦都在算什麼/許明恩
對比特幣有興趣的人,應該都會發現關於比特幣的入門文章中,一開頭都會提到「共享帳本(ledger)」的概念;讓初學者藉由帳本的概念來想像區塊鏈,是目前最普遍的方法。
[embed]https://medium.com/@smokingtuna/astro-hsu-4dd214a85e2b[/embed]
但是,我相信有很多人和我一樣,其實這輩子都還沒機會看過帳本長什麼樣子、用在哪裡、還有上面該記錄哪些資訊;當然,也就更難想像區塊鏈是如何運作的。
最近筆者發現一個叫做「Blockchain Demo」的網站,主要目的就是讓初學者一眼看懂「區塊鏈」是如何運作的。即使你不是技術人員,也能知道區塊上記錄著哪些資訊、如何防止被惡意篡改、以及挖礦的電腦上都在計算些什麼內容。
除此之外,你還可以像個駭客一樣,試著修改已經被記錄在區塊鏈上的資料,親身體驗需要花費多大的成本,才能篡改一台電腦上的區塊鏈紀錄、以及為什麼需要控制整個網路上過半的電腦運算能力,才可能成功攻擊區塊鏈。
理解區塊鏈如何運作之後,你就有能力自己判斷,用「共享帳本」來比喻區塊鏈是否合適。
接下來,我會把區塊鏈拆成「區塊」和「鏈」兩個部分來說明。
區塊:記錄交易資訊
加密交易資訊
區塊鏈上的每筆交易,都是經過加密運算後的一串亂數。使用亂數,是為了確保交易資訊在網路上的隱匿性,以避免因為每筆交易都在網路上完成,而被其他無關的人看光光。
「亂數」和「真實交易資訊」之間的關係,就像是「指紋」和「人」的關係一樣;每個人都有獨一無二的指紋,但是沒有人可以直接解讀一個陌生指紋,就知道它對應的人是誰。所以即使有人拿到亂數、又有電腦的輔助,也無法還原出這筆交易的內容,更遑論修改。
利用這個網頁上的服務,你輸入訊息(data)之後,網頁就會產生相對應的亂數(hash);只要訊息內容相同,亂數就會是一樣的。
工作量證明
之前提過,工作量證明就像是畢業證書,是個防止駭客惡意攻擊的防禦機制。
而在區塊鏈上的畢業證書,是一套檢查亂數的規則;例如區塊的寫入規則是檢查「亂數是否有『4個0』作為開頭」,只有符合規則的亂數,才是在這個區塊上合法運作的記錄。
電腦必須花時間運算、逐個嘗試成千上萬種不同可能,才能找到符合規則的亂數;規則越複雜,找到答案的難度就越高。概念和學生必須通過重重考驗,才能獲得畢業證書是一樣的。
在上述的網頁中輸入訊息之後,方框背景會由綠色轉為紅色;顯示紅色的原因,是亂數不符合區塊「以4個0為開頭」的寫入規則,而不符合規則的紀錄是無效(invalid)的。
因此,你必須點按「Mine」按鈕,讓電腦花點時間幫你找答案;找到答案之後,方框就會變回綠色,代表這筆交易可以被合法記錄在「區塊」上。
要改變一個區塊還算單純,但是要改變一串頭尾相連接的區塊「鏈」,就比較複雜了。
鏈:結合時間順序、共識機制的安全設計
時間順序:一條區塊鏈
區塊上除了紀錄交易資訊和區塊編號之外,還明確記錄了前一個區塊的運算結果,以作為排列先後順序的重要依據,並形成一條區塊「鏈」。
假設駭客要篡改3個小時前產生、編號「#377」區塊上的一筆交易記錄。除了#377區塊的亂數會跑掉,導致#377區塊整個失效、必須重新運算(Mine)來找到合法答案之外,還會讓後一個「#378」區塊也立即因為前一個區塊資料不同而失效。
此外,往後一整串彼此相連的區塊們也都會全部失效,必須逐個重新找出答案。這有點像是歹徒企圖侵入銀行結果警鈴大作,導致所有原本可以合法通關的指紋統統失效,必須重新建立指紋資料庫一樣,非常耗費時間與資源。
請點按這裡實際體驗一下:凡是更改任何一個區塊內容,都會導致後面所有區塊因為亂數(hash)規則不符而變紅失效;這時候,你得從第一個紅色區塊開始重新「Mine」,逐個修改完一整條區塊鏈。
要改變一台電腦上的記錄還算單純;但要讓網路上的其他電腦,都跟自己電腦有一樣的區塊鏈記錄,那就麻煩了。
共識機制:區塊鏈們
在區塊鏈網路上,一條被修改過、又重新被Mine過的區塊鏈,是很容易被抓出來的;因為網路上的每一台相關電腦,都各自存有一份獨立且完整的區塊鏈原始記錄。
兩相對照之下,即使這份被修改過的區塊鏈顯示為綠色合法,但因為區塊鏈內容和其他電腦上的區塊鏈紀錄完全不同,就顯得非常突兀。
由於整個區塊鏈網路是以「多數決」原則,來判斷哪條區塊鏈是合法的,因此所有電腦會繼續在「最多人有共識」的那條合法區塊鏈,再串上新的區塊。
因此,即使駭客改了自己電腦上的區塊鏈紀錄,還得想辦法改掉網路上過半電腦的區塊鏈紀錄,才能讓修改結果被區塊鏈網路「表決」接受;這絕對是一項大工程,而且難度非常高。
點按這裡進入示範網頁,你可以試著修改「Peer A」、「Peer B」、或是「Peer C」三部電腦上的區塊鏈內容;除了被修改的區塊鏈會變紅失效之外,即使重新Mine過整條區塊鏈,也會和另外兩台電腦上的區塊鏈紀錄不相同。因此,其他電腦並不會承認這條「特立獨行」的區塊鏈;既然篡改紀錄不被承認,也就不會產生效果了。
加入帳本概念
在每筆交易資料中,至少都會包含付款人、收款人、金額這三項資訊,而且每個區塊的容量都可以記錄多筆交易;無論區塊上哪個欄位被更改,都會改變產生出來的亂數,導致亂數不符合規則且區塊失效。
另外,區塊鏈除了記錄每筆交易之外,還得計算每個人在付錢的時候,錢包裡是真的有錢;因此,區塊鏈會藉由區塊彼此串連的特性,往前追溯歷史交易紀錄。經過一些加減法,就可以迅速確認付款人是否真的有足夠的錢,可以付給其他人了。
到這裡為止,筆者已經把區塊鏈的主要設計介紹完畢;推薦你到Blockchain Demo網站動手玩玩看,或是直接看這部17分鐘的英文解說影片:
[embed]https://www.youtube.com/watch?v=_160oMzblY8[/embed]
本文已獲作者授權並經本站重新編輯,未經書面許可禁止轉載。本站文章提供付費授權轉載或出版,請參閱授權說明、或來信 ask@tuna.to 洽詢。如果您喜歡這篇文章,請多按下方的「拍手」圖像幾次、或是分享到社群網站上!