區塊鏈跟比特幣最近熱到發燙,沒幻想過靠它致富(甚至覺得仰賴鉅量能源運作的虛擬貨幣很不環保),倒是對其原理奧義充滿興趣。先前看過不少深淺文章,限於慧根,對其運作原理仍一知半解,知道所謂礦工挖礦類似暴力破解雜湊(Hash)函式,對為什麼驗證交易真實性會扯上破解雜湊值毫無概念。
今天看完一部介紹短片(其實不算短,26分20秒)豁然開朗,欣喜之餘推薦給跟我一樣有興趣了解比特幣挖礦在挖什麼碗粿的同學:(記得開中文字幕。影片還算淺白,但真心覺得要懂公私鑰、雜湊碼,有粗淺密碼學基礎才能下嚥)
隨手筆記重點如下:
- 加密貨幣(以下以比特幣為主)的基礎是一份公開流傳的帳冊,記載全市場每一筆交易記錄(例如Alice給Bob 100元)
- 在帳冊加入交易記錄時,交易者需以其私有金鑰對該記錄加上數位簽章,以產生不可否認性
- 交易記錄包含時間戳記及唯一序號,即使兩筆記錄的交易對象與金額相同,數位簽章也不會相同,故無法靠複製產生重複交易記錄
- 帳冊被拆成多個區塊,每個區塊附有依其內容產生的雜湊值(SHA256),下一個區塊需包含前一區塊的雜湊值,串連成所謂的區塊鏈
- 篡改某個區塊內容,會改變該區塊的雜湊值,連帶下一個區塊跟下下一個區塊的雜湊值也要修改
- 為讓篡改難如登天,建立區塊時需加入一段內容讓SHA256雜湊值的前N個(例如60個)位元組剛好是0,這只能靠嘗試各種數字組合暴力破解
- 礦工負責傾聽網路上的交易訊息,設法用最短的時間嘗試在包含新交易記錄的區塊加入不同內容組合,讓區塊SHA256前60位為零,符合此一條件就算區塊建立完成,馬上廣播出去,第一個建立區塊的礦工可以獲得一定數目的比特幣做為獎勵
- 礦工建立區塊的過程就稱為挖礦,由於只有第一個建立區塊的礦工獲得獎勵,即使擁有強大的運算力,也要憑運氣拼人品,還真的跟挖礦淘金沒兩樣
延伸閱讀: 挖比特幣的礦工都賺瘋了:直擊中國四川、東北、內蒙古的超級大礦場 - TechOrange - GPU原本用於3D圖形運算,其運算原理剛好與SHA256吻合,用來破解SHA256效率高成本又比用CPU低,故成為挖礦機主流
- 為防止有人偽造交易,比特幣有個防止偽造交易的終極武器—當區塊鏈出現多個版本時,以較長的一份為準
- 建立區塊需要可觀的運算能力(等同暴力破解SHA256),除非篡改區塊者擁有的超過全球礦工總和一半以上的運算能力,才可能維持偽造版本的區塊鏈長度不被直實版本超越,一旦被超越,篡改版作廢便白忙一場
- 比特幣規定每10分鐘產生一個區塊,當參與的礦工數愈來愈多、計算機能力愈來愈強大,可透過提高建立區塊SHA256所需的起始0長度(例如從60個提高到72個),藉以調節挖礦難度
- 2009年開始時建立一個區塊礦工可得到50枚比特幣獎勵,2012 Nov起是25枚,2016 Jul起12.5枚,2020 Feb起6.25枚,每4年減半,故總數2100萬個,永遠不會超過
- 區塊建立獎勵會不斷遞減,礦工的另一個收入來源來自支付者額外支付交易手續費
同場加映:另一部有趣的相關影片,破解SHA256到底有多難?
SHA256相當於40億相乘8次,假設:
最頂級的GPU每秒可以算10億次SHA256,我們在電腦塞進多顆GPU,做成一台一秒可完成40億次SHA256計算的超級電腦。
假設Google所有伺服器運算能力的1000倍才能跟40億台上述超級電腦不相上下。
假設地球的人口有一半的人,每個人擁有1000家Google的運算能力。
假設銀河系1%的恆星有一顆像地球的行星,剛好有4億人口每個人持有1000家Google的運算力。
假設宇宙碰巧就有40億個像銀河系這樣有一堆地球且人人有Google的星系。
請以上40億個星系上的所有地球,人人都拿出自己的1000倍Google運算能力,一起算上5070億年(差不多是宇宙年齡的37倍),將會有40億分之1的機會可以破解SHA256。