




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第四章
加密數(shù)字資產(chǎn)的原理與實(shí)現(xiàn)第一節(jié)密碼學(xué)原理第二節(jié)分布式賬本與去中心化第三節(jié)腳本與智能合約第一節(jié)密碼學(xué)原理加密哈希函數(shù)哈希函數(shù)(HashFunction,又稱散列函數(shù))是密碼學(xué)中最基礎(chǔ)也最重要的數(shù)學(xué)原理之一,在保障信息安全、高效數(shù)據(jù)存儲(chǔ)以及數(shù)據(jù)驗(yàn)證等方面都有重要價(jià)值。Hash并不指代某一特定算法,而是一類數(shù)學(xué)函數(shù)的統(tǒng)稱,它可以將任何輸入數(shù)據(jù)進(jìn)行“打亂”、“混合”,重新創(chuàng)建一個(gè)固定格式和大小的散列值(HashValues、HashCodes、HashSums或Hashes)。因此,一般而言Hash具有如下三個(gè)特征:第一,函數(shù)輸入可以為任意大小的字符串;第二,函數(shù)輸出為固定格式和大小的數(shù)據(jù);第三,可高效運(yùn)算,即計(jì)算位字符串輸入的散列值的復(fù)雜度位,意味著可以在有限、合理的時(shí)間內(nèi)得到輸出結(jié)果。加密哈希函數(shù)具有額外的三個(gè)安全性特征:抗碰撞性(Collision-resistance、Collision-free)、隱匿性(Hiding)以及謎題友好(Puzzle-friendly)。第一節(jié)密碼學(xué)原理抗碰撞性“碰撞”描述的是由不同函數(shù)輸入得到相同函數(shù)輸出的情形。加密貨幣要求其使用的哈希函數(shù)具備扛碰撞屬性,即沒有人能夠找到碰撞情形。對(duì)于一個(gè)滿足抗碰撞要求的加密哈希函數(shù),無法找到兩個(gè)不同的輸入和使得。加密哈希函數(shù)的抗碰撞特征僅要求“無法找到”碰撞,而非“不存在”碰撞。理論上,由于哈希函數(shù)接受任意大小的數(shù)據(jù)為輸入、而輸出固定大小的散列值,當(dāng)輸入空間大于輸出空間時(shí)必然會(huì)有不同輸入映射為相同輸出的情形出現(xiàn)。以常見的256位輸出為例,其輸出結(jié)果的可能性有種,意味著我們必然能在次哈希計(jì)算種找到一次碰撞,或者從概率上平均每次哈希計(jì)算能夠找到一次碰撞。若表示與加密數(shù)字資產(chǎn)相關(guān)的賬本數(shù)據(jù),是對(duì)該賬本信息進(jìn)行加密哈希計(jì)算后得到的散列值,那么在賬本數(shù)據(jù)的任何遺失、損壞、修改后都不可能再得到相同的散列值。第一節(jié)密碼學(xué)原理抗碰撞性“哪怕只是輸入發(fā)生最微小的改變(例如,反轉(zhuǎn)一個(gè)二進(jìn)制位),也會(huì)導(dǎo)致輸出的不可區(qū)分性改變,即密碼學(xué)中的“雪崩效應(yīng)(AvalancheEffect)”。因此,通過記錄和比較賬本數(shù)據(jù)經(jīng)加密哈希計(jì)算后的散列值,就可以識(shí)別賬本數(shù)據(jù)的是否發(fā)被惡意篡改(圖4-1)。隨著交易數(shù)據(jù)的膨脹,要求分布式網(wǎng)絡(luò)節(jié)點(diǎn)存儲(chǔ)全部交易信息和賬本數(shù)據(jù)是不現(xiàn)實(shí)的,而信息摘要能夠大大降低數(shù)據(jù)存儲(chǔ)和網(wǎng)絡(luò)通信壓力。因此,加密哈希函數(shù)的抗碰撞性對(duì)于分布式賬本技術(shù)十分重要。第一節(jié)密碼學(xué)原理隱匿性僅通過加密哈希函數(shù)的輸出,無法推算出函數(shù)輸入,但這一解讀并不一定準(zhǔn)確。現(xiàn)實(shí)中,我們并不能保證輸入總是來自高階最小熵分布。基于此,隱匿性的正式定義可以表述為:若是來自高階最小熵分布的隨機(jī)采樣,且無法由反推出時(shí),則稱加密哈希函數(shù)具有隱匿性。2024/6/25隱匿性的一個(gè)重要應(yīng)用是密碼學(xué)中的承諾(Commitment)。密碼學(xué)承諾具備兩個(gè)特性:一是隱匿性(Hiding),即做出的承諾是密文形式,在打開承諾之前,驗(yàn)證方不知道承諾方的敏感數(shù)據(jù);二是約束性(Binding),即一旦承諾生成并公開,承諾方不能將已承諾的敏感數(shù)據(jù)換或解釋成另一個(gè)不同的數(shù)據(jù)。第一節(jié)密碼學(xué)原理謎題友好謎題友好是加密哈希函數(shù)的另一重要性質(zhì)。若哈希函數(shù)
的形式能夠保證沒有任何特定解題策略比隨機(jī)嘗試的更好,就可以認(rèn)為是
謎題友好的。加密哈希函數(shù)的謎題友好性質(zhì)在工作量證明機(jī)制和加密貨幣“挖礦”中有廣泛的應(yīng)用。在比特幣挖礦中,計(jì)算難度差不多每?jī)芍軙?huì)隨著全網(wǎng)算力的變化而進(jìn)行一次調(diào)整,以保證解迷題平均花費(fèi)時(shí)間(區(qū)塊生成間隔)大約維持在10分鐘左右。第一節(jié)密碼學(xué)原理安全哈希算法在符合上述三個(gè)安全性特征的加密哈希函數(shù)中,安全哈希算法(SecureHashAlgorithm,SHA)是最常見的一類。在SHA-2系列中,SHA-256算法是現(xiàn)今密碼學(xué)和信息安全領(lǐng)域中的基本算法,也是比特幣等加密數(shù)字貨幣應(yīng)用最廣泛的加密算法之一。SHA-256使用的MD變換的數(shù)據(jù)處理流程如圖4-3所示,大體可以分為兩個(gè)步驟。一個(gè)步驟是對(duì)輸入信息進(jìn)行預(yù)處理,使其滿足指定的信息結(jié)構(gòu)。第二步是使用壓縮函數(shù)進(jìn)行迭代運(yùn)算,運(yùn)算內(nèi)容全部是邏輯的位運(yùn)算,例如按位的“與”、“補(bǔ)”、“異或”等。第一節(jié)密碼學(xué)原理哈希指針指針描述了數(shù)據(jù)在內(nèi)存中的位置,標(biāo)示了一個(gè)占據(jù)存儲(chǔ)空間的實(shí)體在這一段空間起始位置的相對(duì)距離值;通過指針指向的地址,可以檢索到對(duì)應(yīng)的數(shù)據(jù)。哈希指針是一個(gè)數(shù)據(jù)存儲(chǔ)位置及其位置數(shù)據(jù)哈希值的指針。根據(jù)加密哈希函數(shù)的抗碰撞性質(zhì),一旦哈希指針指向的位置的數(shù)據(jù)塊發(fā)生任何改變,對(duì)它進(jìn)行哈希操作之后的哈希值必然和之前不同。2024/6/25第一節(jié)密碼學(xué)原理區(qū)塊鏈用哈希指針代替?zhèn)鹘y(tǒng)指針構(gòu)建鏈表,得到的數(shù)據(jù)結(jié)構(gòu)就是區(qū)塊鏈。在由普通指針實(shí)現(xiàn)的數(shù)據(jù)鏈表中,每一個(gè)數(shù)據(jù)區(qū)塊既包含了自身的數(shù)據(jù),也包含了指向上一數(shù)據(jù)區(qū)塊的指針,即上一區(qū)塊的地址信息。根據(jù)加密哈希函數(shù)的隱匿性,這種反向破解哈希函數(shù)的任務(wù)幾乎是不可能完成的,而且創(chuàng)世區(qū)塊通常無法修改。2024/6/25第一節(jié)密碼學(xué)原理梅克爾樹梅克爾樹能夠以一種高效、集約的方式存儲(chǔ)大量數(shù)據(jù),并且可以非常有效地驗(yàn)證數(shù)據(jù)的隸屬關(guān)系。看起來像一棵顛倒過來的樹。梅克爾樹的底端是樹的葉子節(jié)點(diǎn),由大量數(shù)據(jù)區(qū)塊構(gòu)成;最終梅克爾根和指向它的頭部哈希指針將與我們存儲(chǔ)的內(nèi)容存在差異,數(shù)據(jù)篡改行為就能夠被識(shí)別出來。利用梅克爾樹結(jié)構(gòu),我們還可以在僅存儲(chǔ)梅克爾根的情況下實(shí)現(xiàn)數(shù)據(jù)區(qū)塊的隸屬證明。2024/6/25第一節(jié)密碼學(xué)原理數(shù)字簽名在介紹數(shù)字簽名之前,先回想在紙上手寫簽名的情形。進(jìn)行有效簽名時(shí)必須滿足三個(gè)特征:一,必須由當(dāng)事人親自簽名,任何人不得偽造簽名,這就要求收到簽名文檔的人能夠正確鑒別簽名的真?zhèn)危瑐卧斓暮灻仨毮軌虮蛔R(shí)別。二,姓名必須簽署在特定的文檔上,即:簽名只在特定文檔上生效,只表示對(duì)該本文內(nèi)容事項(xiàng)的同意或支持,將該簽名復(fù)制粘貼到其他文檔上是無效的。三,一旦確定簽名是有當(dāng)事人親自簽署的,那么簽名人不可以否認(rèn)簽署文本所載事項(xiàng)。在進(jìn)行數(shù)字簽名之前,簽名者先要利用密鑰生成器生成由私鑰(PrivateKey)和公鑰(PublicKey)組成的一對(duì)密鑰。私鑰將用來簽名,需要由簽名者妥善保存;公鑰可以公開,用來驗(yàn)證簽名的有效性。第一節(jié)密碼學(xué)原理非對(duì)稱密碼術(shù)前面介紹的數(shù)字簽名中使用到公鑰和私鑰是“非對(duì)稱密碼術(shù)”(AsymmetricCryptography)或“公鑰密碼術(shù)”(Public-keyCryptography)的專用術(shù)語。1970年代以前,所有密碼系統(tǒng)都是用對(duì)稱密鑰算法,加密和解密環(huán)節(jié)使用相同的密鑰。基本原理是:超大合數(shù)的質(zhì)因數(shù)分解是極其困難的。經(jīng)典RSA算法中密鑰對(duì)生成可以簡(jiǎn)單表示為如下過程1)首先隨機(jī)生成兩個(gè)足夠大且不公開的素?cái)?shù)
和
,計(jì)算
;2)計(jì)算歐拉函數(shù)(EularTotientFunction)
,
也是不公開的;3)選擇一個(gè)整數(shù)參數(shù)
,使得
,4)利用擴(kuò)展的歐幾里得算法(ExtendedEuclideanAlgorithm)求解同余方程
,得到
。2024/6/25第一節(jié)密碼學(xué)原理非對(duì)稱密碼術(shù)“即使知道公鑰,也很難計(jì)算出私鑰中的。基于這一特性,公鑰可以在不影響安全性的情形下公開分發(fā),而私鑰通常需要保持私密性。在非對(duì)稱密碼術(shù)中,公鑰和私鑰僅指代是否公開分發(fā),并不固定承擔(dān)加密或解密職能。事實(shí)上,我們既可以用公鑰加密、私鑰解密,也可以用私鑰加密、公鑰解密,兩種選擇對(duì)應(yīng)了非對(duì)稱密碼術(shù)的兩大重要應(yīng)用場(chǎng)景。第一節(jié)密碼學(xué)原理公鑰地址與身份管理另一個(gè)重要概念是公鑰地址。實(shí)踐中,由于公鑰比較大,存儲(chǔ)和使用不那么便捷,因此一般對(duì)公鑰進(jìn)行一系列單向函數(shù)變換,得到較短和規(guī)整的公鑰地址。以比特幣為例,生成公鑰地址的過程如圖所示。更為重要的是,只要用戶愿意,他/她隨時(shí)都可以生產(chǎn)新的密鑰對(duì),意味著可以自由、隨時(shí)定制新的身份,而不需要到任何中央機(jī)構(gòu)注冊(cè),這一特征使得加密數(shù)字資產(chǎn)世界具備較高的匿名性。第二節(jié)分布式賬本與去中心化一個(gè)中心化加密電子支付系統(tǒng)財(cái)奴幣的交易包括兩類:造幣(CreateCoins)和付幣(PayCoins)。財(cái)奴可以在賬本中創(chuàng)造了一筆類型為“造幣”、交易ID為“12”的交易記錄。付幣被表示為:消耗一定數(shù)量的舊幣并創(chuàng)造等量新幣。按照財(cái)奴幣的規(guī)則,只有滿足以下四個(gè)條件的付幣交易才是有效的:第一,被消耗的幣是在之前交易中創(chuàng)造的的有效貨幣;第二,本次被消耗的幣沒有在之前的某次交易中被消耗掉,即本次交易不是雙重支付;第三,本次交易產(chǎn)生的幣值量等于消耗的幣值量;第四,本次交易中被消耗掉的所有幣均有其所有者的有效簽署。第二節(jié)分布式賬本與去中心化一個(gè)中心化加密電子支付系統(tǒng)基于區(qū)塊鏈的僅增賬本(Append-onlyLedger)技術(shù)在這里可以派上用場(chǎng)了。我們可以要求財(cái)奴按照區(qū)塊鏈數(shù)據(jù)結(jié)構(gòu)來管理和維護(hù)交易記錄每個(gè)區(qū)塊都包含交易的ID、交易的內(nèi)容,以及指向上一區(qū)塊的哈希指針;財(cái)奴作為一個(gè)沒有主權(quán)信用背書的中央實(shí)體,有強(qiáng)烈的無節(jié)制創(chuàng)造新貨幣的動(dòng)機(jī),以及無法盡職勤勉承擔(dān)記賬和維護(hù)賬本的隱患,這正是具有中央機(jī)構(gòu)的私人加密貨幣方案難以獲得成功的根本原因。第二節(jié)分布式賬本與去中心化點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)架構(gòu)客戶端和服務(wù)器是網(wǎng)絡(luò)中完全不同的兩類節(jié)點(diǎn):服務(wù)器作為中央節(jié)點(diǎn),可直接向其客戶端提供數(shù)據(jù)或接收數(shù)據(jù),而客戶端作為邊緣節(jié)點(diǎn),必須要通過服務(wù)器才能與其他客戶端進(jìn)行通訊。與C/S或B/S網(wǎng)絡(luò)架構(gòu)不同,在P2P網(wǎng)絡(luò)中,每個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)既是客戶端也是服務(wù)器,都可以請(qǐng)求和提供內(nèi)容。可用性方面,C/S或B/S網(wǎng)絡(luò)架構(gòu)下服務(wù)器必須始終在線并可供客戶端使用。高負(fù)載方面,C/S或B/S網(wǎng)絡(luò)中服務(wù)器上的高負(fù)載或意外需求往往難以預(yù)測(cè)并且有較高的解決成本。可擴(kuò)展性方面,在C/S或B/S網(wǎng)絡(luò)架構(gòu)下,隨著用戶數(shù)量的增加,服務(wù)器CPU、內(nèi)存、網(wǎng)絡(luò)和磁盤性能也需要增長(zhǎng);第二節(jié)分布式賬本與去中心化專欄4-1網(wǎng)絡(luò)的價(jià)值:梅特卡夫定律半導(dǎo)體領(lǐng)域著名的“摩爾定律(Moore’sLaw)”已經(jīng)被很多人熟知,其核心內(nèi)容為:集成電路上可以容納的晶體管數(shù)目在大約每經(jīng)過18個(gè)月便會(huì)增加一倍,或者說,微處理器的性能大約每18個(gè)月提高一倍。這個(gè)由因特爾創(chuàng)始人戈登·摩爾(GordonMoore)提出的經(jīng)驗(yàn)規(guī)律至今仍然非同尋常得準(zhǔn)確。在互聯(lián)網(wǎng)領(lǐng)域,也有一個(gè)類似的定律,被稱為“梅特卡夫定律(Metcalf’sLaw)”,它描述了網(wǎng)絡(luò)價(jià)值的發(fā)展規(guī)律。梅特卡夫定律由美國(guó)投資者、作家、經(jīng)濟(jì)學(xué)家喬治·富蘭克林·吉爾德(GeorgeFranklinGilder)于1993年提出,但以計(jì)算機(jī)網(wǎng)絡(luò)先驅(qū)、3Com公司的創(chuàng)始人羅伯特·梅蘭克頓·梅特卡夫(RobertMelanctonMetcalf)的姓氏命名,以致敬其在發(fā)明以太網(wǎng)并將其標(biāo)準(zhǔn)化和商業(yè)化方面所做的卓越貢獻(xiàn)。梅特卡夫定律最初用于測(cè)度通信網(wǎng)絡(luò)的機(jī)制,認(rèn)為通信網(wǎng)絡(luò)的價(jià)值與該網(wǎng)絡(luò)內(nèi)的節(jié)點(diǎn)(電話、傳真機(jī)等通信設(shè)備)數(shù)量的平方成正比。該規(guī)律反映了一個(gè)基本事實(shí):由n個(gè)節(jié)點(diǎn)構(gòu)成的網(wǎng)絡(luò)中可能的最大連接數(shù)為n(n-1)/2,漸進(jìn)地與n2成比例。正因如此,美國(guó)聯(lián)邦通信委員會(huì)前主席里德亨特(ReedHundt)表示,梅特卡夫定律給出了互聯(lián)網(wǎng)運(yùn)作方式最直觀的解釋。隨著互聯(lián)網(wǎng)全球化發(fā)展,梅特卡夫定律的適用范圍也延伸到互聯(lián)網(wǎng)和社交網(wǎng)絡(luò):網(wǎng)絡(luò)服務(wù)的用戶數(shù)量越多,則服務(wù)對(duì)網(wǎng)絡(luò)社區(qū)的價(jià)值越大。在社交網(wǎng)絡(luò)背景下,包括梅特卡夫本人在內(nèi)的許多人提出了修改后的模型,認(rèn)為網(wǎng)絡(luò)價(jià)值與n*log(n)成比例,而不是n2,不過這個(gè)修改只是從理論上進(jìn)行推導(dǎo)的結(jié)果。2013年7月,荷蘭研究人員Madureira、denHartog、Bouwman以及Baken設(shè)法在足夠長(zhǎng)的時(shí)間內(nèi)分析了歐洲的互聯(lián)網(wǎng)使用模式,發(fā)現(xiàn):當(dāng)網(wǎng)絡(luò)規(guī)模n較小時(shí),網(wǎng)絡(luò)價(jià)值與n2成正比;但當(dāng)網(wǎng)絡(luò)規(guī)模n較大時(shí),網(wǎng)絡(luò)價(jià)值與n*log(n)成比例。幾個(gè)月后,梅特卡夫本人提供了進(jìn)一步的證明,他使用Facebook過去10年的數(shù)據(jù)表明非常適合梅特卡夫定律(n2版本)。2015年,Zhang、Liu和Xu利用騰訊和Facebook的數(shù)據(jù)對(duì)梅特卡夫定律進(jìn)行了參數(shù)化,他們的研究表明,盡管兩個(gè)網(wǎng)站的受眾不同,但梅特卡夫定律對(duì)兩者都適用,價(jià)值方程分別為Vtencent=7.39í10-9ín2和Vfacebook=5.7í10-9ín2。2017年3月,比特幣價(jià)格飆升創(chuàng)下歷史新高,1BTC的美元價(jià)格首次超過一盎司黃金。KenAlabi發(fā)表在ElectronicCommerceResearchandApplications的研究顯示,以比特幣價(jià)格衡量的比特幣網(wǎng)絡(luò)價(jià)值大致與每日參與網(wǎng)絡(luò)的用戶數(shù)的平方成正比。這表明梅特卡夫定律在加密貨幣的點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)中同樣適用。第二節(jié)分布式賬本與去中心化節(jié)點(diǎn)類型與分工節(jié)點(diǎn)功能主要包括錢包(Wallet)、礦工(Miner)、完整區(qū)塊數(shù)據(jù)存儲(chǔ)(FullBlockchain),以及網(wǎng)絡(luò)路由(NetworkRoutingNode)四種。按照承擔(dān)功能的多寡,節(jié)點(diǎn)可以大致劃分為如下四類:第一,輕量級(jí)錢包(LightweightWallet),即只具有錢包和路由轉(zhuǎn)發(fā)功能的節(jié)點(diǎn);第二,全節(jié)點(diǎn)(FullBlockChainNode),即存儲(chǔ)完整區(qū)塊鏈數(shù)據(jù),并承擔(dān)網(wǎng)絡(luò)路由功能的節(jié)點(diǎn);第三,獨(dú)立礦工節(jié)點(diǎn)(SoloMiner),即擁有完整區(qū)塊鏈數(shù)據(jù)和網(wǎng)絡(luò)路由功能,并能不依賴其他節(jié)點(diǎn)的算力單獨(dú)進(jìn)行挖礦的節(jié)點(diǎn);第四,核心客戶端節(jié)點(diǎn)(ReferenceClient/BitcoinCore),即承擔(dān)錢包、礦工、完整區(qū)塊存儲(chǔ)、網(wǎng)絡(luò)路由全部四種功能的節(jié)點(diǎn)第二節(jié)分布式賬本與去中心化節(jié)點(diǎn)類型與分工另外一種分類方法是依照節(jié)點(diǎn)保存區(qū)塊數(shù)據(jù)內(nèi)容和是否能獨(dú)立完成交易驗(yàn)證,將節(jié)點(diǎn)劃分為:全節(jié)點(diǎn)(FullNode)和輕節(jié)點(diǎn)(LightweightNode)。第二節(jié)分布式賬本與去中心化節(jié)點(diǎn)發(fā)現(xiàn)與連接對(duì)于P2P網(wǎng)絡(luò)而言,新的網(wǎng)絡(luò)節(jié)點(diǎn)首次啟動(dòng)后必須發(fā)現(xiàn)網(wǎng)絡(luò)中的其他節(jié)點(diǎn)并建立連接,才能夠參與到網(wǎng)絡(luò)活動(dòng)中。當(dāng)完成初始接入后,新節(jié)點(diǎn)會(huì)將一條包含自身IP地址的消息發(fā)送給與之相連的節(jié)點(diǎn),這些節(jié)點(diǎn)再將此條地址消息依次轉(zhuǎn)發(fā)給它們各自的鄰接節(jié)點(diǎn);另外,新接入的節(jié)點(diǎn)也可以向與之相連的節(jié)點(diǎn)發(fā)送消息,請(qǐng)求它們返回其已知其他網(wǎng)絡(luò)節(jié)點(diǎn)的IP地址列表。已經(jīng)存在于P2P網(wǎng)絡(luò)中節(jié)點(diǎn)會(huì)隨時(shí)維護(hù)與網(wǎng)絡(luò)的聯(lián)系,但保持與大量對(duì)等節(jié)點(diǎn)的連接是沒有必要的。當(dāng)節(jié)點(diǎn)離線后重新啟動(dòng)時(shí),它會(huì)迅速嘗試與先前成功建立連接的對(duì)等節(jié)點(diǎn)通信并再次建立連接,若無法獲得響應(yīng),則使用種子節(jié)點(diǎn)進(jìn)行重啟動(dòng)。總而言之,P2P網(wǎng)絡(luò)會(huì)根據(jù)節(jié)點(diǎn)變化進(jìn)行動(dòng)態(tài)調(diào)整,可以根據(jù)需要有機(jī)地?cái)U(kuò)張和收縮。2024/6/25第二節(jié)分布式賬本與去中心化交易與區(qū)塊廣播除了前面介紹的節(jié)點(diǎn)發(fā)現(xiàn)和地址廣播以外,P2P網(wǎng)絡(luò)節(jié)點(diǎn)之間另一重要的通信內(nèi)容就是交易信息和區(qū)塊廣播。這里仍以比特幣網(wǎng)絡(luò)為例進(jìn)行介紹。當(dāng)節(jié)點(diǎn)連接到相鄰節(jié)點(diǎn)后,接著就開始跟相鄰節(jié)點(diǎn)同步區(qū)塊鏈數(shù)據(jù)(輕量級(jí)錢包應(yīng)用其實(shí)不會(huì)同步所有區(qū)塊數(shù)據(jù))。這種信息從一個(gè)節(jié)點(diǎn)出發(fā),廣播到臨近節(jié)點(diǎn),再?gòu)呐R近節(jié)點(diǎn)一傳十,十傳百,最終傳遍整個(gè)網(wǎng)絡(luò)的數(shù)據(jù)分發(fā)方法和泛洪(Flooding)算法有些類似,但并不完全相同。2024/6/25第二節(jié)分布式賬本與去中心化共識(shí)協(xié)議共識(shí)是分布式系統(tǒng)在面對(duì)故障和異步時(shí)達(dá)成協(xié)議的能力。一個(gè)或多個(gè)錯(cuò)誤的過程可能會(huì)扭曲結(jié)果,從而可能無法達(dá)成共識(shí)或達(dá)成不正確的共識(shí)。分布式系統(tǒng)要達(dá)成共識(shí),可能面臨的挑戰(zhàn)主要包括資源受限、節(jié)點(diǎn)故障、不透明、并發(fā)壓力、缺少全局時(shí)鐘等。著名的FLP(Fisher-Lynch-Paterson)定理指出:在網(wǎng)絡(luò)可靠,存在節(jié)點(diǎn)失效(即使只有一個(gè)錯(cuò)誤節(jié)點(diǎn))的最小化異步模型系統(tǒng)中,不存在一個(gè)可以解決一致性問題的確定性算法。2024/6/25第二節(jié)分布式賬本與去中心化加密數(shù)字資產(chǎn)的分布式共識(shí)在比特幣的點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)中,交易信息通過網(wǎng)絡(luò)廣播傳遞至各個(gè)節(jié)點(diǎn)。節(jié)點(diǎn)間需要達(dá)成共識(shí)的基本內(nèi)容是:當(dāng)一個(gè)節(jié)點(diǎn)提議將一些交易信息打包成塊放入?yún)^(qū)塊鏈時(shí),其他節(jié)點(diǎn)需要投票決定哪些交易是合法、正當(dāng)?shù)模M(jìn)而可以納入到全局一致的總帳本中。換言之,用戶節(jié)點(diǎn)需要對(duì)賬本情況達(dá)成共識(shí),且只有在達(dá)成共識(shí)賬本中記錄的交易才是有效交易。更進(jìn)一步的,有效的交易活動(dòng)總是伴隨著比特幣的轉(zhuǎn)移,那么一個(gè)公鑰地址所擁有比特幣數(shù)量的變化取決于且僅取決于被確認(rèn)的有效交易,一個(gè)公鑰地址擁有多少比特幣資產(chǎn)也依賴各節(jié)點(diǎn)對(duì)交易和賬本的共識(shí)。比特幣的賬本共識(shí)是在區(qū)塊鏈上達(dá)成的。2024/6/25第二節(jié)分布式賬本與去中心化加密數(shù)字資產(chǎn)的分布式共識(shí)技術(shù)方面,比特幣共識(shí)過程與傳統(tǒng)分布式數(shù)據(jù)庫(kù)共識(shí)過程的差異主要有三點(diǎn):第一,比特幣引入了隨機(jī)性概念;第二,比特幣的共識(shí)是一種“隱性共識(shí)(ImplicitConsensus)”;第三,比特幣放松了對(duì)共識(shí)終點(diǎn)的規(guī)定,不要求在較短時(shí)間內(nèi)達(dá)成完美一致,但可能存在的分歧會(huì)隨著時(shí)間流逝以指數(shù)形式迅速下降。激勵(lì)機(jī)制方面,通過給誠(chéng)實(shí)節(jié)點(diǎn)價(jià)值不菲的比特幣獎(jiǎng)勵(lì),引導(dǎo)節(jié)點(diǎn)客觀地記錄交易,大大降低惡意節(jié)點(diǎn)攻擊的成功率。我們從一個(gè)相對(duì)簡(jiǎn)單的視角,看看比特幣的這些設(shè)計(jì)是如何結(jié)合起來實(shí)現(xiàn)其優(yōu)良性質(zhì)的。隨著回合數(shù)的增加,正當(dāng)交易得到的確認(rèn)次數(shù)越來越多,僅包含正當(dāng)交易的區(qū)塊鏈越來越長(zhǎng),這個(gè)最長(zhǎng)鏈就是長(zhǎng)期共識(shí)鏈。包含不正當(dāng)交易的區(qū)塊鏈想要追上長(zhǎng)期共識(shí)鏈的長(zhǎng)度,需要惡意節(jié)點(diǎn)持續(xù)被選中,但只要超過50%節(jié)點(diǎn)是誠(chéng)實(shí)節(jié)點(diǎn)的假設(shè)成立,惡意鏈追上長(zhǎng)期共識(shí)鏈的概率會(huì)隨著回合數(shù)的增加呈指數(shù)式下降。2024/6/25第二節(jié)分布式賬本與去中心化2024/6/25專欄4-2加密貨幣區(qū)塊鏈的分叉正常情況下,加密貨幣區(qū)塊鏈的共識(shí)機(jī)制能夠確保所有經(jīng)驗(yàn)證的新數(shù)據(jù)區(qū)塊都被附加在最長(zhǎng)鏈的末端,惡意攻擊者任何延長(zhǎng)虛假交易鏈條的企圖都會(huì)被群體共識(shí)打敗,從而形成一條長(zhǎng)長(zhǎng)的、獨(dú)一無二的長(zhǎng)期共識(shí)鏈。不過,加密貨幣還遠(yuǎn)沒有達(dá)到成熟水平,共識(shí)規(guī)則、協(xié)議并不是一成不變的;相反,加密貨幣系統(tǒng)正在不斷演進(jìn)、升級(jí)當(dāng)中。需要注意的是,與一般的軟件升級(jí)不同,去中心化的加密貨幣系統(tǒng)升級(jí)需要協(xié)調(diào)和考慮多數(shù)系統(tǒng)參與者的意見,并且可能出現(xiàn)區(qū)塊鏈“分叉(Fork)”的現(xiàn)象。分叉指的是:當(dāng)協(xié)議發(fā)生變化后,一些節(jié)點(diǎn)沒有發(fā)現(xiàn)協(xié)議變化或者短時(shí)間內(nèi)不愿意升級(jí),此時(shí)使用新舊版本軟件的節(jié)點(diǎn)同時(shí)工作,將區(qū)塊鏈分成兩個(gè)(或更多)分支,并在不同分支上出現(xiàn)高度相同的塊。區(qū)塊鏈分叉一般可以劃分為“軟分叉(SoftFork)”和“硬分叉(HardFork)”兩類,究竟出現(xiàn)哪種分叉取決于引入的新協(xié)議與舊協(xié)議的兼容情況。一種情況是新協(xié)議變得更嚴(yán)格,那么按照新協(xié)議創(chuàng)建的塊仍然能被舊協(xié)議接受,但新協(xié)議不接受舊協(xié)議創(chuàng)建的塊,在這軟件開發(fā)中一般稱為“向后兼容”。我們假設(shè)大多數(shù)礦工已經(jīng)更新了軟件,并挖出了新協(xié)議下的第一個(gè)區(qū)塊C(圖1左半部分),附加在舊協(xié)議下最后一個(gè)區(qū)塊B之后。之后,假如遵循舊協(xié)議的礦工找到一個(gè)區(qū)塊D,他會(huì)選擇區(qū)塊C作為鏈的末端,因?yàn)榕f協(xié)議可以接受新協(xié)議的塊。如果遵循新協(xié)議的礦工挖到了另一個(gè)區(qū)塊,它會(huì)認(rèn)為舊協(xié)議下挖到的D塊是無效的,因此將新塊附加到C(新協(xié)議下挖出的塊)上,形成D’。由于大多數(shù)礦工已經(jīng)更新了軟件,所以更大概率由遵循新協(xié)議的礦工繼續(xù)挖出新塊E’,它并且將其附加到D’上。這樣舊協(xié)議下的分支就變成了短鏈,那么下一輪中無論新舊協(xié)議下挖到的區(qū)塊都會(huì)附加在E’上,從而使D徹底稱為“孤兒塊”。如果上述過程重復(fù)發(fā)生一次,最終共識(shí)鏈會(huì)變成A-B-C-D’-E’-F’-G’。使用舊協(xié)議挖出的D和F因?yàn)椴辉陂L(zhǎng)期共識(shí)鏈上無法獲得采礦獎(jiǎng)勵(lì),因此這些礦工會(huì)有動(dòng)力升級(jí)他們的協(xié)議。在上述過程中出現(xiàn)的區(qū)塊鏈分叉被稱為軟分叉。可以看出,軟分叉并不會(huì)真正導(dǎo)致區(qū)塊鏈分成兩個(gè)分支,隨著新舊協(xié)議的統(tǒng)一(如果大多數(shù)礦工不升級(jí),存在協(xié)議更新失敗的可能),分叉會(huì)消失,并回歸唯一的共識(shí)鏈。另一種情況是新協(xié)議變得寬松導(dǎo)致不能向后兼容,或者協(xié)議發(fā)生重大改變(例如改變了Hash算法),這時(shí)新協(xié)議創(chuàng)建的塊在舊協(xié)議下是無效的,那么可能發(fā)生“硬分叉”(圖1右半部分)。先考慮協(xié)議變得寬松的情況,假如協(xié)遵循新協(xié)議的礦工挖出了協(xié)議更新后第一個(gè)區(qū)塊C,并將其附加在協(xié)議變更前最后一個(gè)區(qū)塊B之后。隨后,如果仍然遵循舊協(xié)議的礦工如果挖出了一個(gè)新區(qū)塊,它會(huì)認(rèn)為C是無效塊,而把新挖出的區(qū)塊也附加在協(xié)議變更前的最后一個(gè)區(qū)塊B上。此時(shí),兩個(gè)區(qū)塊鏈分支的高度相等。接下來,如果遵循新協(xié)議的礦工又挖出一個(gè)塊D,它可以選擇將其附加C上,也可以附加在C’上(舊協(xié)議更加嚴(yán)格,因此舊協(xié)議的塊是可以被新協(xié)議接受的)。但既然這個(gè)礦工選擇了升級(jí)協(xié)議,那么更大概率他會(huì)選擇延續(xù)新協(xié)議下產(chǎn)出的C而不是舊協(xié)議的C’。如果遵循舊協(xié)議的礦工挖出了新塊,它認(rèn)定D是無效的,只能繼續(xù)將其附加到C’上。這樣,新舊協(xié)議下的礦工會(huì)各自選擇在A-B-C-D和A-B-C’-D’這兩個(gè)分支上繼續(xù)工作直至一方放棄,或者永久地持續(xù)下去,將區(qū)塊鏈分裂成兩個(gè)鏈。如果是協(xié)議發(fā)生重大改變的情況,新舊協(xié)議互相不能兼容,同樣也會(huì)產(chǎn)生硬分叉,這里不再贅述。第二節(jié)分布式賬本與去中心化共識(shí)算法PoW算法根據(jù)用戶節(jié)點(diǎn)占有的計(jì)算能力來決定節(jié)點(diǎn)被選中的概率,其基本原理是通過求解哈希謎題來證明工作量。任何節(jié)點(diǎn)想要提議下一個(gè)區(qū)塊都必須先求解出一個(gè)哈希謎題,而求解哈希謎題的唯一辦法就是去嘗試足夠多的臨時(shí)隨機(jī)數(shù),直到結(jié)果滿足系統(tǒng)要求為止。PoS算法的典型過程是:通過保證金(代幣、資產(chǎn)等具有價(jià)值的物品)來押注記賬權(quán)分配過程,提供的保證金越多則獲得記賬權(quán)的概率越大;一個(gè)節(jié)點(diǎn)獲得記賬權(quán)后可以提議一個(gè)合法的新區(qū)塊,同時(shí)獲得抵押資產(chǎn)的利息和交易服務(wù)費(fèi)作為記賬的獎(jiǎng)勵(lì);若節(jié)點(diǎn)存在惡意行為則將面臨保證金被罰沒的風(fēng)險(xiǎn)。2024/6/25第三節(jié)腳本與智能合約比特幣腳本在介紹比特幣腳本之前,需要重申比特幣系統(tǒng)中一個(gè)關(guān)鍵概念:未花費(fèi)交易輸出UTXO(UnspentTransactionOutput)。比特幣腳本是比特幣的工作控制語言,是一種基于堆棧的逆波蘭式(ReversePolishnotation,RPN)[逆波蘭式(或逆波蘭記法),也叫后綴表達(dá)式(將運(yùn)算符寫在操作數(shù)之后),指的是不包含括號(hào),運(yùn)算符放在兩個(gè)運(yùn)算對(duì)象的后面,所有的計(jì)算按運(yùn)算符出現(xiàn)的順序,嚴(yán)格從左向右進(jìn)行(不再考慮運(yùn)算符的優(yōu)先規(guī)則)。]簡(jiǎn)單執(zhí)行語言。2024/6/25第二節(jié)分布式賬本與去中心化比特幣腳本雖然付款至公鑰哈希(P2PKH)是最常見的輸出形式,但并不是唯一,比特幣系統(tǒng)還支持付款至腳本哈希(Pay-to-ScriptHash,P2SH)。P2PKH和P2SH的主要差別是資金的轉(zhuǎn)出條件不同。在P2PKH場(chǎng)景下,一筆比特幣資金的轉(zhuǎn)出條件就是該筆資金的上個(gè)發(fā)送方設(shè)定的鎖定腳本,接收者通過私鑰簽名和公鑰解鎖后即可轉(zhuǎn)出。而在P2SH場(chǎng)景下,接收者首先構(gòu)建一個(gè)贖回腳本,對(duì)這個(gè)贖回腳本進(jìn)行哈希計(jì)算,并將哈希值發(fā)送給比特幣發(fā)送者;發(fā)送者對(duì)這個(gè)腳本哈希付款,且不再設(shè)定鎖定腳本;這時(shí),接收者如想將這筆比特幣轉(zhuǎn)出,就需要滿足贖回腳本中的轉(zhuǎn)出條件。贖回腳本的設(shè)定可以是多樣的,從而能夠?qū)崿F(xiàn)多重簽名、第三方支付等更復(fù)雜的交易,這些構(gòu)建了可編程貨幣和智能合約的基礎(chǔ)。2024/6/25第二節(jié)分布式賬本與去中心化智能合約智能合約(SmartContract)是“一套以數(shù)字形式定義的承諾,包括合約參與方可以在上面執(zhí)行這些承諾的協(xié)議。”比特幣的多重簽名和P2SH可以算是分布式系統(tǒng)智能合約的雛形。為了避免因編寫疏忽等原因?qū)е碌臒o限循環(huán),以及防止形成腳本漏洞而被惡意攻擊者所利用,比特幣的腳本語言被設(shè)計(jì)得非常簡(jiǎn)單,僅可在有限的范圍內(nèi)執(zhí)行,做較簡(jiǎn)單的數(shù)據(jù)處理,不具備循環(huán)和復(fù)雜的流控制功能。以太坊支持的Solidity、Serpent等圖靈完備的智能合約編程語言提供了完整的自由度,可以讓用戶搭建各種應(yīng)用,能提供的業(yè)務(wù)幾乎是無窮無盡的。嚴(yán)禁復(fù)刻第二節(jié)分布式賬本與去中心化專欄4-3區(qū)塊鏈的分層架構(gòu)與擴(kuò)展方案在學(xué)習(xí)加密貨幣或區(qū)塊鏈時(shí),可能經(jīng)常會(huì)遇到諸如“第一層協(xié)議”和“第二層協(xié)議”等術(shù)語,或者“數(shù)據(jù)層”、“共識(shí)層”等說法。那么,區(qū)塊鏈究竟是如何分層,各層都承擔(dān)什么職能,分別有哪些核心技術(shù)呢?從技術(shù)上來看,區(qū)塊鏈的分層架構(gòu)主要包括五個(gè)層面,分別是:硬件基礎(chǔ)設(shè)施層、數(shù)據(jù)層、網(wǎng)絡(luò)層、共識(shí)層、應(yīng)用層(如下圖所示)。硬件基礎(chǔ)設(shè)施層指的是構(gòu)成區(qū)塊鏈點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)的各個(gè)節(jié)點(diǎn),這些節(jié)點(diǎn)共同構(gòu)成了一個(gè)分布式數(shù)據(jù)庫(kù),存儲(chǔ)所有數(shù)據(jù),驗(yàn)證和記錄交易及其他相關(guān)數(shù)據(jù)。數(shù)據(jù)層是以區(qū)塊鏈表形式存在的所有數(shù)據(jù),其中包括了存儲(chǔ)交易信息的區(qū)塊、時(shí)間戳、簽名信息、隨機(jī)數(shù)、區(qū)塊版本號(hào)、當(dāng)前難度目標(biāo)等等信息。網(wǎng)絡(luò)層負(fù)責(zé)節(jié)點(diǎn)間的通信,確保節(jié)點(diǎn)可以找到網(wǎng)絡(luò)中的其他節(jié)點(diǎn)并與之進(jìn)行交互、交易信息傳播和區(qū)塊同步,以保持整個(gè)區(qū)塊鏈網(wǎng)絡(luò)處于正常狀態(tài)。共識(shí)層是區(qū)塊鏈中最核心的部分,主要負(fù)責(zé)驗(yàn)證區(qū)塊和更新整個(gè)分布式賬本,并保證整個(gè)網(wǎng)絡(luò)對(duì)賬本達(dá)成共識(shí)。應(yīng)用層是最終用戶與區(qū)塊鏈網(wǎng)絡(luò)進(jìn)行直接交互的層面,包括智能合約、鏈碼、去中心化應(yīng)用程序等等,腳本、應(yīng)用程序編程接口(API)、用戶界面等也屬于這一層面。我們從前面章節(jié)中已經(jīng)了解到著名的CAP定理,去中心化
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- DB32/T 3500-2019涂料中揮發(fā)性有機(jī)物限量
- DB32/T 2019-2019勞動(dòng)關(guān)系和諧企業(yè)評(píng)價(jià)規(guī)范
- DB31/T 549-2011汽車加油站職業(yè)衛(wèi)生管理規(guī)范
- DB31/T 360-2020住宅物業(yè)管理服務(wù)規(guī)范
- DB31/T 356-2019規(guī)模化奶牛場(chǎng)生產(chǎn)技術(shù)規(guī)范
- DB31/T 1313-2021燃料電池汽車及加氫站公共數(shù)據(jù)采集技術(shù)規(guī)范
- DB31/T 1216-2020數(shù)據(jù)中心節(jié)能評(píng)價(jià)方法
- DB31/T 1195-2019攀巖場(chǎng)所服務(wù)規(guī)范
- 股份制旅游度假村股份分配與旅游資源開發(fā)合同
- DB31/T 1180-2019水性防水涂料單位產(chǎn)品能源消耗限額
- 工業(yè)建筑混凝土工程監(jiān)理實(shí)施細(xì)則
- 0-6歲兒童發(fā)育行為評(píng)估表
- LY/T 3292-2021自然保護(hù)地生態(tài)旅游規(guī)范
- GB/T 24915-2010合同能源管理技術(shù)通則
- JGJT 223-2010 預(yù)拌砂漿應(yīng)用技術(shù)規(guī)程
- 電力電纜基礎(chǔ)知識(shí)專題培訓(xùn)課件
- 《國(guó)際貿(mào)易地理》課件
- 三級(jí)動(dòng)火作業(yè)許可證
- 施工組織設(shè)計(jì)實(shí)訓(xùn)任務(wù)書
- 貪污賄賂犯罪PPT(培訓(xùn))(PPT168頁)課件
- 【醫(yī)學(xué)課件】生物大分子(蛋白質(zhì)、核酸和酶)的結(jié)構(gòu)與功能
評(píng)論
0/150
提交評(píng)論