3分鐘了解區塊鏈 -Part 2
去中心化數位貨幣的誕生
編者序:從《3分鐘了解區塊鏈》- Part1中我們了解「數位貨幣的起源與挑戰」,Part 2 將真正帶到區塊鏈「如何運行」以及如何基於這些基礎創造現在的數位貨幣(本篇以比特幣為例)。
我們先來談談現金吧!
現金(鈔票)是一項非常聰明的發明,它容易辨識卻又難以偽造。當你去咖啡廳用現金購買一杯咖啡,並不會有任何第三方的機構跳出來驗證你的鈔票真偽或是幫咖啡廳受理該筆交易,也就是說「現金的支付」完全是以點對點(P2P, Peer-to-peer)的去中心化方式進行,也就是說只要你願意出錢購買這杯咖啡,而店家點頭同意賣你就可以了,這個過程中不需要任何第三方機構當作仲介。在買咖啡的過程中,唯一需要受到檢視的個人資料只有「你的人需要出現在店裡」。因此,我們若想要將數位貨幣用於日常的購買情境,那麼最基本需要比照現金的使用情況,把數位貨幣做得:
- 難以偽造
- 可以在買賣方之間自由轉移而不需要第三方機構的認證(去中心化)
這篇文章將解釋現在的數位貨幣是如何做到這兩件事情。
數位簽章的發明
早在E-gold發明以前(E-gold的緣起請見前一篇文章),人們就已經開發出「數位簽章」這類難以被偽造的數位認證方式,這樣的認證方式已經廣泛的被認可。
數位簽章是一個使用數學演算法以認證訊息的方法,它被廣泛的用於任何內容形式的數位訊息。而數位簽章通常經過層層的加密,其中會經過三個步驟:
- 生成私鑰以及一組相對應的公鑰。
- 經由數位簽名加密演算法,結合一則訊息及一組私鑰產然後生出一個簽章。
- 再藉由數位簽名驗證演算法,結合電子簽章及加密過的訊息產生一組公鑰,這組公鑰會決定是否該同意或拒絕使用者的存取權限。
上列三點乍看之下有點難理解,讓我們拿我們常用的印鑑(印章)做為比喻:
傳統的中國印鑑常由天然的素材製成,例如石頭、木頭、象牙…等,因此每個印鑑的表面材質都是獨一無二,且難以被複製的。相較於手寫簽名,官方單位或政府機關更偏好用這樣的印鑑作為認證方式,以防止偽造。它的好處還包含,當有需要簽署多頁文件時,也可以蓋以騎縫章,進而防止某些頁面的更改或是可以馬上發現有頁面遺漏。至今許多亞洲國家還是保持使用印鑑的習慣。
那麽,數位文件應該要如何認證呢?請參考下圖。
從圖片中我們看到,你擁有的私鑰(Private Key)也就是印鑑,代表著擁有帳戶(Account)的所有權,你可以藉由它來產生出一組代表你的數位簽章(Digital Signature)如印鑑蓋在文件上的痕跡,並依照名稱產生一組可供任何單位查閱的公鑰(Public Key)如同每個人都可以閱讀印鑑蓋印的文字,也就是說,任何認得「印鑑蓋印」的單位可以快速的辨別印鑑的真偽,進而同意或是拒絕接受閱讀訊息的要求。
同理可證,我們可以把「數位貨幣」當作那則經過簽章加密過的訊息,因此它非常難被仿造,也就是說,它符合先前提到的(1)難以偽造 這項條件。但這樣的做法是有可能將同一個貨幣傳送給兩個以上的人,也就是所謂的「雙重支付(一幣多付)」,亦即同一個一塊錢可以被花用兩次以上。這個問題甚至比先前所提到的問題來得嚴重,也因為有這種可以無限傳送數位貨幣的可能性,讓許多早期數位貨幣的發展受到限制。
如何避免數位貨幣無限制的發行?
比特幣的創辦人Satoshi Nakamoto如何解決這個問題呢?
我們先用一個簡單的例子來看:這邊有三個人 — 愛麗絲(Alice)、鮑伯(Bob)以及卡爾(Carol),他們三個都想要使用數位貨幣做交易,且三個人的錢包裡都只有一個數位貨幣,而三位參與者也都同意下列的交易規則:
- 任何新的交易都要經過電子簽章並將交易金額與所有人分享。
- 每個人在交易完成後必須在自己的表格上更新所剩餘額。
- 如果一個貨幣被同時被交易了兩次以上,以第一個被記錄在表格上的交易為基準,若同一筆已經有表格被記錄,則第二個重複的交易則會直接被忽略,不會被記錄下來。
- 每個人每天都需要核對一次彼此的表格,如果大多數的交易金額相符,則對應的餘額會在核對後被確認「正確無誤」。
遵照上述的規則,這三個人的交易會如同下圖:
表格一(初始帳戶餘額)
Account Balance
--------- ---------
Alice 1
Bob 1
Carol 1
首先,鮑伯將一個貨幣傳送給愛麗絲,而卡爾將一個貨幣傳送給鮑伯。所有人都在表格上登記了自己的帳戶餘額,且這天結束之前,主要的交易者都確認這樣的餘額沒有錯誤,並產出一個新的餘額表,如同下列所示:
表格二 (帳戶餘額)
Account Balance
--------- ---------
Alice 2
Bob 1
Carol 0
一切運營順利,你可以想像接下來同樣的流程會怎麼進行。每個人每天根據交易量更新自己的表格,在一天結束之前則會共同產出一個新的帳戶餘額表。自此愛麗絲、鮑伯以及卡爾經過簡單的多數決達成了共識,這個方法做到了基本的去中心化以及點對點(Peer-to-peer)交易。
然而,有一個人性黑暗面的問題可能發生:有一天,鮑伯與卡爾為了賺錢私下勾結,合力偽造彼此的交易並仿造帳戶餘額,在這個多數決的系統下,愛麗絲的帳戶會被迫接受這些交易,而這個簡易的去中心化系統就失去了準確度,因為在這個系統的運作下,「帳戶餘額是否正確」是由多數人決定的
為了防治這種多數人私相授受的可能性,我們採用一種有效的方法 — 也就是「隨機」挑選一位參與者的表格,並將表格設定為「正確無誤」作為判斷基準,讓人不知道哪時候自己的表格會被挑到而難以假造。但這種方法在以「人」為單位的時候尚可施行,但若參與對象是「電腦」的時候,我們還是會遇到一個問題 — 擁有許多電腦的人有比較大的機率獲選成為那個「正確無誤」的表格。又為了防範這件事情發生,我們發明了「工作量證明(Proof of Work, POW)」機制。
區塊鏈順利運轉的關鍵:工作量證明
「工作量證明(Proof of Work, POW)」是一個讓任一個運算節點(電腦)花費大量時間和運算資源的「計算難題」,它極為複雜且難以計算,但這個數值一但被運算出來,其他人便可以輕易地拿該組數值去做答案驗證。這樣的「工作量證明(Proof of Work, POW)」就像是在解決*數獨(Sudoku),儘管解題需要花費大量的時間與精力解題,但任何知道題目的人都可以立即「驗證」正確的答案。
*數獨(Sudoku):如上圖,是一種邏輯數學填充遊戲。玩家須以數字填進每一格,而每行、每列和每個宮(即3x3的大格)有齊1至9所有數字。遊戲設計者會提供一部分的數字,使謎題只有一個答案。
我們將「工作量證明(Proof of Work, POW)」套用在每日帳戶餘額表格的確認上,讓所連結電腦的運算成本變高,並且讓它們不斷計算難題。至於這些每天需被確認的餘額表格則被放上新的計算題以及舊的計算題。(你很快就會明白為什麼連舊的計算題都需要被放在表格上。)
擁有了「工作量證明(Proof of Work, POW)」機制,我們得以重新立定新的交易規則:
- 任何新的交易都要經過電子簽章並將交易金額與所有人分享。
- 每個人在交易完成後必須在自己的表格上更新所剩餘額。
- 如果一個貨幣被同時被交易了兩次以上,以第一個被記錄在表格上的交易為基準,若同一筆已經有表格被記錄,則第二個重複的交易則會直接被忽略,不會被記錄下來。
- 每個人每一天都需要幫自己的表格解開「工作量證明」難題。
- 一但解開「工作量證明」難題,必須將紀錄更新在自己的表格上,並且分享給大家以利驗證。
- 人們通過在這條鏈上創建下一張表格,經由接納先前表格中的計算來表達他們確認表格皆「正確無誤」。
事實上,當我們將所有表格「鏈結」在一起時,任何微小的更動都必須要重新解開一次難題 — 不只是單一表格必須被破解,而是所有的表格都需要可以套用同一組答案。為什麼必須這樣做呢?因為當其中任何一個表格用「工作證明」解開了難題,則必須要將「工作證明」套用在其他表格上面,也就是說,當我們在表格鏈結的後面再加上一個新的表格時,所有表格都必須再做一次「工作證明」。
從上述表格的例子中,各位讀者應該有猜想到這些「表格」所代表的就是區塊鏈上一個個區塊,而當所有表格相互「鏈結」時,我們就稱它為「區塊鏈」(雖然區塊鏈講起來很順口,但我私下還是喜歡稱它為「工作證明鏈結(Proof-of-work chain)」,因為他被由工作證明所運算出來的難題所連結著)。
下一篇我們一起來了解比特幣 — 這個所有區塊鏈應用的源頭的創辦者為什麼要創造數位貨幣。
原文作者 Sean Moss-Pultz, Co-Founder and CEO at Bitmark:https://blog.bitmark.com/part-2-understanding-the-blockchain-7c5af7e1e02e
Bitmark是一個專為數位環境所設計的資產註冊系統 | 運用區塊鏈幫助內容生產者註冊數位資產所有權。官方網站:https://bitmark.com/
合作請洽:Jessie@bitmark.com