article_man_pic

科技台灣  2017-05-18 21:00  A20170509001 
article_pic
由於比特幣不適合即時大量的小額交易,而且比特幣在法規上存有疑義無法被主管機關接受,因此有人將比特幣的部分技術(主要是保護資料無法篡改的技術)抽離出來尋找新的應用,並且取了新名字「區塊鏈(Block chain)」。所以到底這三種技術的是怎麼做的呢?

 

❒ 比特幣帳本(BTC ledger)

比特幣帳本是由一個一個的「區塊(Block)」連接而成的「鏈結(Chain)」,因此這種技術又稱為「區塊鏈(Block chain)」,如<圖一>所示,每一個區塊記錄著付款人與收款人以及交易金額,每一個區塊都記錄了許多筆交易,區塊與區塊之間再鏈結起來,例如:區塊3鏈結到區塊2,再鏈結到區塊1,最後再鏈結到區塊0。知識力www.ansforce.com。

 

 
圖一 比特幣帳本示意圖。
資料來源:杜宏毅博士,Block Chain的前世今生與未來,台灣網路認證公司。

 

<圖一>畫出來的只是示意圖,實際上比特幣帳本並不是像Excel一樣的表單,基本上比特幣是一種虛擬電子貨幣,因此比特幣帳本其實就是一個電腦程式,裡面有許多欄位,如<圖二>所示,其中包括:

➤雜湊(Hash)
“hash”:利用雜湊演算法(Hash algorithm)計算出雜湊值(Hash value)。
➤表頭(Header)
“previousblockhash”:前一個區塊(Block)的雜湊值(Hash value)。
“difficulty”:雜湊(Hash)必須小於「困難指數(Difficulty)」。
“time”:代表這個區塊形成的時間,以Unix作業系統格式表示。
“nonce”: 計算雜湊值(Hash value)所使用的參數。
“merkleroot”:儲存「交易(Transaction) 」的「摘要(Summary)」。
➤交易(Transaction)
“tx”:儲存「交易(Transaction)」的欄位,每一個區塊可以儲存多筆交易。
➤其他欄位
“confirmations”:代表這個區塊已經被35561個節點(Node)確認過了!
“height”:代表這個區塊在比特幣區塊鏈中的排序為第277316個。

 


圖二 比特幣帳本(BTC ledger)。
資料來源:杜宏毅博士,Block Chain的前世今生與未來,台灣網路認證公司。

 

雜湊演算法(Hash algorithm)

雜湊演算法是一種從資料中建立「數位指紋(Digital fingerprint)」的方法,可以將任何長度的原始資料轉換成一個長度較短的「雜湊值(Hash value)」,而且也很難由雜湊值反推原始資料,等於是把原始資料加密了一樣,某一段資料對應到某一個雜湊值,不同資料具有不同雜湊值,就好像不同人具有不同指紋一樣,所以稱為「數位指紋(Digital fingerprint)」。常見的雜湊演算法有下列三種:
➤訊息摘要演算法(MD:Message Digest):MD2、MD3、MD4、MD5等。
➤安全雜湊演算法(SHA:Secure Hash Algorithm):SHA-0、SHA-1、SHA-2(SHA-224、SHA-256、SHA-384、SHA-512)、SHA-3等。
➤RIPEMD-160:RACE Integrity Primitives Evaluation Message Digest。

 

假設小明支付小華100元,並且以電子文件記錄兩人各執一份,後來小明篡改為「小明支付小華200元」,此時即使小華拿出原本的電子文件,也只是各執一詞,無法證明那一份才是對的,那麼我們要如何證明小明有篡改文件呢?如<圖三>所示,假設使用雜湊演算法(SHA-256)計算出電子文件「小明支付小華100元」的雜湊值為「01011010」,如果電子文件被篡改為「小明支付小華200元」則雜湊值為「01011011」,因此我們只要比對雜湊值,就可以知道文件是否有被篡改。

 

 

圖三 雜湊演算法示意圖。
Icon made by Freepik from www.flaticon.com

 

區塊(Block)的意義

「區塊(Block)」是指電腦中的一組資料,以事先設定好的欄位與格式儲存,我們可以將<圖二>的比特幣帳本看成是一個區塊,我們的目標就是要將這個區塊的資料「封鎖(Block)」起來讓別人無法篡改,比特幣帳本的保護機制如下:
1.將交易(Transaction)資料的摘要(Summary)儲存在”merkleroot”欄位內。
2.將表頭(Header)資料經由雜湊演算法(SHA-256)計算後儲存在”hash”欄位內。
3.要變造交易(tx)就必須重新製作摘要(merkleroot)。
4.要重新製作摘要(merkleroot),就必須重新計算雜湊(hash)。
5.如果無法重新計算雜湊(hash),就無法變造交易(tx)。
6.利用以上機制將「區塊(Block)」內的資料「封鎖(Block)」起來。

 

問題是,如果「重新計算雜湊(hash)」很簡單,則這整個保護機制就無效,因此科學家發明了「條件雜湊(Conditional hash)」,規定「雜湊(Hash)」必須小於「困難指數(Difficulty)」,讓雜湊很難重新計算,而保護「交易(Transaction)」的內容不被篡改。

 

比特幣的採礦(Mining)

講到比特幣大家一定常常聽到網路上有許多人在「採礦(Mining)」,到底什麼是比特幣的採礦呢?我們先來看看比特幣的採礦步驟:
1.猜測一個nonce值。
2.用安全雜湊演算法(SHA)計算「雜湊(Hash)」。
3.如果計算出「雜湊(Hash)」小於「困難指數(Difficulty)」則成功建立一個區塊(Block),可以獲得50btc做為獎勵。知識力www.ansforce.com。
4.如果計算出「雜湊(Hash)」大於「困難指數(Difficulty)」則重複上面步驟。

 

我們將猜測nonce值,計算雜湊(Hash)的動作稱為「採礦(Mining)」,而我們所要採的「礦」就是計算出一個「區塊(Block)」其「雜湊(Hash)」小於「困難指數(Difficulty)」,找到了這個區塊就可以把「交易(Transaction)」打包「封鎖(Block)」起來。進行採礦的人稱為「礦工(Miner)」,計算出一個區塊可以獲得50btc的酬勞,如果其他支付交易有給手續費,則礦工還會獲得手續費。比特幣設計大約每10分鐘採出一個區塊,每採出21萬個區塊(大約4年)酬勞減半,因此比特幣總數不超過2100萬個(btc),總數固定可以提升比特幣的價值。

 

【動動腦】

比特幣的礦工計算出一個區塊可以獲得50btc的酬勞,大約每10分鐘採出一個區塊,每採出21萬個區塊(大約4年)酬勞減半,有沒有人想要試著算算看為什麼這樣比特幣的總數就會不超過2100萬個(btc)?

(提示:這其實是個無窮等比級數唷!答案將在下週公開。)


比特幣2009年發行礦工酬勞50btc,2012年12月第一次減半酬勞剩下25 btc,2016年7月第二次減半酬勞只有12.5btc,酬勞下降使手續費成為採礦動機。為了維持大約每10分鐘採出一個區塊,產生新區塊的難度會定期調整,每採出2016個區塊(大約兩週)會自動調整接下來2016個區塊的採礦難度。比特幣礦工最早使用Intel或AMD的中央處理器(CPU:Central Processing Unit)產品來挖礦,2013年礦工開始使用圖形處理器(GPU:Graphics Processing Unit)、現場可程式化邏輯陣列(FPGA:Field Programmable Gate Array),甚至特定應用積體電路(ASIC:Application Specific Integrated Circuit)投入使得個人礦工已經沒有收益。知識力www.ansforce.com。

 

鏈結(Chain)的意義

區塊鏈(Block chain)的「鏈結(Chain)」是指將不同的區塊以「 “hash”與“previousblockhash”」鏈結(Chain)起來,如此可以大大增加資料的安全性,如<圖二>所示,在每個區塊的「表頭(Header)」裡有「前區塊雜湊(Previousblockhash)」這個欄位。把前面一個區塊的雜湊(Hash)放進後面一個區塊的表頭(Header),而表頭用會用來計算這個區塊的雜湊(Hash),這樣等於是把前一個區塊和後一個區塊「鏈結(Chain)」起來。

 

如果有人想要篡改區塊一內的「交易(Transaction)」,由於交易會影響表頭(Header)內的摘要(merkleroot),必須重新計算區塊一的「雜湊(Hash)」;區塊一的雜湊(Hash)儲存在區塊二表頭(Header)內的「 “previousblockhash”」,因此必須重新計算區塊二的「雜湊(Hash)」,依此類推。


假設這個區塊鏈有100個區塊(Block),則篡改一個區塊的交易(Transaction)就必須重新計算100次雜湊(Hash),在合理的時間內根本不可能,我們就利用這種方法使區塊鏈「牽一髮而動全身」,當區塊鏈(Block chain)愈長,前面的區塊(Block)就被保護的愈安全,而且每個結點都有比特幣帳本,只篡改一個節點也沒有用。知識力www.ansforce.com。

 

我們複習一下,「區塊(Block)」是指電腦中的一組資料,以事先設定好的欄位與格式儲存,我們使用「條件雜湊(Conditional hash)」,也就是計算出來的雜湊(Hash)必須小於困難指數(Difficulty),將這個區塊的資料「封鎖(Block)」起來,區塊與區塊之間再以「雜湊(“hash”)與前區塊雜湊(“previousblockhash”)」給「鏈結(Chian)」起來,使區塊鏈「牽一髮而動全身」,在合理的時間內根本不可能篡改。看到這裡大家是不是真的了解區塊鏈的意義了呢?下回再聽到別人說區塊鏈,別忘了問問對方到底什麼是「區塊(Block)」?又「鏈結(Chian)」了什麼呢?當對方吞吞吐吐說不清楚,別忘了把這篇文章分享給他唷!

 

【請注意】上述內容經過適當簡化以適合大眾閱讀,與產業現狀可能會有差異,若您是這個領域的專家想要提供意見,請自行聯絡作者;若有產業與技術問題請參與社群討論。


【延伸閱讀】其他詳細內容請參考「雲端通訊與多媒體產業,全華圖書公司」。<我要買書

 

我的評分
張淑芬   2017-06-03
您好,文中提到採礦的礦工酬勞會遞減,請問此概念係考量已有足夠安全性的區塊數目,或是單純為了維持比特幣總量管制的價值。
科技台灣   2017-06-06
當初比特幣發明人設計這個機制單純為了維持比特幣總量管制的價值,不過也因為如此目前對礦工的吸引力變得愈來小了!至於未來會不會修改這個規則,目前比特幣社群還沒有什麼結論。
Ocean   2017-06-29
請問在共產極權世界,網路通道被嚴格監控與管制,這是否會影響區塊鏈的節點同步問題?
科技台灣   2017-07-01
這個是有可能,不過目前應該大陸官方並沒有阻擋,相反的,大陸的比特幣是全球發展最快的,將近一半的礦工都是由大陸的資工專家擔任,這個在某方面也反應出大陸的資訊工業與軟體工業的實力強大。