丁怡心,廖勇毅
(廣州民航職業技術學院航空港管理學院,廣州 510800)
2021年2月,比特幣價格再創新高,突破5萬美元每枚,比特幣再次成為世界焦點。比特幣的價值不在本文的討論范圍,但是它背后的區塊鏈技術具有非凡的革新意義,值得深入研究。
區塊鏈是一種數字化數據的存儲方法,數據是以區塊的形式出現,這些區塊鏈接在一起,為其內部數據賦予了不可變性。當一個數據塊被鏈接到了這條鏈上,其內部數據就再也無法更改了,里面的數據對任何人都是公開可見的。利用這項技術,可以用來記錄我們能想到的幾乎所有數據(例如,財產、合同、病歷等),同時不存在被篡改的風險。比特幣作為區塊鏈技術的杰出代表作,對我們研究區塊鏈技術有重要意義。
2008年,中本聰[1]發表比特幣白皮書《比特幣:一種點對點式的電子現金系統》,2009年,他發布了首個比特幣軟件,從此比特幣貨幣系統正式啟動。比特幣最重要的三個特征是:去中心化、不可篡改性及匿名性,這些特征保證比特幣系統長期穩定運行。同時比特幣系統規定以下內容:
(1)比特幣的總量是2100萬枚,任何人都不能修改,這是比特幣稀缺性的一種保障。
(2)比特幣伴隨區塊產生而產生。2100萬枚比特幣不是一次性產生的,而是伴隨賬本數據塊的產生而產生,每10分鐘會產生一個賬本數據塊,該賬本數據塊被稱作區塊,整個產生過程將用131年。
(3)每過21萬個區塊,比特幣獎勵減少一半。按照每10分鐘產生1個區塊,一天24小時則產生 24×6=144個區塊,210000÷(144×365)≈4,也就是說每過4年比特幣的獎勵會減半。所以從2009年開始每個區塊獎勵50枚比特幣;到2013年之后,每個區塊獎勵25枚比特幣;2017年以后每區塊獎勵12.5枚比特幣。
總結以上內容,有以下結論:①比特幣總量2100萬枚。②目前只剩下約300萬枚可以挖采。③每過4年每枚比特幣的挖采成本翻倍。因此在比特幣得到認可的前提下,這些正是它價格不斷升高的重要邏輯。
比特幣背后的區塊鏈技術是本文研究的重點,本節從區塊鏈結構、不可篡改性、工作量證明、防止攻擊及比特幣交易5個內容分析比特幣區塊鏈工作原理及相關核心技術。
區塊鏈是一種數字化數據的存儲方法,比特幣區塊鏈上存儲著比特幣的交易數據。它是一個龐大的交易記錄庫,每一筆比特幣交易記錄都可追溯,這些交易記錄庫保存在比特幣系統中的每個節點。目前比特幣區塊鏈中約有60萬個區塊,每個區塊不超過1 MB。區塊中的核心數據是交易記錄,區塊會按照時間順序從第一筆交易開始記錄,直到數據量達到1 MB為止,之后的交易會記錄下一個區塊中,直到數據量達到1 MB為止,以此類推。這些區塊一個接著一個鏈接在一起,如圖1所示。

圖1 區塊鏈結構
比特幣系統中所有節點都保存著同樣的區塊鏈數據,每個節點都是平等的,沒有類似銀行的中心服務器,即去中心化。區塊中的數據除了交易記錄,還有區塊頭信息,用于維護整個區塊鏈,關鍵字段說明如表1所示。

表1 區塊頭字段說明
區塊鏈體系中所有節點都保存著完整的區塊鏈數據,區塊鏈中的區塊一旦形成則不可被篡改,比特幣系統使用SHA-256哈希簽名技術實現不可篡改性。
每個區塊根據內部交易數據串生成一個簽名以保證區塊數據不可篡改,同時上一個區塊的簽名也包含在當前區塊的數據串內,當前區塊的簽名也包含在下一個區塊的數據串中,如圖2所示。

圖2 區塊鏈數據串簽名
通過這種鏈式的簽名方式,當某個區塊數據的任何改動都會導致后面所有區塊的簽名發生變化,為了維護比特幣區塊鏈的不可篡改性,其他用戶會拒絕同步更改后的交易信息,依舊維持原有的交易記錄。
一旦某交易已經被足夠多的區塊覆蓋,這之前的支付交易就可以被丟棄以節省磁盤空間。為便于此而又不破壞區塊的哈希值,交易將被哈希進默克爾樹[9-11],只有默克爾根被納入到區塊的哈希值中。
默克爾樹,就是對區塊內的每筆交易進行多次雙重哈希算法及兩兩一組拼接,形成默克爾根以保證區塊鏈每筆交易的不可篡改性。例如某區塊內有N筆交易,則默克爾根形成過程如下:
(1)對所有N筆交易分別進行哈希運算得到N個哈希值。
(2)對N個哈希值兩兩拼接組成N/2個結果。
(3)對N/2個結果分別進行哈希運算,并對運算結果再兩兩拼接組成N/4個結果。
(4)重復該過程直到剩下一個哈希值,這就是默克爾根。

圖3 merkle根形成過程
通過這種方式,把區塊內的交易信息都壓縮成一個默克爾根,區塊只需要保存區塊頭信息,區塊頭大小只有80 bytes,按照每10分鐘產生一個區塊,一年產生的數據量是:365×24×6×80 bytes=4.2 MB,極大地節省了節點的磁盤空間。
區塊鏈中的區塊一旦形成,區塊中的數據是不能被更改或增加的,新的交易數據只能打包存放在新增的區塊中。為了鼓勵人們打包新的區塊,比特幣系統會給打包者一定數量的比特幣作為獎勵,這個競爭記賬的過程就是所謂的“挖礦”,競爭者即所謂的“礦工”。
比特幣系統用工作量證明(Proof of Work,簡稱POW)機制來實現競爭結果的判定。工作量證明的思想是:根據哈希算法的不可逆性,從特定哈希值推算出輸入值是不可能的,唯一的辦法就是窮舉,通過不斷嘗試去尋找輸入值。
比特幣系統要求區塊的哈希值開頭必須由若干個0組成,比如第663721區塊的哈希值要求以19個0開頭,輸入數據則由交易數據、父區塊哈希值以及一個隨機數組成,交易數據和父區塊哈希值是固定的,只能通過不斷嘗試以尋找滿足要求的隨機數。
比特幣區塊中用Nonce字段保存找到的隨機數。競爭者找到滿足要求隨機數后即可打包新區塊,并廣播到所有比特幣節點,其它節點驗證通過后將該區塊接入原來的區塊鏈,并繼續新一輪的競爭。

圖4 工作量證明
在極少數情況出會出現兩個或以上的競爭者同時找到滿足要求的隨機數,例如A、B兩位競爭者同時找到滿足要求的隨機數,他們都會把自己打包的新區塊廣播到其他節點中,比特幣網絡節點中有部分人先收到A的區塊,另一部分人先收到B的區塊,于是這些節點會分別維護著不同的鏈,根據中本聰共識機制(最長鏈為合法鏈),這兩條鏈都是最長鏈,所以都是合法鏈,這時區塊鏈就出現了分叉。礦工們分別在自己維護的鏈條上繼續挖礦,如果新的一輪競爭中兩個鏈條上的新區塊又同時產生(基本不可能發生),則分叉繼續合法存在,否則某一分叉先產生新區塊,由于這時該鏈是唯一最長鏈條成為合法鏈,于是所有節點又聚集過來共同維護該鏈條,另外一條鏈因無人維護則形成孤塊。

圖5 區塊鏈分叉
比特幣系統為使平均出塊時間基本維持在10分鐘,會定期根據過往的出塊時間調整挖礦難度,即調整區塊哈希值開頭0的個數。
比特幣系統中如果出現惡意節點試圖修改某區塊的交易記錄,對于該區塊,惡意節點需要做的事情是:修改交易記錄,并重新找到工作量證明隨機數以生成該區塊哈希值。這意味著在原來鏈條中出現了分叉,根據中本聰共識機制(最長鏈為合法鏈),所有其他節點都會維護原來最長的鏈條,該分叉只有惡意節點維護。于是惡意節點必須繼續修改后面的區塊直到它鏈條比原來的鏈條更長,這些修改才能得到認可。也就是說惡意節點的算力必須大于全網其它節點CPU算力的總和,它的修改才有可能成功,這在當前龐大的比特幣網絡是不可能實現的,并且隨著比特網絡的越來越壯大變得更不可能。

圖6 惡意攻擊
另外“挖礦”激勵機制有助于鼓勵節點保持誠實,當一個惡意節點有能力聚集巨大CPU算力時,他可能會發現遵守規則參與“挖礦”比破壞規則篡改區塊帶來更大的效益。
比特幣系統中沒有余額的的概念,它使用的是UTXO模型(Unspent Transaction Outputs,未使用過的交易輸出),比特幣錢包軟件遍歷與當前錢包地址相關的交易記錄,用輸入該地址的金額減去從該地址輸出的金額得到的結果即UTXO,這就是錢包余額。
一筆交易若要生效必須滿足兩個條件:①這筆交易必須包含一個有效簽名,來自它所花費的UTXO的擁有者。②被花費的UTXO的總金額必須大于等于該交易產生的UTXO總金額。
圖7展示了與Roger相關的交易,在這過程中Roger從Jack賬戶獲得6枚比特幣,而Roger在一筆交易中要轉賬5枚給Tim,然后自己剩下1枚比特幣。具體過程如下:

圖7 比特幣交易記錄
(1)在交易001中,Roger從Jack賬戶中獲得6枚比特幣,這個交易中包含一個輸入和一個輸出,輸出包含當前輸出的索引、金額、鎖定腳本和接受者的公鑰。鎖定腳本的作用是,鎖定只有Roger才能使用這筆輸出。要使用這個UTXO,就必須要證明自己是Roger。
(2)Roger要發送5枚比特幣給Tim。提交這筆交易之前Roger首先要確認兩件事:①自己有足夠的“余額”去支付這筆交易。②證明自己是這些余額的擁有者。要計算用戶的余額,就要遍歷Roger的所有交易記錄,這里,我們Roger就只有001一筆交易,即Roger當前的余額是6枚比特幣,大于所要支出的5個比特幣,所以交易可以進行。要證明自己是這6枚比特幣的擁有者,需要解鎖腳本(包含了Roger用私鑰對上一筆交易輸出的簽名),使用Roger的公鑰對Roger的私鑰簽名進行驗證即可證明Roger為擁有者。
(3)創建交易002,該交易的輸入引用了交易001中索引0的輸出,同時創建2個輸出,一個是給Tim的5個比特幣,包含一個鎖定腳本,該鎖定腳本限定只有Tim才能使用;另一個是找零產生的輸出,發送給Roger的1個比特幣,包含一個鎖定腳本,限定只有Roger本人才能使用。
(4)交易創建完成后,向比特幣網絡廣播出去,比特幣網絡中的其他節點會驗證該交易的有效性,當比特幣網絡確認這筆交易,且在下一次挖礦競賽中將該交易打包進區塊中并得到全網共識確認后,這筆交易就確認有效了。
通過這種設計,比特幣系統中每一筆交易的來源都可以驗證真實性和合法性,攻擊者無法偽造交易,也不能冒用其他人的賬號進行交易。同時,由于每一枚比特幣都可被追溯,所以避免了雙重支付的發生。此外,交易中的賬戶地址是由用戶公鑰變換而來,與身份信息無關,因此不能直接根據交易記錄推測交易者的身份信息,從而實現匿名性。
比特幣誕生短短12年,價格屢創新高令世人矚目,其背后的區塊鏈技術受到廣泛關注。拋開市場價值,區塊鏈技術去中心化、不可篡改性及匿名性的特點為現代互連網技術提供了重要的參考意義。本文介紹了比特幣,并從區塊鏈結構、不可篡改性、工作量證明、防止攻擊及比特幣交易5個內容分析比特幣區塊鏈工作原理及相關核心技術,讓大家對比特幣及區塊鏈有更直觀的了解及認識。