iT邦幫忙

2021 iThome 鐵人賽

DAY 25
1
Security

學密碼學也猜不到你的手機密碼系列 第 25

DAY 25- 區塊鏈 Blockchain

「給我錢 !! ALL IN BITCOIN!!」


根據維基百科解釋,「區塊鏈是藉由密碼學串接並保護內容的串連文字記錄」。
首先,這裡的保護內容可能要提出來多做解釋。
所謂的保護內容,並不像我們先前進行加密的保護,
區塊鏈是不做加密保護的,
(在計帳功能上,但如果你要說私鑰變地址的話我們後天才會講到)
所有資料都是公開透明大家的看的到、甚至大家都有儲存的。
這裡的保護是指:不可竄改。

串連文字紀錄其實就是交易紀錄。
所有的交易紀錄會串連在一起,形成類似鏈的東西,
而新的交易就接在這過去所有交易的後面,
一直接續下去。

所以總結起來,
區塊鏈是一個可以將交易內容公開串接在網路上,
且無法竄改的技術。

我們會說區塊鏈是一個去中心化的技術,
所謂中心,就是資訊會經過他並由他處理的中介。
好比說今天你要轉帳給一個人,那這筆資料就會經過銀行,
銀行處理好資料之後儲存在他們自己的資料庫裡,
那麼銀行就是一個中心。

換個方面來想,「你是否有將錢轉入他人手裡」的這件事實就完全掌握在銀行手裡,
他說有就有,沒有就沒有。
如果銀行被駭,那這筆資料就有可能被改。

那麼這樣一個不可竄改的去中心化技術是如何達成的呢?

礦工

首先你要先知道這個工作,
在我的認知裡,只要有錢就會吸引人去做事,錢越多搶這個工作的人就越多。

而事實上礦工的薪資是以件計價,錢就蠻多的,
每打包一個區塊可以獲得 6.25 BTC 。
(如果是這幾天的話,那可是新台幣九百多萬)
每四年這個數字就會減半,也就是說2024年時打包一個區塊只會獲得3.125 BTC,
那還是蠻多的,如果 BTC 繼續漲的話,可能會比現在還多,但那不是我們要討論的事情。

至於為什麼叫礦工,大概只是因為他們做的事情很像挖礦。
你不一定挖得到黃金,但是只要挖到就是很大一筆錢,有點像是在簽樂透一樣。

礦工的工作叫做打包(挖礦)。
我們前面說到區塊鏈是一個串接文字紀錄的技術,
而打包包括 在網路上抓取交易訊息、整理成區塊、串接。
礦工要把上一個區塊(交易堆)的資訊加上這個區塊的資訊包起來接到鏈上。

上圖解釋打包是怎麼回事,只是其中的mining pool(礦池)就是一群礦工一起挖礦,再一起分配報酬而已。

為什麼說不一定挖得到礦,甚至說挖到礦的機率是極低的?
因為打包這件事情本身就是有難度的,而且難度極高。
每成功打包2016個區塊,系統就會自行計算現在全世界有多少人在進行挖礦,進而調整打包的難度,
他(比特幣系統)會將難度控制在大約每十分鐘全世界可以打包一個區塊。
以太幣系統則是每15秒一個。

讀者可以想想看,如果你是中本聰(區塊鏈發表者,真實身分不明)的話,
你要怎麼出一道題目,讓每十分鐘只有一個人答對,而且還可以控制難度。

工作量證明 PoW

答案是雜湊函數,如果你忘記雜湊函數的話請複習DAY 17。
我們在提到雜湊函數的時後說到知道一個雜湊值,要回推雜湊前數值是困難的,
如果你有大致看過我在DAY18介紹的 SHA-256的話,
你就會知道雜湊結果是完全無法預測的。

Bitcoin 鏈所使用的正是SHA-256,
礦工若要把新的區塊打包上鏈的話,
就必須將交易資訊接在一起成為一個數字,接著在這個數字中加入幾個數字,
重複運算這個數字的雜湊值,直到雜湊值符合一個條件:
那就是小於某個數字(由系統運算難度決定),換個說法就是雜湊值的前幾位數皆是0。

這件事情就叫做工作量證明(PoW, proof of work)。

從頭複習一下,
區塊鏈是串聯交易紀錄的去中心化技術,
所有交易紀錄都會公開在鏈上,而礦工負責將後續的交易堆(區塊)接上去,
他們需要進行SHA-256運算值到雜湊值符合開頭夠多的0。

只要有人成功,他就成功把區塊接上,並且廣播給其他節點,
其他節點收到資訊之後也要把此區塊打包上他們自己記憶體的鏈上(但是不會有報酬),
接著就繼續下一個區塊的打包工作。

What's in a Block

一個區塊裡面包含上個區塊的雜湊值、時間戳記、交易資料(Merkle root)、Nonce(number use only once)
礦工實際上做的事情就是不斷更改Nonce,使得整個區塊的雜湊值符合標準,
而這個符合標準的雜湊值就會被包進下個區塊中。
至於我們怎麼把這麼多交易紀錄放在一個區塊中,就要使用Merkle Tree。

(怕我解釋的不清楚:一個區塊裡面並不限於一個交易。)

Merkle tree 就是將每個交易(圖片中最下排)先做雜湊之後,
兩兩接在一起(concatenate)做雜湊,再兩兩接在一起雜湊,
一直下去最後會有一個最終值,而這個值就稱為Merkle Root。

Merkle Root 就會做為這些交易的代表值,
打包進區塊中。

an EXAMPLE

我們可以到 這個網站 看到所有的區塊資料。

隨便找一個區塊來看看
在我寫這篇的前一陣子剛打包了一個區塊,
我們就拿它來做介紹。

這段文字是由網站所整理,可以看到打包這個區塊的礦工是AntPool,他因此獲得6.25個BTC的打包費用、和0.061個BTC的小費。
在這個區塊裡面總共有將近 7207 BTC 的交易量。

在這個底下就是這個區塊裡所有資訊,
也可以看到此區塊所算出的HASH值以及使用的NONCE。
在更底下可以看到所有在此區塊裡面的交易資訊。

有興趣的讀者可以自行去看。


今天大致上了解區塊鏈的功能,知道礦工在做什麼。
但是礦工之間也是會出現分歧的,這時就會出現分叉。
我們明天就來看看分叉是怎麼回事。

圖片來源:
https://www.reddit.com/r/memes/comments/nosoem/is_this_a_blockchain/
https://www.edureka.co/blog/blockchain-mining/
https://commons.wikimedia.org/wiki/File:Bitcoin_Block_Data.png
https://changelly.com/blog/zh-hant/merkle-tree-explain/


上一篇
DAY 24- 憑證實察 Certificate
下一篇
DAY 26- 分叉 Fork
系列文
學密碼學也猜不到你的手機密碼30

尚未有邦友留言

立即登入留言