伍瑋/WU Wei
(福建師范大學(xué),福建福州350007)
數(shù)字貨幣是一種以電子形式存在的貨幣,不再像虛擬貨幣一樣局限于網(wǎng)絡(luò)游戲,而是能夠像法幣一樣購(gòu)買真實(shí)的物品。密碼貨幣是數(shù)字貨幣的重要組成之一,利用嚴(yán)謹(jǐn)?shù)拿艽a學(xué)原理進(jìn)行貨幣的產(chǎn)生、記賬和交易。自從第一個(gè)密碼貨幣即比特幣誕生后,諸如以太坊、門羅幣和零幣等一系列密碼貨幣相繼面世,密碼貨幣市場(chǎng)呈現(xiàn)井噴式發(fā)展;但是密碼貨幣在具有價(jià)值的同時(shí),也伴隨著一定的風(fēng)險(xiǎn)。分析密碼貨幣的生成和運(yùn)行原理能夠讓人們對(duì)數(shù)字貨幣有更深的理解,從而做到理性投資。
比特幣是最具有代表性的密碼貨幣之一,后續(xù)的密碼貨幣在一定的程度上是延續(xù)比特幣的技術(shù)原理。當(dāng)然后續(xù)的密碼貨幣在共識(shí)機(jī)制、交易匿名性以及數(shù)據(jù)隱私保護(hù)方面都取得了較大突破。例如:以太坊[1]利用權(quán)益證明(PoS)機(jī)制,大幅度縮減挖礦開(kāi)銷的計(jì)算資源;門羅幣利用可鏈接環(huán)簽名技術(shù)[2],為發(fā)送者提供匿名保護(hù),同時(shí)可以檢測(cè)雙重支付;零幣[3]采用非交互零知識(shí)證明機(jī)制[4]進(jìn)一步提高了匿名性,實(shí)現(xiàn)了發(fā)送者和接收者匿名以及數(shù)據(jù)隱私,但是計(jì)算和存儲(chǔ)開(kāi)銷增大。本節(jié)主要介紹比特幣的生成背景和研究意義。
比特幣的誕生充滿了神奇色彩,其中包含了密碼學(xué)、經(jīng)濟(jì)學(xué)的許多前沿理論。它基于前人提出的理論基礎(chǔ),并充分結(jié)合了當(dāng)時(shí)特殊的社會(huì)環(huán)境背景。
(1)密碼學(xué)、經(jīng)濟(jì)學(xué)的理論基礎(chǔ)是比特幣誕生的內(nèi)在條件。1976年,HAYEK[5]在《Denationalization of Money》一書中提出只有貨幣非國(guó)家化才能控制貨幣發(fā)行量,避免因不斷發(fā)行而導(dǎo)致貨幣貶值的命運(yùn)。1981年,LAMPORT L[6]提出了哈希鏈的概念,即每輪哈希函數(shù)的輸入均為上一輪輸出的哈希值,從而為數(shù)據(jù)提供完整性服務(wù),哈希鏈可以視為比特幣的核心技術(shù)區(qū)塊鏈雛形。1982年,CHAUM D[7]提出盲簽名的思想,目的是為了構(gòu)建不可追蹤的密碼學(xué)網(wǎng)絡(luò)支付系統(tǒng),該想法被認(rèn)為是比特幣設(shè)計(jì)思想的雛形。1991年,CHAUM D和HEYST van E[8]提出群簽名。一位群管理員為每一位群成員發(fā)放私鑰,每位群成員均可代表整個(gè)群對(duì)消息進(jìn)行簽名,除了群管理員外,其他實(shí)體無(wú)法得知簽名人的身份,只知道簽名人來(lái)自于該群。依據(jù)群簽名技術(shù),CHAUM D和HEYST van E設(shè)計(jì)出第一個(gè)密碼學(xué)匿名現(xiàn)金系統(tǒng)Ecash,但是Ecash依賴于一個(gè)中心且貨幣不具備可分性。1987年,MERKLE R C[9]提出了一種哈希函數(shù)二叉樹(shù)(即Merkle樹(shù)),可以單獨(dú)對(duì)部分?jǐn)?shù)據(jù)進(jìn)行驗(yàn)證,而無(wú)需檢驗(yàn)所有數(shù)據(jù),同時(shí)可以快速查詢數(shù)據(jù)。1992年,DWORK C和NAOR M[10]提出工作量證明(PoW)機(jī)制,用于防止垃圾郵件,郵件發(fā)送者通過(guò)一系列復(fù)雜的計(jì)算,向接收者證明郵件是值得閱讀的。1998年,SZABO N[11]將PoW思想應(yīng)用于分布式數(shù)字貨幣,用戶致力于解決密碼學(xué)難題,正確答案需在網(wǎng)絡(luò)中發(fā)布,且作為下一個(gè)困難問(wèn)題的輸入之一,從而得到一個(gè)不斷增長(zhǎng)的鏈條。該機(jī)制被稱為“Bit Gold”,可以視為比特幣體系的先驅(qū)。2001年,NIST[12]發(fā)布了SHA-256算法,可以將任意長(zhǎng)度的消息映射到256 bit長(zhǎng)度的消息摘要。
(2)比特幣誕生[13]的特殊社會(huì)背景。2008年末,受美國(guó)金融危機(jī)影響,許多國(guó)家的人民陷入恐慌,一些政府為應(yīng)對(duì)金融危機(jī)甚至做出過(guò)激反應(yīng),政府和銀行的信譽(yù)也因此受到重創(chuàng)。與此同時(shí),NAKAMOTO S[14]在metzdowd.com中發(fā)表了一篇名為《Bitcoin:A Peer-to-Peer Electronic Cash System》的論文,并且實(shí)際運(yùn)行了其所提出的比特幣理論系統(tǒng),即比特幣“挖掘”過(guò)程。2009年1月3日,比特幣的第一個(gè)區(qū)塊問(wèn)世,其中含有系統(tǒng)獎(jiǎng)勵(lì)的50枚比特幣。
當(dāng)代貨幣體系是各國(guó)法幣的集合,而2008年金融危機(jī)暴露出法幣的缺陷,讓人們對(duì)當(dāng)代各國(guó)貨幣體系產(chǎn)生質(zhì)疑。法幣具有2條先天缺陷:一是由政府壟斷,發(fā)行的主體是國(guó)家;二是發(fā)行數(shù)量也由國(guó)家控制,自從美元與黃金脫軌,阻礙法幣數(shù)量增長(zhǎng)的機(jī)制不復(fù)存在,法幣貶值的趨勢(shì)很難逆轉(zhuǎn)。比特幣的誕生與金融危機(jī)是否有著某種關(guān)聯(lián),又是否能夠?yàn)榭朔◣诺娜毕萏峁┬滤悸?,這些我們不得而知。但比特幣理論為我們提供了一種新的技術(shù)思想,即如何在無(wú)第三方機(jī)構(gòu)的情形下構(gòu)建可信機(jī)制,該思想有助于推動(dòng)金融服務(wù)、公共服務(wù)、物聯(lián)網(wǎng)(IoT)等領(lǐng)域的技術(shù)革新。
從比特幣出現(xiàn)至今,密碼貨幣的熱潮仍然存在,且對(duì)世界各國(guó)的經(jīng)濟(jì)活動(dòng)和社會(huì)生活影響日益擴(kuò)大。但是很多人只了解到比特幣是一個(gè)迅速增值的密碼貨幣,卻不了解它是如何產(chǎn)生、如何交易;作為一個(gè)新生物,它的價(jià)值何在,存在價(jià)值的同時(shí)又是伴隨著怎樣的風(fēng)險(xiǎn)呢?基于此,一方面,我們要了解它的運(yùn)行原理,分析它的價(jià)值和風(fēng)險(xiǎn);另一方面,區(qū)塊鏈作為比特幣的核心技術(shù)之一,已經(jīng)從單一的密碼貨幣領(lǐng)域,發(fā)展到社會(huì)的各行各業(yè),例如:在醫(yī)療健康領(lǐng)域,可以為病人提供隱私保護(hù)服務(wù);在IoT領(lǐng)域,可以為用戶提供產(chǎn)品溯源、防偽以及認(rèn)證服務(wù);在教育領(lǐng)域,可以為學(xué)生提供學(xué)歷證明、成績(jī)證明以及檔案管理服務(wù)。然而,除了密碼貨幣領(lǐng)域的應(yīng)用外,區(qū)塊鏈技術(shù)在其他領(lǐng)域的應(yīng)用尚處于摸索階段,相應(yīng)技術(shù)理論尚未成熟。因此,了解比特幣的技術(shù)原理,有助于我們今后更好地探索其在其他領(lǐng)域的應(yīng)用。
比特幣作為重要的密碼貨幣之一,它的產(chǎn)生、交易和記賬都依賴于嚴(yán)謹(jǐn)?shù)拿艽a學(xué)原理,首先介紹幾個(gè)密碼學(xué)的基礎(chǔ)概念。
區(qū)塊鏈?zhǔn)潜忍貛诺暮诵募夹g(shù),而區(qū)塊鏈?zhǔn)聦?shí)上是一條哈希鏈,通過(guò)哈希函數(shù)串聯(lián)一塊塊歷史數(shù)據(jù)。本節(jié)主要介紹哈希函數(shù)及其相關(guān)概念。
2.1.1 哈希函數(shù)的定義
哈希又譯為“散列”,哈希函數(shù)以任意長(zhǎng)度的消息為輸入,輸出固定長(zhǎng)度的消息摘要。例如:哈希函數(shù)SHA-256輸出的哈希值為256 bit。通常情形下,哈希函數(shù)是一類壓縮函數(shù),它的值域遠(yuǎn)小于定義域,即一個(gè)消息摘要存在多個(gè)原像與之對(duì)應(yīng)。比特幣系統(tǒng)中所應(yīng)用的哈希函數(shù)還需要滿足以下3個(gè)安全要求:
(1)對(duì)任意消息m,很容易計(jì)算出它的哈希值y=h(m);
(2)由y得出m在計(jì)算上不可行(單向性或原像穩(wěn)固性);
(3)已知消息m,很難找出另一個(gè)消息n使得h(n)=h(m)(抗碰撞性)。
2.1.2 哈希校驗(yàn)
由于哈希函數(shù)具有單向性和抗碰撞性,因此可用于檢驗(yàn)消息的完整性,即檢驗(yàn)消息在傳送過(guò)程中是否被篡改。該過(guò)程被稱為哈希校驗(yàn)。
效驗(yàn)步驟:假設(shè)B要發(fā)送一條消息m給A,首先計(jì)算m的消息摘要y=h(m),并附在消息后面一起發(fā)出。A收到消息m′后,檢驗(yàn)h(m′)=?y。如果相等,由于哈希函數(shù)具有強(qiáng)抗碰撞性,A可在很大程度上相信消息在傳送過(guò)程中沒(méi)有被篡改。
2.1.3 哈希現(xiàn)金
哈?,F(xiàn)金(Hashcash)最早是由ADAM B提出的[15],其本質(zhì)是一種PoW系統(tǒng)[10]。用戶A要求發(fā)給他的郵件的哈希值必須包含某段特定字符串,例如:用戶A要求郵件的哈希值的前8位必須是0,否則拒絕接收該郵件。那么發(fā)給A的郵件正文必須添加某些隨機(jī)字符使得哈希值滿足該要求,這個(gè)工作是沒(méi)有捷徑的,計(jì)算機(jī)必須不斷循環(huán)進(jìn)行如下步驟:隨機(jī)選取某些字符,并將其串聯(lián)到郵件末尾,計(jì)算串聯(lián)后的郵件的哈希值,直到哈希值的前8位是0為止。當(dāng)然,計(jì)算開(kāi)銷取決于計(jì)算機(jī)的算力,當(dāng)要求的難度提升巨大時(shí),想要通過(guò)隨意轉(zhuǎn)發(fā)垃圾郵件的方式完成A的要求的可能性幾乎為零,從而達(dá)到了防止垃圾郵件的目的。
2.1.2 節(jié)介紹了哈希函數(shù)可以用于檢驗(yàn)消息是否被篡改,但是消息的接收方卻無(wú)法確認(rèn)消息的發(fā)送方是誰(shuí)。數(shù)字簽名能很好地克服該缺點(diǎn),用戶首先產(chǎn)生2把不同密鑰,其中一把為私鑰,需要秘密保管;另一把為公鑰,需要公開(kāi)發(fā)布,且他人很難從用戶的公鑰推算出相應(yīng)的私鑰。一個(gè)數(shù)字簽名方案[16-17]包含3個(gè)多項(xiàng)式時(shí)間算法:
(1)密鑰生成。輸入系統(tǒng)安全參數(shù)(可以理解為用戶所需密鑰的長(zhǎng)度),輸出Alice的公鑰pk和私鑰sk。其中,公鑰是公開(kāi)的,任意實(shí)體都能獲得Alice的公鑰,而私鑰則由Alice保密。
(2)簽名。Alice想以認(rèn)證的形式將信息m發(fā)送給Bob,即Alice希望Bob能夠檢驗(yàn)消息在傳送過(guò)程中是否被篡改(消息完整性)以及消息的來(lái)源(消息認(rèn)證性)。算法輸入Alice的私鑰sk和消息m,輸出簽名σ。
(3)驗(yàn)證。Bob用Alice的公鑰pk驗(yàn)證σ是否為消息m的簽名。如果驗(yàn)證通過(guò),算法輸出1;否則輸出0。
除了消息認(rèn)證性和完整性外,簽名還能提供不可否認(rèn)性服務(wù),即當(dāng)簽名人抵賴所簽署過(guò)的消息時(shí),簽名σ可以提交給第三方仲裁機(jī)構(gòu)來(lái)判定。除了上述3個(gè)多項(xiàng)式時(shí)間算法外,數(shù)字簽名方案還需要滿足一定的正確性要求:簽名人所簽署過(guò)的消息簽名對(duì)必須以壓倒性概率通過(guò)驗(yàn)證算法。
哈希-簽名(Hash-Sign)思想是一類構(gòu)造安全數(shù)字簽名的重要措施,即先計(jì)算消息的哈希值,然后對(duì)哈希值進(jìn)行簽名。該思想有3個(gè)優(yōu)點(diǎn):可以抵抗無(wú)消息攻擊;哈希函數(shù)可以將任意長(zhǎng)度的消息映射成固定長(zhǎng)度的消息摘要,于是簽名算法的輸入長(zhǎng)度變成一個(gè)固定值;在證明簽名方案的安全性時(shí),可以將哈希函數(shù)模擬成隨機(jī)預(yù)言器。
比特幣系統(tǒng)所使用的簽名算法為橢圓曲線數(shù)字簽名算法(ECDSA)。
(1)定義1[16,18]。設(shè)定義在域Fp(p>3且p是素?cái)?shù))上的橢圓曲線方程為:
其中,O為無(wú)窮遠(yuǎn)點(diǎn)。我們稱Ep(a,b)為素?cái)?shù)域Fp上的橢圓曲線。橢圓曲線EP(a,b)上的點(diǎn)數(shù)用#EP(a,b)表示,稱為橢圓曲線的階。
(2)構(gòu)建素?cái)?shù)域上橢圓曲線的運(yùn)算法則[16,18]。EP(a,b)上的點(diǎn)按如下加法法則構(gòu)成一個(gè)Able群:
1)O+O=O,O可以視為零元;
2)?P=(x,y)∈EP(a,b){O},P+O=O+P=P;
3)?P=(x,y)∈EP(a,b){O},P的逆元為-P=(x,-y),滿足P+(-P)=O;
4)2個(gè)非零元的不同點(diǎn)相加,設(shè)0,P2=(x2,y2)∈EP(a,b){O},且x1≠x2,若P3=(x3,y3)=P1+P2,則(x3,y3)=(λ2-x1-x2,λ(x1-x3)-y1) ,其 中
5)倍 點(diǎn) 原 則 ,設(shè)P1=(x1,y1)∈EP(a,b){O},且y1≠0 ,若P3=(x3,y3)=P1+P1,則(x3,y3)=(λ2-2x1,λ(x1-x3)-y1) , 其 中
(3)ECDSA[18]。首先考慮等式:K=kG,若已知k和G,則由加法法則易得K;但若只給定G和K,求k(K關(guān)于基底G的對(duì)數(shù))在一些橢圓曲線上是困難的,該問(wèn)題即為橢圓曲線上的離散對(duì)數(shù)問(wèn)題。為了使該問(wèn)題足夠困難,橢圓曲線需要滿足以下條件:#EP(a,b)有一個(gè)大的素因子n,滿足n≥2160且接下來(lái)我們介紹具體的簽名算法。
1)密鑰生成。算法輸入安全參數(shù) 1160,隨機(jī)選取整數(shù)k∈[1,n-1],基點(diǎn)G∈Ep(a,b),計(jì)算K=kG。算法輸出公鑰K,私鑰k。
2)簽名。算法輸入簽名人私鑰k和消息m,然后進(jìn)行如下步驟:
(a)隨機(jī)選取整數(shù)d∈[1,n-1];
(b) 計(jì) 算dG=(x1,y1) 和r=x1modn。如果r=0,返回步驟a;
(c)計(jì) 算s=d-1(H(m)+kr)modn。如果s=0,返回步驟a;
(d)輸出m的簽名σ=(r,s)。
3)驗(yàn)證。算法輸入簽名人公鑰K,簽名σ和消息m,然后進(jìn)行如下步驟:
(e)驗(yàn)證r,s∈[1,n-1];
(f) 計(jì)算u1=H(m)s-1modn和u2=rs-1modn;
(g)計(jì)算X=u1G+u2K=(x1,y1),如果X=O,算法輸出0;否則,繼續(xù)計(jì)算v=x1modn;
(h)若v=r,算法輸出 1;否則,算法輸出0。
本節(jié)主要介紹比特幣的生成以及交易原理[14,19]。
(1)比特幣地址?,F(xiàn)實(shí)中,人們想進(jìn)行存錢、轉(zhuǎn)賬等一系列操作,首先得前往銀行開(kāi)個(gè)賬戶,然后領(lǐng)取銀行分配的一串?dāng)?shù)字帳號(hào)(銀行卡號(hào)),帳號(hào)的密碼由用戶設(shè)定。而在比特幣體系中,賬戶不需要由中心機(jī)構(gòu)來(lái)開(kāi)設(shè),用戶首次使用比特幣時(shí)只需下載客戶端。用戶的公私鑰對(duì)由簽名方案的密鑰生成算法產(chǎn)生,公鑰即為比特幣地址,私鑰由用戶儲(chǔ)藏在錢包文件中。事實(shí)上,比特幣系統(tǒng)具有去中心化和弱匿名性的特點(diǎn),去中心化是由于比特幣的生成和交易過(guò)程沒(méi)有中心機(jī)構(gòu)參與;弱匿名性是指比特幣系統(tǒng)采用的是假名技術(shù),用戶的公鑰無(wú)法與其現(xiàn)實(shí)生活中的身份相聯(lián)系。但是該技術(shù)無(wú)法為用戶提供地址不可關(guān)聯(lián)性服務(wù)和交易金額的機(jī)密性服務(wù)。地址不可關(guān)聯(lián)性指的是:任意給定2個(gè)公鑰地址,敵手無(wú)法在多項(xiàng)式時(shí)間內(nèi)判斷2個(gè)地址是否屬于同一個(gè)用戶。這些更強(qiáng)的匿名性可以由零知識(shí)證明或環(huán)簽名技術(shù)實(shí)現(xiàn),本文不進(jìn)行展開(kāi)。
(2)點(diǎn) 對(duì) 點(diǎn)(P2P)網(wǎng) 絡(luò) 。NAKAMOTO S[14]曾說(shuō)過(guò):“比特幣是一種P2P的現(xiàn)金支付系統(tǒng)。”這種P2P結(jié)構(gòu)的特點(diǎn)是:中心平臺(tái)不是必要條件,每一臺(tái)電腦都是一個(gè)獨(dú)立體,獨(dú)立體間通過(guò)互聯(lián)網(wǎng)相互連接,最終形成密密麻麻的網(wǎng)絡(luò)節(jié)點(diǎn)圖。因此P2P網(wǎng)絡(luò)一旦啟動(dòng)就無(wú)法停止下來(lái),除非所有實(shí)體都退出該網(wǎng)絡(luò)。
3.1.1 比特幣交易鏈條
比特幣不是基于賬戶的密碼貨幣,而是基于交易的密碼貨幣。在基于賬戶的貨幣中,我們可以通過(guò)賬戶直接查詢余額;但在比特幣系統(tǒng)中,我們需要通過(guò)未花費(fèi)交易輸出(UTXO)來(lái)統(tǒng)計(jì)該地址余額。
每一筆交易都是由交易輸入和交易輸出構(gòu)成。交易輸入里面的字段主要是腳本簽名(包含本次交易的簽名和付款人公鑰)、UTXO的索引,該字段表明了付款人信息和付款人的金額來(lái)源。其中,數(shù)字簽名使用ECDSA,付款人先將本次交易關(guān)鍵數(shù)據(jù)(例如:UTXO索引、交易金額和收款人公鑰)作為哈希函數(shù)的輸入,計(jì)算相應(yīng)的哈希值,再使用私鑰對(duì)哈希值簽名;交易輸出里面的字段主要是腳本公鑰(包含若干個(gè)腳本指令和收款人公鑰地址的哈希值)、地址和金額。該字段主要表明收款人的地址和收款金額。
3.1.2 比特幣交易步驟
(1)驗(yàn)證本次交易是否是可支付的。比特幣的所有交易記錄提供了比特幣UTXO查詢,只有當(dāng)本次交易的UTXO對(duì)應(yīng)的金額大于或等于收款金額時(shí),該筆交易才是可支付的。
(2)用私鑰簽署這筆交易,并將簽名放置在交易的腳本簽名中。
(3)將該交易單廣播出去,尋求其他實(shí)體的認(rèn)可。所有合法的比特幣交易最終都會(huì)被封裝在歷史區(qū)塊之中。
但是上述轉(zhuǎn)賬過(guò)程存在一個(gè)問(wèn)題:收款人很難確認(rèn)比特幣所有者是否對(duì)該比特幣進(jìn)行雙重支付。
3.1.3 雙重支付
(1)無(wú)雙重支付的情形。假設(shè)A有1枚比特幣,要將其轉(zhuǎn)給B。A首先構(gòu)造一筆交易Tx1:使用私鑰簽署該筆交易,并將交易單Tx1廣播出去。其他實(shí)體收到信息后,通過(guò)UTXO索引計(jì)算A是否有能力支付1枚比特幣,如果有能力支付,則認(rèn)為此次交易是合法。最后,A的錢包地址減少1枚比特幣,B的錢包地址增加1枚比特幣。
(2)有雙重支付的情形。如果A利用同一個(gè)UTXO構(gòu)造2筆交易(Tx1:從A地址轉(zhuǎn)1枚比特幣給B地址;Tx2:從A地址轉(zhuǎn)1枚比特幣給C地址),并用私鑰分別簽署這2筆交易。由于消息傳送具有隨機(jī)性與先后性,有些實(shí)體先收到第1條交易,而有些實(shí)體會(huì)先收到第2條交易,那么比特幣系統(tǒng)會(huì)以哪條交易為準(zhǔn)?
挖礦是比特幣系統(tǒng)的工作機(jī)制,能很好地解決雙重支付的問(wèn)題,本節(jié)主要介紹挖礦的流程。
3.2.1 區(qū)塊及其作用
區(qū)塊的主要成分包括:前一個(gè)區(qū)塊的哈希值、難度值、當(dāng)前區(qū)塊所有交易的Merkle根節(jié)點(diǎn)的哈希值、時(shí)間戳(區(qū)塊的創(chuàng)建時(shí)間)和隨機(jī)數(shù)。值得注意的是:上述成分中出現(xiàn)2個(gè)哈希值,它們使用相同的哈希函數(shù)SHA256(SHA256())(使用 2次 SHA256算法),區(qū)別在于函數(shù)輸入不同。第1個(gè)哈希值是前一個(gè)區(qū)塊創(chuàng)建者挑戰(zhàn)PoW成功后的結(jié)果,區(qū)塊中的隨機(jī)數(shù)為創(chuàng)建區(qū)塊的實(shí)體隨機(jī)選取,目的是為了找到滿足PoW要求的隨機(jī)數(shù),具體將在3.2.2節(jié)介紹;第2個(gè)是Merkle根節(jié)點(diǎn)的哈希值,實(shí)體將收集到的交易放置在樹(shù)狀結(jié)構(gòu)的最底層,每筆交易都視為一個(gè)葉子節(jié)點(diǎn),開(kāi)始構(gòu)建Merkle樹(shù):首先計(jì)算每筆交易的哈希值,然后從下往上依次將每2個(gè)哈希值作為哈希函數(shù)的輸入(每個(gè)樹(shù)節(jié)點(diǎn)依然使用SHA256(SHA256())算法),計(jì)算出上一層哈希值,直到計(jì)算出最頂層的哈希值,即Merkle根節(jié)點(diǎn)的哈希值。Merkle樹(shù)有2個(gè)優(yōu)點(diǎn):可以單獨(dú)取出一個(gè)分支,對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證;可以依據(jù)樹(shù)狀結(jié)構(gòu)快速查詢到一筆交易。
區(qū)塊分為區(qū)塊頭和區(qū)塊體2部分:區(qū)塊頭包含前一個(gè)區(qū)塊的哈希值、難度值、Merkle根節(jié)點(diǎn)的哈希值、時(shí)間戳和隨機(jī)數(shù);區(qū)塊體包含當(dāng)前區(qū)塊的所有交易。
區(qū)塊鏈就是按創(chuàng)建的時(shí)間順序進(jìn)行排列的區(qū)塊鏈條,它完美地實(shí)現(xiàn)了一個(gè)牢不可摧且永不停息的比特幣交易數(shù)據(jù)庫(kù)。
比特幣系統(tǒng)大約每10 min產(chǎn)生一個(gè)區(qū)塊,該區(qū)塊包含這10 min內(nèi)未確認(rèn)的交易以及前一個(gè)區(qū)塊(銀行的系統(tǒng)如果崩潰將導(dǎo)致其所有數(shù)據(jù)都失去了,但是比特幣系統(tǒng)則不同,每個(gè)節(jié)點(diǎn)在工作時(shí)都得下載一個(gè)最新區(qū)塊,該區(qū)塊就包含歷史全部記錄,故在比特幣世界中只要還有一個(gè)節(jié)點(diǎn)在運(yùn)作,那么它的歷史數(shù)據(jù)就不會(huì)丟失,因此可以視比特幣系統(tǒng)亦或者區(qū)塊鏈為分布式記賬),因此從第一個(gè)區(qū)塊問(wèn)世至今就形成了一條完整的區(qū)塊鏈。區(qū)塊有2點(diǎn)作用:收集交易記錄;做存在證明和防篡改,因?yàn)閰^(qū)塊的哈希值施加了時(shí)間戳,一方面能證明區(qū)塊的存在時(shí)間,另一方面由哈希函數(shù)的抗碰撞性知區(qū)塊被篡改的概率可忽略。
3.2.2 PoW
在介紹哈希函數(shù)時(shí)已經(jīng)闡述了Hashcash,Hashcash設(shè)定特定的哈希值開(kāi)頭作為實(shí)體的挑戰(zhàn)目標(biāo),而實(shí)體則不斷嘗試不同的隨機(jī)數(shù),以期得到滿足要求的哈希值。在比特幣區(qū)塊的建設(shè)過(guò)程中引入一個(gè)類似Hashcash的規(guī)則,即PoW機(jī)制,它的本質(zhì)是為了防止低算力的實(shí)體隨意或惡意發(fā)布區(qū)塊。此時(shí),哈希函數(shù)的輸入為區(qū)塊頭,輸出是一個(gè)256 bit的哈希值。比特幣系統(tǒng)會(huì)把每個(gè)區(qū)塊完成的時(shí)間控制在10 min左右。如果難度低于10 min,系統(tǒng)就自動(dòng)調(diào)高難度值,增加哈希值開(kāi)頭0的位數(shù);如果難度高于10 min,就適當(dāng)減少哈希值開(kāi)頭0的位數(shù),以調(diào)低難度值。這是比特幣系統(tǒng)默認(rèn)的一個(gè)規(guī)則:維持10 min產(chǎn)生一個(gè)區(qū)塊。這個(gè)PoW的過(guò)程被稱為挖礦。
挖礦的本質(zhì)是爭(zhēng)奪記賬權(quán),實(shí)體(礦工)收集、檢驗(yàn)和確認(rèn)過(guò)去一段時(shí)間內(nèi)發(fā)生的交易。當(dāng)找到一個(gè)符合PoW機(jī)制的哈希值,礦工就能夠?qū)⒆约悍庋b的區(qū)塊廣播出去,讓其他礦工驗(yàn)證該區(qū)塊。如果有礦工接受該區(qū)塊并以它為基礎(chǔ)繼續(xù)挖下一個(gè)區(qū)塊,那么該區(qū)塊中的所有交易單就獲得一次確認(rèn)。每延長(zhǎng)一個(gè)區(qū)塊就等價(jià)于該區(qū)塊中的交易多了一次確認(rèn)。若得到6次確認(rèn),那么該區(qū)塊就獲得全網(wǎng)的認(rèn)可,封裝到歷史區(qū)塊中。礦工挖礦的具體流程如下:
(1)下載一個(gè)最新區(qū)塊(其中包含所有歷史交易記錄),計(jì)算出它的哈希值;
(2)收集尚未被確認(rèn)的交易單并使用簽名技術(shù)校驗(yàn)交易單的有效性,把有效的交易單納入新的區(qū)塊;
(3)選取一個(gè)隨機(jī)數(shù)(這是為了滿足PoW機(jī)制的要求);
(4)將第(1)—(3)步產(chǎn)生的數(shù)值作為SHA-256(SHA-256())算法的輸入,得到一個(gè)256 bit的二進(jìn)制數(shù),并檢查這個(gè)數(shù)是否符合PoW機(jī)制的要求;
(5)如果滿足PoW要求,則向全網(wǎng)廣播新區(qū)快。若其他礦工接受本區(qū)塊,就會(huì)在該區(qū)塊末尾繼續(xù)進(jìn)行挖礦工作以延長(zhǎng)區(qū)塊鏈。若不符合PoW要求,則重復(fù)第(2)—(5)步,直到符合要求或者接收到其他礦工發(fā)布的新區(qū)塊。
在比特幣世界中每10 min會(huì)產(chǎn)生新增比特幣獎(jiǎng)勵(lì)給成功建立新區(qū)塊的礦工,每個(gè)區(qū)塊的獎(jiǎng)勵(lì)在最初的4年中是50個(gè)比特幣(4年大概產(chǎn)生21萬(wàn)個(gè)區(qū)塊),之后的4年每個(gè)區(qū)塊是25個(gè)比特幣,依次類推下去,最終系統(tǒng)只能產(chǎn)生2 100萬(wàn)個(gè)比特幣[20]。同時(shí),新區(qū)塊的建立者會(huì)獲得每筆交易所產(chǎn)生的交易費(fèi)用。
基于上述挖礦過(guò)程可知:雙花意味著需要廣播同一筆比特幣的2次不同交易單。礦工在收集時(shí)只會(huì)將其中一個(gè)封裝在自己的區(qū)塊中,從而能夠有效地防止雙花。
3.2.3 區(qū)塊鏈的延長(zhǎng)和交易的最終確認(rèn)
每筆比特幣交易只有獲得6次確認(rèn),才能認(rèn)定為有效。在挖礦過(guò)程中,同一段時(shí)間會(huì)生成很多有效區(qū)塊,不同有效區(qū)塊中的元素除前一個(gè)區(qū)塊的ID是相同外,其他元素幾乎都不同,例如:交易單集合就是不同的。若1個(gè)節(jié)點(diǎn)收到2個(gè)有效區(qū)塊,則將這2個(gè)區(qū)塊都放在主區(qū)塊鏈的后面,并形成一個(gè)Y型分叉,后續(xù)收到的區(qū)塊則基于這2個(gè)區(qū)塊產(chǎn)生,使區(qū)塊鏈延伸下去。礦工始終選擇最長(zhǎng)的分支成為主區(qū)塊鏈的一部分,并繼續(xù)工作以延長(zhǎng)區(qū)塊鏈。一般包含這個(gè)交易的區(qū)塊出現(xiàn)后,還需等待5~6個(gè)后續(xù)的區(qū)塊生成,才能確定該區(qū)塊是否進(jìn)入主區(qū)塊鏈,從而最終確認(rèn)區(qū)塊中的交易是否有效??梢?jiàn)比特幣的交易所需時(shí)間比較長(zhǎng)。
比特幣的本質(zhì)和大多數(shù)虛擬貨幣一樣,由一堆代碼組成,但同時(shí)它也具有許多傳統(tǒng)虛擬貨幣不具備的優(yōu)點(diǎn)[21-23]。
(1)去中心化思想,發(fā)行數(shù)量固定。法幣的發(fā)行受政府與中央銀行約束;但比特幣不同,它采用區(qū)塊鏈技術(shù)和非對(duì)稱密碼技術(shù),發(fā)行不受央行約束,而且比特幣的發(fā)行具有上限,從而避免一些因?yàn)槿藶闆Q策因素而導(dǎo)致的貨幣貶值。
(2)交易成本低廉。比特幣的交易不需要中介機(jī)構(gòu),交易成本低廉(但對(duì)小額交易而言,成本較高)。同時(shí),比特幣中的用戶采用的是假名,國(guó)家很難收取比特幣的交易稅。
(3)貨幣不可偽造,無(wú)法雙重支付,交易不可逆轉(zhuǎn)。系統(tǒng)中的每個(gè)區(qū)塊都有記錄可查,想要偽造比特幣幾乎不可能。區(qū)塊鏈會(huì)不停地延長(zhǎng),一旦交易被全網(wǎng)接受并裝入歷史區(qū)塊后是不可撤銷或逆轉(zhuǎn)的。同時(shí),比特幣的PoW機(jī)制能很好地防止雙重支付現(xiàn)象。
(4)全球化轉(zhuǎn)賬支付。比特幣的交易效率相對(duì)與中國(guó)境內(nèi)的同行或跨行轉(zhuǎn)賬效率慢,這是因?yàn)橹袊?guó)的銀行都有一個(gè)可信任的第三方(央行),因此交易雙方的身份認(rèn)證很便捷;但比特幣具有一個(gè)顯著的優(yōu)勢(shì):可打破國(guó)界進(jìn)行全球化轉(zhuǎn)賬支付,且該效率比目前法幣的跨國(guó)轉(zhuǎn)賬效率高。法幣進(jìn)行跨國(guó)轉(zhuǎn)賬時(shí),兩國(guó)的銀行中間缺少一個(gè)可信賴的第三方,造成雙方的身份認(rèn)證十分漫長(zhǎng)。
(5)開(kāi)源。比特幣的原理和技術(shù)都是公開(kāi)的,還有其軟件代碼也是基于開(kāi)源協(xié)議發(fā)布的,萊特幣就是基于比特幣協(xié)議產(chǎn)生。
與此同時(shí),比特幣的缺點(diǎn)也是顯而易見(jiàn)。
(1)在比特幣世界中,私鑰代表一切,一旦私鑰泄漏或遺忘,意味著你的比特幣財(cái)富也將失去,且他人無(wú)法幫你找回丟失的比特幣。
(2)比特幣無(wú)央行發(fā)行,無(wú)政府部門為其交易和安全保駕護(hù)航,這也是人們對(duì)比特幣信心不足的主要原因之一。
(3)比特幣的系統(tǒng)雖然很健壯,但它的交易平臺(tái)(通常是一個(gè)網(wǎng)站)是脆弱的,易遭受黑客攻擊,例如:Mt.Gox曾是世界最大的比特幣交易平臺(tái),但被惡意攻擊,于2014年2月28日宣布破產(chǎn),比特幣的行情大跌。
文中,我們主要介紹比特幣系統(tǒng)中涉及的相關(guān)密碼技術(shù),包含簽名、哈希函數(shù)以及區(qū)塊鏈技術(shù)。尤其是區(qū)塊鏈技術(shù),以鏈狀結(jié)構(gòu)存儲(chǔ)數(shù)據(jù),以密碼技術(shù)為數(shù)據(jù)傳輸提供機(jī)密性和認(rèn)證性服務(wù),從而形成一條分布式存儲(chǔ)、無(wú)法篡改、永無(wú)止息的數(shù)據(jù)庫(kù)。但比特幣等諸多數(shù)字貨幣在一定程度上具有匿名性,使得監(jiān)管問(wèn)題日益嚴(yán)峻,如何在保護(hù)實(shí)體隱私的同時(shí)實(shí)施有效的監(jiān)管是數(shù)字貨幣領(lǐng)域的一大挑戰(zhàn)。另一方面,由于區(qū)塊鏈技術(shù)能擺脫第三方機(jī)構(gòu)制約,使得它不再局限于數(shù)字貨幣領(lǐng)域。目前,區(qū)塊鏈技術(shù)在金融服務(wù)、公共服務(wù)和IoT等領(lǐng)域的應(yīng)用尚處于探索階段,有待進(jìn)一步發(fā)掘。