版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第一章區(qū)塊鏈概述全套PPT課件目錄/CONTENTS1.1什么是區(qū)塊鏈1.2區(qū)塊鏈的發(fā)展1.3區(qū)塊鏈的分類1.4區(qū)塊鏈體系結(jié)構(gòu)1.5區(qū)塊鏈+應(yīng)用本章小結(jié)思考題1.1.1區(qū)塊鏈的定義區(qū)塊鏈包含兩個概念:分布式賬本和智能合約。區(qū)塊鏈的實質(zhì)是一個由多方參與、共同維護(hù)、持續(xù)增長的分布式數(shù)據(jù)庫,也被稱為分布式共享總賬。其特點是分布式網(wǎng)絡(luò)、可建立信任、公開透明和不可篡改。如果把數(shù)據(jù)庫假設(shè)成一本賬本,讀寫數(shù)據(jù)庫就是一種記賬行為。在一段時間內(nèi)找出系統(tǒng)中記賬最快、最好的人來記賬,然后將賬本的該頁信息發(fā)給系統(tǒng)里的其他人,相當(dāng)于改變數(shù)據(jù)庫所有的記錄,發(fā)給全網(wǎng)的每個節(jié)點。1.1.1區(qū)塊鏈的定義區(qū)塊鏈技術(shù)是利用塊鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu)來驗證與存儲數(shù)據(jù),利用分布式節(jié)點共識算法來生成和更新數(shù)據(jù),利用密碼學(xué)的方式保證數(shù)據(jù)傳輸和訪問的安全,利用由自動化腳本代碼組成的智能合約來編程和操作數(shù)據(jù)的一種全新的分布式基礎(chǔ)架構(gòu)與計算范式,最終由信息互聯(lián)實現(xiàn)價值互聯(lián)。全網(wǎng)的每個節(jié)點。區(qū)塊鏈技術(shù)的優(yōu)勢主要體現(xiàn)在兩方面:一是其分布式的存儲架構(gòu),節(jié)點越多,數(shù)據(jù)存儲的安全性越高;二是其防篡改和去中心化的巧妙設(shè)計,使得任何人都很難違背規(guī)則修改數(shù)據(jù)。區(qū)塊鏈分布式架構(gòu)模式數(shù)據(jù)結(jié)構(gòu)鏈?zhǔn)浇Y(jié)構(gòu)分布式數(shù)據(jù)存儲1.1.2區(qū)塊鏈的特點分布式網(wǎng)絡(luò)區(qū)塊鏈以分布式網(wǎng)絡(luò)為基礎(chǔ)構(gòu)建,數(shù)據(jù)庫賬本分散在網(wǎng)絡(luò)中的每個節(jié)點上,每個節(jié)點都有一個該賬本的副本,所有副本同步更新??山⑿湃喂_透明除了對交易各方的私有信息進(jìn)行加密外,區(qū)塊鏈數(shù)據(jù)對所有人公開透明,所有用戶看到的是同一個賬本,所有用戶都能看到這一賬本記錄的每一筆交易,任何人都能通過公開的接口,對區(qū)塊鏈數(shù)據(jù)進(jìn)行查詢,并能開發(fā)相關(guān)應(yīng)用。不可篡改所謂不可篡改,即信息一旦經(jīng)過驗證并添加到區(qū)塊鏈,就會被永久地存儲起來。1.1.3區(qū)塊鏈與大數(shù)據(jù)、云計算的關(guān)系1.區(qū)塊鏈和大數(shù)據(jù)的關(guān)系(1)數(shù)據(jù)安全。(2)數(shù)據(jù)開放共享。(3)數(shù)據(jù)存儲。(4)數(shù)據(jù)分析。(5)數(shù)據(jù)流通。2.區(qū)塊鏈和云計算的關(guān)系從存儲的角度來看,云計算中的存儲和區(qū)塊鏈中的存儲都是由普通存儲介質(zhì)組成的;從安全性的角度來看,云計算的安全性主要是為了保證應(yīng)用程序能夠安全、穩(wěn)定、可靠地運行,這種安全屬于傳統(tǒng)安全的范疇。區(qū)塊鏈數(shù)據(jù)開放共享數(shù)據(jù)安全數(shù)據(jù)分析數(shù)據(jù)存儲數(shù)據(jù)流通1.1.4區(qū)塊鏈的局限性1.運行安全風(fēng)險區(qū)塊鏈把密碼學(xué)、分布式存儲等技術(shù)融為一體,但這并不意味著它本身是沒有漏洞的。2.系統(tǒng)效率及可擴展性問題區(qū)塊鏈?zhǔn)褂枚喙?jié)點冗余方式保證數(shù)據(jù)存儲的去中心化,這意味著對存儲空間的極大浪費,且對整個鏈內(nèi)大多數(shù)節(jié)點做一次更新非常耗時;區(qū)塊鏈網(wǎng)絡(luò)的價值正比于其節(jié)點規(guī)模,價值越高的網(wǎng)絡(luò)越浪費、效率越低。3.隱私泄露風(fēng)險隨著區(qū)塊鏈技術(shù)在各個領(lǐng)域的廣泛應(yīng)用,區(qū)塊鏈面臨著嚴(yán)重的數(shù)據(jù)隱私泄露風(fēng)險。用戶使用區(qū)塊鏈過程中,個人基本身份信息數(shù)據(jù)和交易信息數(shù)據(jù)極易被泄露。攻擊者通過地址聚類等技術(shù)來判別多個賬戶是否屬于同一用戶,挖掘用戶真實信息,導(dǎo)致用戶的數(shù)據(jù)隱私泄露。簡言之,用戶的身份信息與交易信息易被攻擊者獲取。1.2區(qū)塊鏈的發(fā)展1.2.1區(qū)塊鏈的發(fā)展歷程區(qū)塊鏈技術(shù)早期的主要階段:1.2區(qū)塊鏈的發(fā)展1.2.1區(qū)塊鏈的發(fā)展歷程B-T幣早期發(fā)展的重要事件如圖:1.2區(qū)塊鏈的發(fā)展1.2.1區(qū)塊鏈的發(fā)展歷程B-T幣近年來的重要事件:1.2區(qū)塊鏈的發(fā)展1.2.2區(qū)塊鏈發(fā)展的三個階段1.區(qū)塊鏈1.0:B-T幣得到廣泛應(yīng)用2.區(qū)塊鏈2.0:數(shù)字貨幣與智能合約結(jié)合3.區(qū)塊鏈3.0:泛行業(yè)去中心化應(yīng)用(1)推動新一代信息技術(shù)產(chǎn)業(yè)的發(fā)展。(2)為經(jīng)濟(jì)社會轉(zhuǎn)型升級提供技術(shù)支撐。(3)培育新的創(chuàng)業(yè)創(chuàng)新機會。(4)為社會管理和治理水平的提升提供技術(shù)手段。1.3區(qū)塊鏈的分類1.3.1公有鏈1.3.2聯(lián)盟鏈1.3.3私有鏈1.3.4側(cè)鏈核心觀點是“B-T幣”的區(qū)塊鏈在概念上獨立于作為資產(chǎn)的B-T幣。1.3.5互聯(lián)鏈針對特定領(lǐng)域的應(yīng)用可以在各自的垂直領(lǐng)域形成區(qū)塊鏈。這些區(qū)塊鏈將有互聯(lián)需求,因此這些區(qū)塊鏈也將通過某種互聯(lián)互通協(xié)議進(jìn)行連接。就像互聯(lián)網(wǎng)一樣,區(qū)塊鏈上的這種互聯(lián)構(gòu)成了一個互聯(lián)鏈,形成了一個全球性的區(qū)塊鏈網(wǎng)絡(luò)。公有鏈區(qū)塊鏈私有鏈聯(lián)盟鏈許可鏈非許可鏈1.4區(qū)塊鏈體系結(jié)構(gòu)1.?dāng)?shù)據(jù)與網(wǎng)絡(luò)組織協(xié)議層該層為區(qū)塊鏈網(wǎng)絡(luò)中各種獨立并維持高安全性的節(jié)點提供了多種加密功能。2.分布式共識協(xié)議層分布式共識協(xié)議層為維護(hù)區(qū)塊鏈網(wǎng)絡(luò)中數(shù)據(jù)的排序與其本身的一致性和原創(chuàng)性提供了核心功能。3.智能合約層4.人機交互層區(qū)塊鏈網(wǎng)絡(luò)因其獨特的框架和技術(shù)體系,適合作為自組織系統(tǒng)的底層支撐,用于管理分布式網(wǎng)絡(luò)節(jié)點之間數(shù)據(jù)或交易驅(qū)動的交互行為。1.5區(qū)塊鏈+應(yīng)用金融政府醫(yī)療物聯(lián)網(wǎng)農(nóng)業(yè)能源人工智能大數(shù)據(jù)云計算深度學(xué)習(xí)區(qū)塊鏈本章小結(jié)本章的目的是讓讀者對區(qū)塊鏈有一個初步的了解。首先介紹了區(qū)塊鏈的定義、特點,以及區(qū)塊鏈與大數(shù)據(jù)和云計算的關(guān)系,還有它的局限性,然后介紹了區(qū)塊鏈的發(fā)展歷程和幾個階段,接著介紹了區(qū)塊鏈的分類和區(qū)塊鏈的體系結(jié)構(gòu)。后文將在此基礎(chǔ)上更詳細(xì)地闡述區(qū)塊鏈的各種技術(shù)原理,并對區(qū)塊鏈進(jìn)行更深入的探索。本章介紹了目前國內(nèi)外提出的各種“區(qū)塊鏈+行業(yè)”的落地應(yīng)用,如區(qū)塊鏈+金融、區(qū)塊鏈+政府、區(qū)塊鏈+醫(yī)療、區(qū)塊鏈+物聯(lián)網(wǎng)、區(qū)塊鏈+農(nóng)業(yè)、區(qū)塊鏈+能源;也介紹了一些“區(qū)塊鏈+新技術(shù)”的設(shè)計實現(xiàn)原理和應(yīng)用案例,如區(qū)塊鏈+人工智能、區(qū)塊鏈+大數(shù)據(jù)、區(qū)塊鏈+云計算、區(qū)塊鏈+深度學(xué)習(xí)。綜上,我們不難看出,區(qū)塊鏈技術(shù)幾乎可以滲透生活的每一個角落。也許20年、10年,甚至5年、1年后,區(qū)塊鏈會以光速融入人們的生活。也許你也不知道具體哪里運用了區(qū)塊鏈技術(shù),但它已無處不在,與你的生活融為一體。謝謝!第二章區(qū)塊鏈開發(fā)基礎(chǔ)目錄/CONTENTS2.1Python的特點和應(yīng)用領(lǐng)域2.2模塊2.3基于Tkinter的圖形開發(fā)界面2.4Web開發(fā)本章小結(jié)2.1Python的特點和應(yīng)用領(lǐng)域Python是一種簡單的、面向?qū)ο蟮摹⒔换ナ降摹⒔忉屝偷摹⒖梢浦驳母呒壵Z言。Python具有語法清晰、簡單易用、功能強大、可移植性強、通用性好的特點,適用于Linux、MS-DOS、MacOS、Windows等多種操作系統(tǒng)。Python是一種設(shè)計良好的編程語言,可以應(yīng)用于各個領(lǐng)域。事實上,作為一種通用語言,Python的作用幾乎是無限的。從網(wǎng)站和游戲開發(fā)到機器人和航天飛機控制,你可以在任何場合使用Python。Python……數(shù)學(xué)處理文本處理Web編程多媒體應(yīng)用Pymo引擎黑客編程圖形處理2.2.1模塊的使用和安裝自包含的、有組織的代碼段就是模塊。Python允許“調(diào)用”模塊,允許使用其他模塊的屬性結(jié)合以前的工作成果實現(xiàn)代碼重用。安裝模塊:①官網(wǎng)下載安裝;②命令行安裝(推薦)命令行口令(假設(shè)安裝hashlib模塊):pipinstallhashlib
使用pip安裝口令的前提是安裝了pip。安裝模塊后就是導(dǎo)入模塊,我們使用import語句進(jìn)行導(dǎo)入。
命令行口令(假設(shè)導(dǎo)入hashlib模塊):import
hashlib
注意:該過程遵循作用域原則:如果在一個模塊的頂層導(dǎo)入,那么它的作用域是全局的;如果在函數(shù)中導(dǎo)入,那么它的作用域是局部的。2.2.2基本模塊hashlib:Python的hashlib模塊提供了常見的摘要算法,如MD5、SHA-1、SHA-256等。尤其SHA-256算法,它是區(qū)塊鏈安全的基石。簡單來說,SHA-256算法就是把一串明文通過hashlib模塊提供的某個算法轉(zhuǎn)換為一個固定長度的字符串。datetime:在區(qū)塊鏈中,為了進(jìn)一步提高安全性,避免彩虹表攻擊,在對明文進(jìn)行哈希處理的時候我們往往還會加上時間戳,即獲得系統(tǒng)時間,拼接原文再生成一個哈希值。datetime是Python處理日期和時間的標(biāo)準(zhǔn)庫。
可以使用如下代碼獲取當(dāng)前日期與時間。
>>>importdatetimeastime>>>now=time.datetime.now()>>>print(now)2019-06-2111:00:20.5009192.2.2基本模塊struct:由于Python沒有專門處理字節(jié)的數(shù)據(jù)類型,因此需要Struct模塊在Python值和表示為Pythonbytes對象的緩沖區(qū)結(jié)構(gòu)體之間進(jìn)行轉(zhuǎn)換。Struct模塊可用于處理存儲在文件中或者來自網(wǎng)絡(luò)的鏈接,以及其他來源的二進(jìn)制數(shù)據(jù)。序號異常和函數(shù)含義1異常struct.error在各種場合拋出異常,參數(shù)是描述錯誤的字符串。2struct.pack(fmt,v1,v2,…)根據(jù)格式化字符串fmt封裝,返回一個包括v1、v2等值的字節(jié)對象,參數(shù)必須與格式化所需的值完全匹配。3struct.pack_into(fmt,buffer,offset,v1,v2,…)根據(jù)格式化字符串fmt,封裝v1、v2等值,并從位置offset開始,將封裝后的字節(jié)寫入可寫緩沖區(qū)buffer中。注意,offset是必需的參數(shù)。4struct.unpack(fmt,buffer)根據(jù)格式化字符串fmt,從緩沖區(qū)buffer中解包。即使結(jié)果只包含一項,也是一個元組。緩沖區(qū)的大小必須與格式所需的大小匹配,如calcsize()所得的結(jié)果。5struct.unpack_from(fmt,buffer,offset=0)根據(jù)格式化字符串fmt,從位置offset開始解包。即使結(jié)果只包含一項,也是一個元組。緩沖區(qū)的大小減去offset,至少是格式化所需的大小,如calcsize()所得的結(jié)果。6er_unpack(fmt,buffer)根據(jù)格式化字符串fmt,從緩沖區(qū)buffer中迭代解包,該函數(shù)返回一個iterator,它從緩沖區(qū)中讀取大小相等的塊,直到所有的內(nèi)容被耗盡。緩沖區(qū)的大小必須是格式化所需大小的倍數(shù),如calcsize()所得的結(jié)果。7struct.calcsize(fmt)返回對應(yīng)格式化字符串fmt的結(jié)構(gòu)體的大小。表2-1struct模塊定義的異常和函數(shù)2.2.2基本模塊urllib:urllib是Python內(nèi)置的HTTP請求庫,無須安裝即可使用,它包含了4個模塊.
request:它是最基本的HTTP請求模塊,用來模擬發(fā)送請求;error:異常處理模塊,如果出現(xiàn)錯誤可以捕獲這些異常;
parse:一個工具模塊,提供了許多URL處理方法,如拆分、解析、合并等;rebotparser:主要用來識別網(wǎng)站的robots.txt文件.urlliburllib.requesturllib.parseurllib.rebotparserurllib.error2.3基于Tkinter的圖形開發(fā)界面
Tkinter是Python的默認(rèn)GUI庫,它基于Tk工具集。Tk最初是為工具命令語言設(shè)計的。Tkinter流行后被移植到許多其他腳本語言中,包括Perl、Ruby和Python。利用Tkinter開發(fā)GUI具有靈活性和可移植性,配合簡潔的腳本語言和強勁的系統(tǒng)語言,可以快速開發(fā)GUI程序。序號組件名稱組件中文名含義1Button按鈕類似于標(biāo)簽,但提供額外功能,例如鼠標(biāo)指針掠過、按下鼠標(biāo)、松開鼠標(biāo)以及鍵盤操作2Canvas畫布提供繪圖功能,包括繪制直線、橢圓、多邊形、矩形等,可以包含圖形或位圖3Cheakbutton選擇按鈕一組方框,可以選擇其中任意多個4Entry文本框單行文字域,用來收集鍵盤輸入5Frame框架包含其他組件的純?nèi)萜?Lable標(biāo)簽用來顯示文字或者圖片7Listbox列表框一個選項列表,用戶可以從中選擇8Menu菜單按下菜單按鈕后彈出一個選項列表,用戶可以從中選擇9Menubutton菜單按鈕用來包含菜單的組件10Message消息框類似于標(biāo)簽,但可以顯示多行文本11Radiobutton單選按鈕一組按鈕,其中只有一個可被按下12Scale進(jìn)度條線性“滑塊”組件,可設(shè)定起始值和結(jié)束值,會顯示當(dāng)前位置的精確值13Scrollbar滾動條對其支持的組件提供滾動功能14Text文本域多行文字區(qū)域,可用來收集或顯示用戶輸入的文字15Toplevel頂級類似于框架,但提供一個獨立的窗口容器表2-2Tkinter的組件2.3基于Tkinter的圖形開發(fā)界面創(chuàng)建和執(zhí)行GUI程序,需要如下5個基本步驟。
(1)導(dǎo)入Tkinter模塊(importTkinter)。
(2)創(chuàng)建一個頂層窗口對象,來容納整個GUI程序。
(3)在頂層窗口對象上創(chuàng)建所有的GUI模塊。
(4)把這些GUI模塊與底層代碼相連接。
(5)執(zhí)行事件循環(huán)。創(chuàng)建一個簡單的GUI程序:importtkintertop=tkinter.TK()top.mainloop()
執(zhí)行結(jié)果為一個簡單的空白窗口。2.4.1HTTPS簡介HTTPS(HyperTextTransferProtocoloverSecureSocketLayer,超文本傳輸協(xié)議安全套接字層)簡單來說就是加密數(shù)據(jù)傳輸,通俗地說就是安全連接。它使用安全套接字層(SecureSocketsLayer,SSL)進(jìn)行信息交換,是HTTP的安全版,基于HTTP開發(fā),是一個抽象標(biāo)識符體系(URIScheme),句法同http:體系,用于在服務(wù)器和客戶機之間安全交換信息和數(shù)據(jù)。它是一個安全通信通道,具有數(shù)據(jù)完整性好、數(shù)據(jù)隱私性好和可實現(xiàn)身份認(rèn)證三點優(yōu)勢。HTTPTCPIPHTTPSSSL/TLSTCPIP2.4.2Web框架在實際開發(fā)中,底層代碼由專門的服務(wù)器軟件來實現(xiàn),我們用Python專注于生成HTML文本。因為我們不希望接觸到TCP連接、HTTP原始請求和響應(yīng)格式,所以需要一個統(tǒng)一的接口(WSGI),讓我們專心用Python編寫Web業(yè)務(wù)。WSGI雖然比HTTP接口高級,但和WebAPP的邏輯相比,還是比較低級的,我們需要在WSGI上繼續(xù)抽象,至于URL到函數(shù)的映射,就交給Web框架來完成。序號Web框架含義1Django全能型Web框架2Web.py一個小巧的Web框架3Bottle和Flask類似的Web框架4TomadoFacebook的開源異步Web框架5Flask一個使用Python編寫的輕量級Web應(yīng)用框架表2-3常見的Python的Web框架本章小結(jié)本章向讀者著重介紹了Python的特點、應(yīng)用領(lǐng)域、模塊、圖形界面的開發(fā)和Web開發(fā)。由于本書篇幅有限,還需要讀者自行參考相關(guān)書籍學(xué)習(xí)Python編程語法等基礎(chǔ)知識,為后面區(qū)塊鏈編程打下基礎(chǔ),為后期區(qū)塊鏈的開發(fā)做好準(zhǔn)備工作。在接下來的內(nèi)容中,將會有大量的基于Python編程的實戰(zhàn),如私有鏈的開發(fā)、公有鏈的開發(fā)以及最后的完整項目實戰(zhàn)。謝謝!第三章區(qū)塊鏈開發(fā)基礎(chǔ)目錄/CONTENTS3.1區(qū)塊鏈加密技術(shù)3.2區(qū)塊鏈核心問題3.3區(qū)塊鏈共識機制3.4編程案例本章小結(jié)3.1.1安全哈希函數(shù)哈希(Hash)函數(shù)是非?;A(chǔ)同時又相當(dāng)重要的一種數(shù)學(xué)函數(shù)。通俗來說,它能將一段數(shù)據(jù)(任意長度)經(jīng)過計算,映射為一段較短的定長的數(shù)據(jù)(就是哈希值,同時也被稱為指紋或摘要)。總結(jié)來說,它具有以下3個特征。(1)其輸入可以是任意長度數(shù)據(jù)。(2)其輸出是固定長度的數(shù)據(jù)。(3)其能進(jìn)行有效計算,簡單來說就是對于任意輸入,在合理的時間范圍內(nèi)我們總能得到哈希函數(shù)的輸出。Hash函數(shù)目標(biāo)文本輸出文本3.1.1安全哈希函數(shù)在基本哈希函數(shù)的基礎(chǔ)上,加密哈希函數(shù)還應(yīng)該具備抗碰撞性和不可逆性兩個特性,具備這兩個特性的哈希函數(shù)在文件的完整性驗證、用戶密碼的保存以及數(shù)字簽名等實際場景中有極大的應(yīng)用。
(1)抗碰撞性:找一個y,使得y的哈希值等于x的哈希值,這幾乎是不可能的,用數(shù)學(xué)表達(dá)式可以表示為:對于x,y(x≠y),H(x)≠H(y),則稱哈希函數(shù)H()具有抗碰撞性。
注意:哈希函數(shù)具有抗碰撞性是說不會發(fā)生碰撞的概率很大,并不表示不存在碰撞。
(2)不可逆性:即我們幾乎無法通過哈希運算的結(jié)果推導(dǎo)出原文??箯娕鲎补艨谷跖鲎补艨乖聪窆魣D3.1Hash函數(shù)安全特性之間的聯(lián)系3.1.1安全哈希函數(shù)安全哈希算法:目前常見的哈希算法包括MD5和SHA系列算法。MD5算法即MD5消息摘要算法,屬哈希算法一類。MD5算法運行任意長度的輸入消息,產(chǎn)生一個128位的消息摘要。圖3.2MD5算法的整體流程圖消息100…00填充(0-511bit)Lbit
N*512bit512bit512bit
512bit
初始序列128bit第一個分塊得出的128bit值第N-1個128bit值最終結(jié)果散列值3.1.1安全哈希函數(shù)SHA-256算法:SHA-256算法輸入報文的最大長度不超過2256位,輸入按512位分組進(jìn)行處理,產(chǎn)生的輸出是一個256位的報文摘要。圖3.3SHA-256算法核心過程該算法使用了6種基本邏輯函數(shù):3.1.2加解密技術(shù)加解密技術(shù)是密碼學(xué)的核心技術(shù)之一,現(xiàn)代加密算法的典型組件包括加解密算法、私鑰和公鑰。在加密過程中,需要通過相應(yīng)的加密算法和雙方的公鑰對明文進(jìn)行加密(變換)獲得密文;在解密過程中,需要通過相應(yīng)的解密算法和私鑰對密文進(jìn)行解密(變換)還原明文。圖3-4加解密基本過程3.1.2加解密技術(shù)根據(jù)公鑰和私鑰是否相同,加解密算法可以分為對稱加密算法和非對稱加密算法兩種基本類型。兩種加密算法適用于不同場景的需求,恰好可以互補,很多時候兩者也可以組合形成混合加密算法。算法類型代表算法特點優(yōu)勢劣勢對稱加密
算法DES、IDEA、3DES、AES加解密密鑰相同空間占用小,計算效率高,加密強度大共享公鑰,易泄密非對稱加密
算法RSA、ElGamal、橢圓曲線系列算法加解密密鑰不相同安全度高,無須提前共享密鑰計算效率低,存在中間人攻擊圖3-1加解密算法類型3.1.2加解密技術(shù)對稱加密算法是用相同的密鑰對原文進(jìn)行加密和解密,它的過程可以用下面兩個公式來表示。
(1)加密過程:密鑰+原文=密文。
(2)解密過程:密文-密鑰=原文。圖3-5對稱加密算法的加解密過程對稱加密算法從實現(xiàn)原理上可以分為兩種:
分組對稱加密:將明文切分為定長數(shù)據(jù)塊作為基
本加密單位,應(yīng)用廣泛。
序列對稱加密:每次只對一個字節(jié)或字符進(jìn)行加
密處理,且密碼不斷變化。3.1.2加解密技術(shù)非對稱加密算法中加密密鑰和解密密鑰是不同的,分別稱為公鑰和私鑰。私鑰一般需要通過隨機算法生成,公鑰可以根據(jù)私鑰生成,而公鑰是一定不能推導(dǎo)出私鑰的。公鑰一般是公開的,可以被他人獲取。而私鑰一般是個人持有的,不能被他人獲取。圖3-6非對稱加密算法的加解密過程3.1.2加解密技術(shù)橢圓曲線加密算法是基于橢圓曲線點群離散對數(shù)問題構(gòu)成的公鑰密碼系統(tǒng),在有限域上做加解密計算。與RSA和DSA加密算法相比,它在抵抗外界攻擊方面明顯具有更強的安全性能,并且具有較為輕巧的密鑰尺寸,是非常適用于區(qū)塊鏈加密的一種算法。
圖3-7橢圓曲線3.1.2加解密技術(shù)橢圓曲線上的基本運算還包括點加運算和倍點運算。橢圓曲線上其他的點運算都可以通過調(diào)用點加運算和倍點運算來實現(xiàn)。點加運算:假定P(x1,
-y1)和Q(x2,
y2)為橢圓曲線上的兩點,計算R(x3,
y3)=P+Q。依據(jù)橢圓曲線的“弦和切線”法則,連接P和Q作一條直線,交于橢圓曲線上的第三點R′,則R′關(guān)于x軸對稱的點R即為所求點。
代數(shù)運算表達(dá)式如下:圖3-8點加運算3.1.2加解密技術(shù)倍點運算:假定P(x1,
y1)為橢圓曲線上的一點,倍點運算即求R(x3,
y3)=2P。倍點運算可以看成點加運算中Q=P的特例,當(dāng)Q無限靠近P時,P和Q所連直線即為橢圓曲線在P處的切線。根據(jù)“弦和切線”法則,
作P點的切線交橢圓曲線于R′,則R′關(guān)于x軸對稱的點R即為所求點。
代數(shù)運算表達(dá)式如下:圖3-9倍點運算3.1.2加解密技術(shù)橢圓曲線標(biāo)量乘運算:橢圓曲線上的標(biāo)量乘運算定義為Q=kP,其中P為定義在有限域Fq內(nèi)的橢圓曲線上的一點。該步驟為完成由私鑰求取公鑰的過程,又稱點乘運算。目前學(xué)者們廣泛認(rèn)為標(biāo)量乘的運算效率決定著整個橢圓曲線密碼系統(tǒng)的效率。通常,對二進(jìn)制下的標(biāo)量乘運算而言,其計算一般通過調(diào)用點加運算和倍點運算來實現(xiàn)。圖3-10標(biāo)量乘運算的基本層次3.1.2加解密技術(shù)橢圓曲線加密步驟:圖3-11橢圓曲線加密算法的加解密步驟通常公鑰加密系統(tǒng)有兩個密鑰,橢圓曲線加密算法同樣也有兩個:公鑰Q與私鑰k。在執(zhí)行加密操作時,要將明文信息嵌入曲線內(nèi)的點;在執(zhí)行解密操作時,需要將其相應(yīng)的點解碼還原成對應(yīng)的明文信息。通常在加密過程中使用一種密鑰進(jìn)行加密,在解密過程中使用另一種密鑰進(jìn)行解密。3.1.2加解密技術(shù)示例:假設(shè)有兩個用戶:用戶A與用戶B,用戶B發(fā)送文件M給用戶A,則使用橢圓曲線加密算法傳輸文件M的過程如下:用戶A自行選取一條橢圓曲線E,之后在其上選定一點作為基點P,同時確定一個私鑰k,最后產(chǎn)生對應(yīng)公鑰:Q
=
kP;用戶A將橢圓曲線E、基點P與公鑰Q傳送給用戶B;用戶B接收到信息后,產(chǎn)生一個隨機整數(shù)x(x
<
n,n為基點P的階數(shù)),x即為用戶B的私鑰,同時將明文M編碼到用戶A自行選取橢圓曲線E上的點Pm,用戶B進(jìn)行下列計算:C1=Pm+xQ,C2=xP,得到相應(yīng)的密文:C=(C1,C2),或者:C3=PmC4,C4=xQ,得到相應(yīng)的密文:C=(C3,C4)。用戶B將密文C傳給用戶A,用戶A接收到密文C,使用私鑰k解密密文:
或者:
同時將橢圓曲線E上的點Pm解碼為明文M即可。3.1.2加解密技術(shù)基于橢圓曲線加密算法的同態(tài)加密方法構(gòu)造:設(shè)E(K,
x)表示用加密算法E和密鑰K對x進(jìn)行加密,F(xiàn)表示一種運算。如果對于加密算法E和運算F,存在有效算法G使得:
就稱加密運算E對于運算F具有同態(tài)性。設(shè)加密函數(shù)為Ek,解密函數(shù)為Dk,明文數(shù)據(jù)為
則加法同態(tài)與乘法同態(tài)可分別表示為:3.1.2加解密技術(shù)混合加密算法:混合加密算法同時結(jié)合了對稱加密算法和非對稱加密算法的優(yōu)點?;旌霞用芩惴ㄊ窍扔糜嬎銖?fù)雜度高的非對稱加密協(xié)商一個臨時的對稱加密密鑰,然后雙方通過對稱加密對傳遞的大量數(shù)據(jù)進(jìn)行加解密處理?;旌霞用芩惴ǖ某R妼嵗褪鞘褂闷毡榈腤eb通信協(xié)議——HTTPS。明文m
加密加密
解密解密圖3-12分組混合加密法示例3.1.3時間戳技術(shù)時間戳就是一份能夠表示一份數(shù)據(jù)在一個特定時間點已經(jīng)存在的、完整的、可驗證的數(shù)據(jù),是能夠唯一標(biāo)識某一時間的字符串,具有防篡改、防復(fù)用等特點,被廣泛應(yīng)用于數(shù)字版權(quán)、電子合同、共識交易等領(lǐng)域。區(qū)塊鏈對每個經(jīng)共識的區(qū)塊加蓋時間戳,證明數(shù)據(jù)的存在狀態(tài)和時間順序,確保數(shù)據(jù)在交易各方之間公開、透明并可追溯,為交易信息提供了有力的存在性證明。權(quán)威時間源時間戳服務(wù)器數(shù)字簽名文件時間戳請求時間戳服務(wù)器反簽名圖3-13時間戳工作示意圖3.1.4梅克爾樹技術(shù)梅克爾樹又稱哈希樹,是將數(shù)據(jù)的哈希值以樹的結(jié)構(gòu)來表示的一種數(shù)據(jù)結(jié)構(gòu),葉子節(jié)點為原始數(shù)據(jù)的哈希值,非葉子節(jié)點為其孩子節(jié)點的哈希值。圖3-14梅克爾樹在區(qū)塊鏈的分布式環(huán)境中,通過使用梅克爾樹的數(shù)據(jù)結(jié)構(gòu)和哈希算法,兩個節(jié)點在共識過程中,只需比較梅克爾樹根節(jié)點的哈希值就能夠判斷兩個節(jié)點分別持有的交易數(shù)據(jù)是否一致。圖3-15區(qū)塊結(jié)構(gòu)3.1.5數(shù)字簽名數(shù)字簽名是非對稱密鑰加密技術(shù)與數(shù)字摘要技術(shù)的應(yīng)用,是只有信息的發(fā)送者才能生成的、別人無法偽造的一段數(shù)字串。通過它能確認(rèn)數(shù)據(jù)的來源以及保證數(shù)據(jù)在發(fā)送的過程中未做任何修改或變動。數(shù)字簽名中的簽名與信息是分開的,需要一種方法將簽名與信息聯(lián)系在一起。任何人都可以利用一種公開的方法對數(shù)字簽名進(jìn)行驗證。圖3-16數(shù)字簽名加解密過程3.1.5數(shù)字簽名盲簽名:簽名者需要在無法看到原始內(nèi)容的前提下對信息進(jìn)行簽名。一方面,盲簽名可以實現(xiàn)對簽名內(nèi)容的保護(hù),防止簽名者看到原始內(nèi)容;另一方面,盲簽名還可以防止追蹤,簽名者無法將簽名內(nèi)容和簽名結(jié)果進(jìn)行對應(yīng)。RSA盲簽名算法是典型的盲簽名算法。圖3-17盲簽名流程圖盲化去盲化用戶消息盲簽簽名者加密簽名簽名驗證消息true/false3.1.5數(shù)字簽名多重簽名:在n個簽名者中,至少收集到m個(n≥m≥1)簽名,即認(rèn)為簽名合法。其中,n是提供公鑰的個數(shù),m是需要匹配公鑰的最少的簽名個數(shù)。多重簽名可以有效地應(yīng)用在多人投票共同決策的場景中。圖3-18多重簽名示例圖買家收貨接收驗證發(fā)貨支付提醒賣方發(fā)貨確認(rèn)貨物后簽名完成交易3.1.5數(shù)字簽名群簽名:即某個群組內(nèi)一個成員可以代表群組進(jìn)行匿名簽名。簽名可以驗證來自該群組,卻無法準(zhǔn)確追蹤到簽名的是哪個成員。群簽名需要一個群管理員來添加新的群成員,因此存在群管理員追蹤到簽名成員身份的風(fēng)險。圖3-19群簽名一般流程圖序號安全性要求含義1完整性即有效的簽名能夠被正確地驗證2不可偽造性只有群成員可以產(chǎn)生有效的群簽名。其他任何人包括群管理員都不能偽造合法的簽名3匿名性給定一個群簽名后,對除了唯一的群管理員以外的任何人來說,確定簽名者的身份是不可行的,至少在計算上是困難的4可追蹤性群管理員在發(fā)生糾紛的情況下可以打開一個簽名來確定簽名者的身份,而且任何人都不能阻止一個合法簽名的打開5不關(guān)聯(lián)性在不打開簽名的情況下,確定兩個不同的簽名是否為同一個群成員所簽的是不可行的,至少在計算上是困難的6沒有框架即使其他群成員相互串通,也不能為不在群里的成員進(jìn)行簽名7不可偽造的追蹤驗證撤銷群管理員權(quán)限,不能錯誤地指責(zé)簽名者創(chuàng)建他沒有創(chuàng)建的簽名8抵抗聯(lián)合攻擊即使一些群成員串通在一起也不能產(chǎn)生一個合法的、不能被跟蹤的群簽名表3-2群簽名的安全性要求3.1.5數(shù)字簽名環(huán)簽名:環(huán)簽名是一種簡化的群簽名。簽名者首先選定一個臨時的簽名者集合,集合中包括簽名者自身。然后簽名者利用自己的私鑰和簽名集合中其他人的公鑰可以獨立地產(chǎn)生簽名,而無須他人的幫助。簽名者集合中的其他成員可能并不知道自己被包含在最終的簽名中。圖3-20環(huán)簽名一般流程圖表3-3群簽名和環(huán)簽名的對比序號對比點解釋1匿名性都是一種個體代表群體簽名的機制,驗證者能驗證簽名為群體中某個成員所簽,但并不能知道具體是哪個成員,以達(dá)到簽名者匿名的作用2可追蹤性群簽名中,群管理員的存在保證了簽名的可追蹤性。群管理員可以撤銷簽名,揭示真正的簽名者。環(huán)簽名本身無法揭示簽名者,除非簽名者本身想暴露或者在簽名中添加了額外的信息。環(huán)簽名提出了一個可驗證的方案,方案中真實簽名者希望驗證者知道自己的身份,此時真實簽名者可以通過透露自己掌握的秘密信息來證實自己的身份3管理系統(tǒng)群簽名由群管理員管理,環(huán)簽名不需要管理,簽名者只需選擇一個可能的簽名者集合,獲得其公鑰,然后公布這個集合即可,所有成員平等3.1.6數(shù)字證書對非對稱加密算法和數(shù)字簽名來說,一旦公鑰自身出現(xiàn)了問題,則整個建立在其上的安全體系的安全性將不復(fù)存在。數(shù)字證書機制可以解決證明“我確實是我”的問題,它就像日常生活中的一個證書一樣,可以證明所記錄信息的合法性。私鑰公鑰Fh1
F
h2h1提供私鑰提供公鑰SHAI加密RSA加密RSA解密SHAI加密對比h1和h2,驗證數(shù)字證書數(shù)字簽名者發(fā)布數(shù)字證書者圖3-21數(shù)字簽名一般流程3.1.6數(shù)字證書數(shù)字證書一般包括版本、序列號、簽名算法類型、簽發(fā)者信息、有效期、被簽發(fā)人、簽發(fā)的公開密鑰、CA數(shù)字簽名等信息。其中最重要的是簽發(fā)的公開密鑰和CA數(shù)字簽名。因為帶有CA的數(shù)字簽名,所以只要通過證書就可以證明某個公鑰是合法的。類似地,CA的簽名是否合法也是通過CA的簽名證書來證明的。圖3-22采用HTTPS建立安全連接(TLS握手協(xié)商過程)的基本步驟3.1.7密鑰分存密鑰分存技術(shù):根據(jù)Shamir和Blakley在1979年分別提出的“門限方案”:將選定的主密鑰K打造成n份不同的子密鑰,以t(0<t<n)為“門限值”,當(dāng)子密鑰數(shù)目超過或等于門限值t的時候,可以導(dǎo)出主密鑰。從上面的定義可以知道,通過改變門限值t可以適當(dāng)?shù)靥嵘到y(tǒng)的安全性和操作效率。圖3-23密鑰分存又被稱為“現(xiàn)代虎符”3.1.8匿名技術(shù)在計算機科學(xué)中,這種不用真實姓名而使用一種特定標(biāo)識的折中做法被稱為化名,而匿名是指具有無關(guān)聯(lián)性的化名,無關(guān)聯(lián)性是一種針對特定攻擊者的能力而定義的屬性。從直觀的意思來看,無關(guān)聯(lián)性意味著如果一個用戶和系統(tǒng)進(jìn)行重復(fù)交互,從特定攻擊者的角度,不同的交互行為之間應(yīng)該無法相互關(guān)聯(lián)。圖3-24B-T幣是否具有完全的匿名性呢?3.1.9隱私模型傳統(tǒng)的隱私模型為交易的參與者提供了一定程度的隱私保護(hù)。第三方不會交出交易者的個人身份信息,但事實上,交易雙方的個人信息都存儲在第三方機構(gòu)中,因此在一定程度上,交易參與人的隱私仍然存在泄露的風(fēng)險。圖3-25傳統(tǒng)的隱私模型在B-T幣的隱私模型中,只需要提供B-T幣地址就可以完成準(zhǔn)匿名交易。在一定程度上,交易無法追溯到交易者本身,因此B-T幣交易在一定程度上可以不受監(jiān)管。然而,通過對區(qū)塊鏈上的交易地址和交易金額的關(guān)聯(lián)分析,可以獲得該交易相關(guān)人員的線索。因此,是一種準(zhǔn)匿名交易機制。圖3-26B-T幣的隱私模型3.2.1一致性問題一致性(Consistency),早期也叫作“Agreement”,是指對分布式系統(tǒng)中的多個服務(wù)節(jié)點,給定一系列操作,在約定協(xié)議的保障下,試圖使得它們對處理結(jié)果達(dá)成“某種程度”的認(rèn)同。理想情況下,如果各個服務(wù)節(jié)點嚴(yán)格遵守相同的處理協(xié)議,構(gòu)成相同的處理狀態(tài)機,給定相同的初始狀態(tài)和輸入序列,則可以保障在處理過程中的每個環(huán)節(jié)的結(jié)果都是相同的。序號問題1節(jié)點之間的網(wǎng)絡(luò)通信是不可靠的,包括消息延遲、亂序和內(nèi)容錯誤等2節(jié)點的處理時間無法保障,結(jié)果可能出現(xiàn)錯誤,甚至節(jié)點自身可能發(fā)生“宕機”3同步調(diào)用可以簡化設(shè)計,但會嚴(yán)重降低系統(tǒng)的可擴展性,甚至使其退化為單節(jié)點系統(tǒng)表3-4分布式計算機集群系統(tǒng)中容易出現(xiàn)問題的幾個方面3.2.1一致性問題分布式系統(tǒng)達(dá)成一致的過程應(yīng)該滿足以下幾個條件:可終止性:一致的結(jié)果在有限的時間內(nèi)完成;約同性:不同節(jié)點最終完成決策的結(jié)果是相同的;合法性:決策的結(jié)果必須是某個節(jié)點提出的提案。事實上,越強的一致性需求常常導(dǎo)致越弱的處理性能和更差的可拓展性。強一致性主要包括以下兩類:順序一致性:這是一個相對較強的約束,確保所有進(jìn)程看到的全局順序是一致的,并且每個進(jìn)程看到自身的執(zhí)行順序與實際發(fā)生順序一致。線性一致性:在順序一致性的前提下加強了進(jìn)程間的操作排序,形成唯一的全局順序,是很強的原子性的保證,但這比較難實現(xiàn)。3.2.2拜占庭將軍問題與算法問題簡介:拜占庭將軍問題又稱拜占庭問題,它是蘭伯特等科學(xué)家在1982年提出的一個解釋一致性問題的虛擬模型。拜占庭是古羅馬的首都,由于地域?qū)拸V,邊界上的多個將軍(類似分布式系統(tǒng)中的多個節(jié)點)需要信使來傳遞消息并達(dá)成某些一致的決定。但由于將軍中可能有叛變者(類似分布式系統(tǒng)中節(jié)點出錯),這些叛變者會試圖向不同的將軍發(fā)送不同的信息,干擾共識的達(dá)成。拜占庭問題即為此情況下如何讓忠誠的將軍們達(dá)成行動的一致。3.2.2拜占庭將軍問題與算法拜占庭容錯算法是解決拜占庭問題的一種容錯算法。它解決了網(wǎng)絡(luò)通信的可靠性問題,即節(jié)點如何在故障情況下達(dá)成一致PBFT是一種狀態(tài)機復(fù)制算法,即服務(wù)作為狀態(tài)機進(jìn)行建模,狀態(tài)機在分布式系統(tǒng)的不同節(jié)點進(jìn)行副本復(fù)制。狀態(tài)機的每個副本都保存服務(wù)的狀態(tài),并實現(xiàn)服務(wù)的操作。流程如下:客戶端向主節(jié)點發(fā)送請求調(diào)用服務(wù)操作;主節(jié)點通過廣播將請求發(fā)送給其他副本;所有副本都執(zhí)行請求并將結(jié)果發(fā)回客戶端;客戶端需要等待f+1個不同副本節(jié)點發(fā)回相同的結(jié)果,作為整個操作的最終結(jié)果。圖3-27節(jié)點投票流程示例3.2.3FLP不可能原理FLP不可能原理:在網(wǎng)絡(luò)可靠但允許節(jié)點失效(即便只有一個)的最小化異步模型系統(tǒng)中,不存在一個可以解決一致性問題的確定性共識算法。FLP不可能原理實際上告訴人們,不要浪費時間去為異步分布式系統(tǒng)設(shè)計在任意場景下都能實現(xiàn)共識的算法。FLP不可能原理實際上說明在允許節(jié)點失效的情況下,純粹異步系統(tǒng)無法確保一致性在有限時間內(nèi)完成。即便在非拜占庭錯誤的前提下,包括Paxos、Raft等算法也都存在無法達(dá)成共識的情況,只是工程實踐中這種情況出現(xiàn)的概率很小。3.2.3CAP原理CAP原理又稱CAP定理,指的是在一個分布式系統(tǒng)中,一致性、可用性、分區(qū)容忍性這三個需求最多只能同時滿足兩個,不可能三者兼顧。圖3-28CAP原理示例分區(qū)容忍性可用性一致性NO3.3.1PoW機制PoW機制也稱工作量證明算法。作為區(qū)塊鏈技術(shù)的開創(chuàng)者,B-T幣所采用的共識機制就是PoW機制,并且這一機制也是其他公有鏈的主流共識機制。PoW算法通過算力競爭將記賬權(quán)分配給全網(wǎng)所有節(jié)點,獲得記賬權(quán)的誠實節(jié)點能得到一定的數(shù)字貨幣作為貢獻(xiàn)算力等資源的獎勵。生成Merkle根哈希作為組裝區(qū)塊頭的輸入隨機數(shù)上個區(qū)塊hash值當(dāng)前Merkle根哈希版本時間戳難度值組裝區(qū)塊頭作為下框的輸入目標(biāo)值小于網(wǎng)絡(luò)目標(biāo)值結(jié)束變更隨機值N圖3-29PoW工作量證明流程圖3.3.2PoS機制PoS機制:即權(quán)益證明機制。與PoW機制不同,PoS機制是一種更加節(jié)能的共識機制。PoS是根據(jù)用戶持有的股份數(shù)量來調(diào)整該用戶挖礦的難度的,且用戶挖礦難度和持有的股份數(shù)量成反比。PoS機制的出現(xiàn)緩解了PoW機制對算力與電力的大量消耗,且加速出塊時間也能提高對交易的處理速度和吞吐量。圖3-30PoS交易結(jié)構(gòu)核心輸入權(quán)益輸入權(quán)益輸入權(quán)益輸出(支出給權(quán)益所有者自己)3.3.3DPoS機制DPoS機制即授權(quán)權(quán)益證明機制。DPoS機制是一種更高效、更安全的共識機制,該機制與PoW機制和PoS機制相比,DPoS機制的優(yōu)點如下:①耗能更低;②更加去中心化;③更快的確認(rèn)速度。圖3-31DPoS機制結(jié)構(gòu)3.3.4分布式一致性算法PBFT共識算法:將全部服務(wù)器的配置信息稱為一個視圖,視圖會根據(jù)實際情況一直切換。在某個視圖中,我們選取某個副本節(jié)點作為主節(jié)點,則其余的副本均作為從節(jié)點。主節(jié)點負(fù)責(zé)接收客戶端的請求,同時對收到的請求按照順序進(jìn)行排列。主節(jié)點在接收到客戶端請求后向所有從節(jié)點發(fā)送消息。從節(jié)點接收并驗證主節(jié)點發(fā)出的消息,若驗證通過,從節(jié)點執(zhí)行對應(yīng)的操作,再將結(jié)果返回。圖3-32PBFT一致性協(xié)議流程3.3.4分布式一致性算法Paxos算法:Paxos算法把每個數(shù)據(jù)寫請求比喻成一次提案,每個提案都有一個獨立的編號,提案會轉(zhuǎn)發(fā)給提交者(Proposer)來提交,提案必須被2f+1個節(jié)點中的f+1個節(jié)點接受才會生效,2f+1個節(jié)點叫作這次提案的投票委員會(Quorum),投票委員會中的節(jié)點叫作接收者(Acceptor)。圖3-33Paxos算法中的角色3.3.4分布式一致性算法Paxos算法流程劃分為兩個階段,第一階段是發(fā)起方學(xué)習(xí)提案最新狀態(tài)的準(zhǔn)備階段;第二階段是根據(jù)學(xué)習(xí)到的狀態(tài)組成正確提案提交的階段。圖3-34Paxos算法流程3.3.4分布式一致性算法Raft算法:Raft算法和Paxos一樣是一個針對非拜占庭問題所提出的算法,不考慮分布式網(wǎng)絡(luò)中有作惡節(jié)點的情況。也就是說這樣的節(jié)點可能宕機或者延遲,但是不會出現(xiàn)錯誤信息。Raft算法的設(shè)計中,服務(wù)器節(jié)點都可以有3種狀態(tài),即Follower、Candidate和Leader。圖3-35Raft算法節(jié)點之間的狀態(tài)轉(zhuǎn)換過程3.3.4分布式一致性算法Raft算法將時間分為一個個的任期(term),每一個term的開始都是Leader選舉。在成功選舉Leader之后,Leader會在整個term內(nèi)管理整個集群。如果Leader選舉失敗,該term就會因為沒有Leader而結(jié)束。圖3-36任期流程任期1任期2任期3任期4選舉正常運行無領(lǐng)導(dǎo)出現(xiàn)任期3.3.4分布式一致性算法日志復(fù)制的主要作用是保證節(jié)點的一致性,這個階段所做的操作也是為了保證一致性與高可用性。要保證節(jié)點的一致性就要保證每個節(jié)點都按順序執(zhí)行相同的操作序列,日志復(fù)制就是為了保證執(zhí)行相同的操作序列所做的工作。圖3-37Raft日志同步過程clientLFF1.提交數(shù)據(jù)2.1復(fù)制2.1復(fù)制3.1確認(rèn)接收3.1確認(rèn)接收4.2數(shù)據(jù)提交4.1確認(rèn)接收3.3.5共識機制比較共識機制/算法吞吐量速度耗能優(yōu)點缺點PoW低慢高易于實現(xiàn),惡意破壞賬本體系需要付出很高的代價,可有效防止節(jié)點作惡浪費計算資源,區(qū)塊確認(rèn)時間長,共識達(dá)成時間周期長,效率低PoS低較慢較高解決PoW機制消耗過多算力的問題,縮短了共識達(dá)成的時間機制略復(fù)雜,計算資源仍有一定程度上的浪費DPoS低較快較高大大減少了參與驗證和記賬的節(jié)點,交易確認(rèn)的速度可達(dá)到秒級機制較復(fù)雜,真正參與記賬的節(jié)點較少,因此安全性、健壯性都有所下降PBFT高快低實現(xiàn)秒級的快速共識機制,保證一致性網(wǎng)絡(luò)規(guī)模不宜太大表3-5各種共識機制/算法比較所有的共識機制都是為了讓節(jié)點在分布式的網(wǎng)絡(luò)中能達(dá)成共識,雖然都有著相同的目標(biāo),但采取的方法確是大相徑庭。在不同的應(yīng)用場景下也有著不同的特點和缺陷。3.3.6跨鏈共識機制圖3-38系統(tǒng)結(jié)構(gòu)圖下面通過構(gòu)建一個從鏈基于PoVT(ProofofVoteandTrust,PoVT)共識機制,主鏈基于PBFT機制(算法)的主從多鏈分層跨鏈模型,來介紹跨鏈共識機制。模型描述:將時間劃分為時間片段,每個時間片為一個周期(epoch),每個周期分成多個時隙(slot),每個時隙從鏈完成完整的從出塊到上鏈的過程,在每個周期的最后一個時隙結(jié)束后,代表節(jié)點將該周期所有已確認(rèn)的區(qū)塊數(shù)據(jù)上傳至主鏈網(wǎng)絡(luò)中。模型中的節(jié)點被分成5種角色:普通節(jié)點No、投票節(jié)點Nv、生產(chǎn)節(jié)點Np、候補節(jié)點Nc、代表節(jié)點Nm。3.3.6跨鏈共識機制從鏈共識機制:(1)準(zhǔn)備階段:在每個周期開始前,系統(tǒng)從希望參與共識的節(jié)點中根據(jù)節(jié)點的權(quán)益以及STrust值選擇一些節(jié)點組成共識節(jié)點集合N將集合中的節(jié)點進(jìn)行編號,編號1到Nump的節(jié)點成為生產(chǎn)節(jié)點,編號Nump
+
1到Nump
+
Numv的節(jié)點為投票節(jié)點,剩下的個數(shù)為Numc的節(jié)點成為候補節(jié)點,普通節(jié)點No不參與共識但需同步最新數(shù)據(jù)塊至本地。(2)基于投票和信用機制的PoVT共識機制:該共識機制通過引入投票機制來更加公平地選擇出塊節(jié)點,徹底避免節(jié)點之間的算力競爭,并且引入的信用機制能夠保證參與共識的節(jié)點的可靠性,同時降低權(quán)益對記賬權(quán)分配的影響,從而增大對系統(tǒng)發(fā)起權(quán)益粉碎攻擊、雙花攻擊、自私挖礦攻擊等的難度。3.3.6跨鏈共識機制圖3-39共識流程圖1)共識流程(右圖3-39)。2)隨機數(shù)R的產(chǎn)生。每個生產(chǎn)節(jié)點生成區(qū)塊的同時也產(chǎn)生一個記錄在區(qū)塊中的隨機數(shù)R來決定誰是下一個生產(chǎn)節(jié)點。生成過程如下:①生產(chǎn)節(jié)點在向投票節(jié)點提交區(qū)塊后同時收集投票節(jié)點的反饋消息,同時根據(jù)時間戳,得到對得到的Resource進(jìn)行哈希運算,然后取字符串的后32位將其轉(zhuǎn)化成整數(shù),得到從而可得到隨機數(shù):通過這種方式隨機地選擇生產(chǎn)節(jié)點,能夠有效地預(yù)防節(jié)點之間的共謀攻擊,也保證了共識過程的公平與穩(wěn)定。3)信用機制通過綜合考慮一個節(jié)點的有效出塊數(shù)、有效投票數(shù)、參與度等因素,然后使用STrust值來定量地描述一個節(jié)點的可信度,再結(jié)合節(jié)點本身的權(quán)益來決定節(jié)點是否能夠參與共識過程。3.3.6跨鏈共識機制主鏈共識機制:(1)主鏈節(jié)點選擇:主鏈節(jié)點從集合N中選擇,利用從鏈生產(chǎn)節(jié)點計算隨機數(shù)R的過程中得到的中間數(shù)據(jù)R′作為梅森旋轉(zhuǎn)算法(MT19937-32)的種子得到一個隨機數(shù)Rm,再從集合N中選擇編號與Rm相同的節(jié)點作為代表節(jié)點構(gòu)成主鏈。(2)主鏈共識:為了保證主鏈上保存的從鏈區(qū)塊數(shù)據(jù)都是真實完整、未被篡改的,代表節(jié)點在打包之前會檢查被上傳的從鏈區(qū)塊數(shù)據(jù)的上傳次數(shù),只有被不少于其所在從鏈中一半以上的代表節(jié)點上傳過的從鏈區(qū)塊數(shù)據(jù)才能被主鏈節(jié)點打包上鏈。當(dāng)主鏈節(jié)點確保所打包信息都符合要求后,在主鏈上通過PBFT共識算法達(dá)成共識,完成信息在主鏈上的完整上鏈過程。(3)數(shù)據(jù)跨越:每一周期被選擇成為主鏈節(jié)點的各從鏈代表節(jié)點會將自己所在從鏈本周期產(chǎn)生的區(qū)塊上傳至主鏈網(wǎng)絡(luò)中,同時參與主鏈共識,在共識完成后各代表節(jié)點同樣保存主鏈區(qū)塊至本地網(wǎng)絡(luò)中,每一個代表節(jié)點保存的主鏈區(qū)塊中都包含來自不同從鏈的區(qū)塊數(shù)據(jù)供其所在從鏈其余節(jié)點查詢,從而完成不同從鏈之間的數(shù)據(jù)跨鏈。本章小結(jié)本章主要介紹了在區(qū)塊鏈中會使用的一系列現(xiàn)代密碼學(xué)算法和區(qū)塊鏈網(wǎng)絡(luò)中的核心問題——共識機制,為我們后面構(gòu)建區(qū)塊鏈網(wǎng)絡(luò)做相應(yīng)的準(zhǔn)備。同時希望通過本章的學(xué)習(xí),讀者能去思考現(xiàn)有區(qū)塊鏈網(wǎng)絡(luò)中存在的安全問題和一致性問題,隨著學(xué)習(xí)的深入,可以逐步形成自己對解決特定區(qū)塊鏈應(yīng)用的特定問題的共識方案。謝謝!第四章區(qū)塊鏈數(shù)據(jù)存儲目錄/CONTENTS4.1哈希指針與區(qū)塊鏈4.2梅克爾數(shù)簡介4.3區(qū)塊鏈存儲案例分析4.4編程案例本章小結(jié)思考題4.1哈希指針與區(qū)塊鏈4.1.1哈希指針哈希指針(HashPointer)是一個指向數(shù)據(jù)存儲位置和數(shù)據(jù)的哈希值的指針,即指向某個區(qū)塊的地址,只不過這個地址進(jìn)行了哈希轉(zhuǎn)換,用哈希值來表示。通過哈希指針,我們可以快速定位到某個區(qū)塊,且能按一定的順序進(jìn)行排列。哈希指針可以保證交易的不可篡改性,一旦區(qū)塊形成后,如果有人想要篡改某個區(qū)塊中的信息,那么后面一個區(qū)塊的哈希值匹配就會出現(xiàn)錯誤。哈希指針的存在,使得任何篡改行為牽一發(fā)而動全身,讓作惡者無法篡改區(qū)塊中的信息,從而保證數(shù)據(jù)的完整性。DataPointertoDataHashofDataHashPointer4.1.2區(qū)塊鏈如下圖所示,我們通過哈希指針構(gòu)建了一個區(qū)塊鏈。在普通鏈表中,每個區(qū)塊既有數(shù)據(jù),也有指向上一個區(qū)塊的指針,而在區(qū)塊鏈中,上一個區(qū)塊的指針被替換成哈希指針。因此,每個區(qū)塊不僅能告訴我們上一個區(qū)塊的值在哪里,還包含了該值的摘要(原文經(jīng)過哈希函數(shù)形成),從而能夠驗證這個值是否被改變。區(qū)塊鏈的一個應(yīng)用就是“防止篡改日志”,這意味著我們要構(gòu)建一個存儲大量數(shù)據(jù)的日志數(shù)據(jù)結(jié)構(gòu),以便能夠?qū)?shù)據(jù)附加到日志末尾。只要有人篡改日志前面的數(shù)據(jù),我們就可以監(jiān)測到。4.2.梅克爾樹簡介4.2.1二叉樹二叉樹就是每個節(jié)點至多有兩棵子樹的樹。并且,二叉樹有左右之分,即其次序不能任意顛倒。二叉樹在數(shù)據(jù)結(jié)構(gòu)的存儲結(jié)構(gòu)上有順序存儲和鏈?zhǔn)酱鎯煞N,而常用的存儲結(jié)構(gòu)是鏈?zhǔn)酱鎯Y(jié)構(gòu),包括區(qū)塊鏈中使用的也是鏈?zhǔn)酱鎯Y(jié)構(gòu)。下圖所示的二叉鏈表存儲結(jié)構(gòu)中,二叉樹中的每一個節(jié)點用鏈表的一個鏈節(jié)點來存儲。二叉鏈表每個節(jié)點一般包括數(shù)據(jù)域和左右指針,這與梅克爾樹的結(jié)構(gòu)完全一樣。4.2.2梅克爾樹梅克爾樹(MerkleTree)又叫作哈希樹,是另一個我們可以用哈希指針建立的二叉樹樹型數(shù)據(jù)結(jié)構(gòu),以其發(fā)明者梅克爾的名字命名。梅克爾樹是一種典型的二叉樹結(jié)構(gòu),由一個根節(jié)點、一組中間節(jié)點和一組葉子節(jié)點組成。每個葉子節(jié)點包含一個存有數(shù)據(jù)的區(qū)塊,然后把所有葉子節(jié)點兩兩分組,每一組建立一個有兩個哈希指針的數(shù)據(jù)結(jié)構(gòu),每個指針指向一個葉子節(jié)點,也就形成了一個父節(jié)點,依此類推,直到得到一個單一的節(jié)點,也就是根節(jié)點。4.2.2梅克爾樹梅克爾樹的典型應(yīng)用場景:1.比對或驗證處理:特別是在分布式環(huán)境下進(jìn)行比對或驗證時,梅克爾樹會大大減少數(shù)據(jù)的傳輸量以及計算的復(fù)雜度。2.快速定位修改:如下圖所示,如果N0對應(yīng)的數(shù)據(jù)被修改,會直接影響到N1、N4和N6。3.確保不可偽造和無重復(fù)交易:在B-T幣的設(shè)計中,梅克爾樹存在于每個區(qū)塊中,它被應(yīng)用于交易的存儲上。每筆交易都會生成一個哈希值,然后不同的哈希值向上繼續(xù)做哈希運算,最終生成唯一的根,并把這個梅克爾樹根作為數(shù)據(jù)區(qū)塊的區(qū)塊頭。4.3區(qū)塊鏈存儲案例分析4.3.1100%準(zhǔn)備金證明最簡單的證明方法就是公布所有用戶數(shù)據(jù)。該方法很直接,但易偽造。如果想要保證邏輯完備性,需要證明以下兩點。(1)沒有偽造,包括沒有偽造用戶和沒有偽造用戶余額。(2)沒有遺漏,包括沒有直接遺漏用戶和間接遺漏用戶。要完成100%準(zhǔn)備金的證明,可以用到梅克爾樹。這個證明的主要過程是構(gòu)建梅克爾樹,當(dāng)構(gòu)建完該樹且根節(jié)點的余額與公布的儲蓄余額相同時,即可100%儲備。100%準(zhǔn)備金證明沒有偽造沒有偽造用戶沒有偽造用戶余額沒有遺漏沒有直接遺漏用戶沒有間接遺漏用戶4.3.2分布式存儲分布式存儲系統(tǒng)是大量普通計算機或服務(wù)器通過Internet互聯(lián),對外作為一個整體提供存儲服務(wù)的系統(tǒng)。它的特點是可擴展、成本低、性能高、易用。分布式存儲涉及的設(shè)計主要來自兩個領(lǐng)域:分布式系統(tǒng)和數(shù)據(jù)庫。分布式存儲系統(tǒng)分為以下4類。分布式存儲系統(tǒng)分布式文件系統(tǒng)分布式鍵值系統(tǒng)分布式表系統(tǒng)分布式數(shù)據(jù)庫系統(tǒng)1.分布式文件系統(tǒng):以對象的形式組織,對象之間不存在關(guān)聯(lián),這種數(shù)據(jù)一般稱為二進(jìn)制大對象數(shù)據(jù)。2.分布式鍵值系統(tǒng):分布式鍵值系統(tǒng)用于存儲關(guān)系簡單的半結(jié)構(gòu)化數(shù)據(jù)。3.分布式表系統(tǒng):用于存儲具有更復(fù)雜關(guān)系的半結(jié)構(gòu)化數(shù)據(jù)。4.分布式數(shù)據(jù)庫系統(tǒng):具有靈活的體系結(jié)構(gòu),系統(tǒng)經(jīng)濟(jì),可靠性高,可用性好,在一定條件下響應(yīng)速度快,可擴展性好,易于集成現(xiàn)有系統(tǒng),也易于擴充。4.4編程案例4.4.1實現(xiàn)哈希列表哈希函數(shù)經(jīng)常被用于數(shù)據(jù)完整性校驗,最簡單的方法是對整個數(shù)據(jù)做哈希運算,得到固定長度的哈希值,然后把得到的哈希值公布在網(wǎng)上。這樣用戶下載數(shù)據(jù)之后,對數(shù)據(jù)再次進(jìn)行哈希運算,將運算結(jié)果和網(wǎng)上公布的哈希值進(jìn)行比較,如果兩個哈希值相等,說明下載的數(shù)據(jù)沒有被損壞。實際操作中,點對點網(wǎng)絡(luò)在傳輸數(shù)據(jù)的時候其實都是把比較大的一個文件切成小的數(shù)據(jù)塊。在下載文件之前,通常需要先下載一個種子文件,這個種子文件里包含著每個塊的索引信息和哈希驗證碼,因此也被稱為索引文件。根哈希確定這個哈希列表本身是否正確。使用哈希列表進(jìn)行數(shù)據(jù)完整性校驗的原理如下圖所示。4.4.2實現(xiàn)梅克爾樹梅克爾樹也可以實現(xiàn)數(shù)據(jù)的完整性校驗。相對于哈希列表,梅克爾樹一個明顯的優(yōu)點是可以單獨拿出一個分支(作為一個小樹)來對部分?jǐn)?shù)據(jù)進(jìn)行校驗,這為很多使用場合帶來了哈希列表所不能比擬的方便和高效。如下圖所示,使用梅克爾樹對數(shù)據(jù)進(jìn)行高效檢驗,假設(shè)8號文件在下載過程中出現(xiàn)了錯誤,如果采用哈希列表,那么必須要對比16個分片文件的哈希值,才能確定究竟是哪個分片文件出現(xiàn)了錯誤,而使用梅克爾樹,需要檢驗的哈希值只有8個。4.4.2實現(xiàn)梅克爾樹下面以9個分片文件為例,介紹如何生成一棵梅克爾樹。(1)假如最底層有9個數(shù)據(jù)塊。(2)第五層:對9個數(shù)據(jù)塊進(jìn)行哈希運算,Node0i=hash(Data0i),i=1,2,…,9。(3)第四層:相鄰兩個哈希塊串聯(lián),然后進(jìn)行哈希運算,Node1i=hash(Node0j+Node0(j+1)),i=1,2,3,4,j=1,2,…,8;對于j=9,Node15=hash(Node09)。(4)第三層:重復(fù)步驟(3)。(5)第二層:重復(fù)步驟(3)。(6)第一層:重復(fù)步驟(3),生成梅克爾樹根。本章小結(jié)本章基于區(qū)塊鏈中的存儲問題向讀者介紹了區(qū)塊鏈的數(shù)據(jù)結(jié)構(gòu)、梅克爾樹及其應(yīng)用場景,并介紹了區(qū)塊鏈的存儲案例,希望讀者能更直觀地了解區(qū)塊鏈的存儲特性。由于區(qū)塊鏈?zhǔn)且粋€基于分布式存儲的記賬系統(tǒng),編者給讀者又介紹了不同的分布式系統(tǒng)及其運作機理。讀者可比較其中的差異,積累更多的區(qū)塊鏈這種分布式記賬系統(tǒng)的相關(guān)知識。謝謝!第五章區(qū)塊鏈網(wǎng)絡(luò)構(gòu)建目錄/CONTENTS5.1網(wǎng)絡(luò)架構(gòu)5.2去中心化5.3基于開源區(qū)塊鏈項目5.4編程案例本章小結(jié)思考題5.1.網(wǎng)絡(luò)架構(gòu)5.1.1網(wǎng)絡(luò)中的節(jié)點通常來說,計算機網(wǎng)絡(luò)中的節(jié)點指的是一臺有獨立地址并具有傳送或接收數(shù)據(jù)功能的設(shè)備。而在區(qū)塊鏈中,節(jié)點必須具有以下幾個特點。(1)具有一定的存儲空間:任何節(jié)點都必須存儲整條區(qū)塊鏈或區(qū)塊鏈的一部分。(2)連接網(wǎng)絡(luò):通常來說,區(qū)塊鏈網(wǎng)絡(luò)由多個節(jié)點組成,因此這些節(jié)點必須通過網(wǎng)絡(luò)相連。(3)參與區(qū)塊鏈:任何一個區(qū)塊鏈節(jié)點必須運行與區(qū)塊鏈相關(guān)的程序。區(qū)塊鏈節(jié)點的特點具有一定的存儲空間連接網(wǎng)絡(luò)參與區(qū)塊鏈5.1.1網(wǎng)絡(luò)中的節(jié)點在現(xiàn)在的區(qū)塊鏈應(yīng)用中,區(qū)塊鏈中的節(jié)點可分為礦工節(jié)點、全節(jié)點和輕節(jié)點。1.礦工節(jié)點現(xiàn)有的礦工節(jié)點運行于強大或?qū)S玫挠布ㄈ鏏SIC)上,它們唯一的目標(biāo)是盡可能快地挖出新區(qū)塊。2.全節(jié)點全節(jié)點驗證礦工挖出來的塊的有效性,并對交易進(jìn)行確認(rèn)。為此,它們必須擁有區(qū)塊鏈的完整副本。同時,全節(jié)點執(zhí)行路由操作,幫助其他節(jié)點發(fā)現(xiàn)彼此。區(qū)塊鏈中的節(jié)點輕節(jié)點全節(jié)點礦工節(jié)點3.輕節(jié)點輕節(jié)點并不存儲整個區(qū)塊鏈副本,但是仍然能夠?qū)灰走M(jìn)行驗證(不過不是驗證全部交易,而是一個交易子集,如發(fā)送到某個指定地址的交易)。5.1.2區(qū)塊鏈的運行機制通常來說,一個系統(tǒng)可以根據(jù)中心機構(gòu)的數(shù)量分為3類:中心化系統(tǒng)、多中心化系統(tǒng)和去中心化系統(tǒng)。(1)中心化系統(tǒng):只存在一個中心機構(gòu)。(2)多中心化系統(tǒng):同時存在多個中心機構(gòu)。(3)去中心化系統(tǒng):不存在任何中心機構(gòu)。中心化系統(tǒng)(左)、多中心化系統(tǒng)(中)和去中心化系統(tǒng)(右)5.1.2區(qū)塊鏈的運行機制區(qū)塊鏈網(wǎng)絡(luò)通常來說是去中心化的,這意味著沒有服務(wù)器,客戶端也不需要依賴服務(wù)器來獲取或處理數(shù)據(jù)。在區(qū)塊鏈網(wǎng)絡(luò)中,每個節(jié)點是網(wǎng)絡(luò)的一個完全(Full-Fledged)成員。節(jié)點就是一切,它既是一個客戶端,也是一個服務(wù)器。區(qū)塊鏈網(wǎng)絡(luò)是一個P2P的網(wǎng)絡(luò),即節(jié)點直接連接到其他節(jié)點。它的拓?fù)涫潜馄降?,因為在?jié)點的世界中沒有層級之分。5.2去中心化5.2.1去中心化的定義中心化的意思是中心決定節(jié)點,節(jié)點必須依賴中心,節(jié)點離開了中心就無法生存。去中心化恰恰相反,在一個分布有眾多節(jié)點的系統(tǒng)中,每個節(jié)點都具有高度自治的特征,每個節(jié)點都是一個“小中心”。由于中心化設(shè)計里存在著強大的中心機構(gòu),因此可以解決許多技術(shù)上難以解決的問題,如對整個系統(tǒng)的監(jiān)督和管理。去中心化系統(tǒng)通常存在著效率低下的問題,但去中心化的系統(tǒng)具有能夠降低系統(tǒng)運營成本、防止系統(tǒng)被中心機構(gòu)掌控的優(yōu)點。流通標(biāo)準(zhǔn)中心中心化去中心化5.2.2
工作量證明機制區(qū)塊鏈技術(shù)最重要的創(chuàng)新之一,便是通過工作量證明機制來實現(xiàn)分布式共識,同時通過提高攻擊成本來防御惡意攻擊。工作量證明的關(guān)鍵特點就是,分布式系統(tǒng)中請求服務(wù)的節(jié)點必須解決一個有難度但是可行的問題,但是驗證問題答案的過程對服務(wù)提供者來說非常容易,也就是一個不容易解答但是容易被驗證的問題。這種問題通常需要消耗一定的CPU時間來計算某個問題的答案,目前絕大部分的區(qū)塊鏈都選擇使用工作量證明的分布式共識機制,網(wǎng)絡(luò)中的所有節(jié)點通過執(zhí)行解密來獲得創(chuàng)建新區(qū)塊的權(quán)利。1.compute2.solve3.send4.vertifySenderReceiver5.2.3區(qū)塊鏈共識當(dāng)一個節(jié)點挖出一個新區(qū)塊后,默認(rèn)會立即將新區(qū)塊鏈接到本地存儲的區(qū)塊鏈的末尾,并且廣播到整個網(wǎng)絡(luò)中。其他節(jié)點在收到這一新區(qū)塊后,會驗證這一區(qū)塊的有效性并決定是否接收這一區(qū)塊。當(dāng)同時收到多個新區(qū)塊時,節(jié)點默認(rèn)只承認(rèn)那些連接到共識鏈(最長鏈)上最后一個被確認(rèn)的新區(qū)塊,并以第一個滿足條件的區(qū)塊所在的鏈為共識鏈。對于收到的其他區(qū)塊,節(jié)點可以自己選擇處理方式,推薦的方式為將較新的區(qū)塊以支鏈的形式保存起來。如果一個節(jié)點收到的區(qū)塊的索引遠(yuǎn)遠(yuǎn)大于該節(jié)點當(dāng)前共識鏈的最后一個區(qū)塊的索引,那么說明該節(jié)點很有可能已經(jīng)失去與其他節(jié)點的同步,需要立即重新進(jìn)行同步(從其他節(jié)點下載區(qū)塊鏈)。按照上述共識機制,經(jīng)過一段時間的區(qū)塊競爭后,一定會有一條最長的共識鏈形成。5.2.3區(qū)塊鏈共識3個節(jié)點,區(qū)塊數(shù)量完全一樣,同一時刻只有一個節(jié)點挖出一個新區(qū)塊3個節(jié)點,區(qū)塊數(shù)量完全一樣,同一時刻不止一個節(jié)點挖出一個新區(qū)塊在上一張圖的人基礎(chǔ)上。礦工a又挖出一個新區(qū)塊一個節(jié)點長時間掉線收到一個比較舊的區(qū)塊緩存舊區(qū)塊,產(chǎn)生支鏈下圖為區(qū)塊鏈就最長鏈達(dá)成共識的詳細(xì)過程:5.3基于開源區(qū)塊鏈項目5.3.1Hyperledger超級賬本項目為透明、開放和去中心化的企業(yè)級分布式賬本技術(shù)提供了開源參考實現(xiàn),并促進(jìn)了區(qū)塊鏈和分布式賬本相關(guān)協(xié)議、規(guī)范和標(biāo)準(zhǔn)的發(fā)展。作為一個聯(lián)合項目,超級賬本由用于不同目的和場景的子項目組成。所有項目都遵守ApacheV2許可,并約定共同遵守以下基本原則。(1)重視模塊化設(shè)計:包括交易、合同、一致性、身份、存儲等技術(shù)場景。(2)重視代碼可讀性:保障新功能和模塊都可以很容易添加和擴展。(3)可持續(xù)的演化路線:隨著需求的深入和應(yīng)用場景的增加,不斷增加和演化新的項目。Hyperledger重視模塊設(shè)計重視代碼可讀性可持續(xù)的演化路線5.3.2
InterLedgerInterLedger是Ripple公司推出的一個跨賬本協(xié)議,旨在幫助銀行間進(jìn)行快速結(jié)算。Ripple公司的跨賬本協(xié)議允許參與者查看相同的賬本,通過該公司網(wǎng)絡(luò),銀行客戶可以實現(xiàn)實時點對點跨境轉(zhuǎn)賬,無須中央組織管理,支持各國使用不同的貨幣。在InterLedger系統(tǒng)中,兩個不同的賬本系統(tǒng)可以通過第三方來進(jìn)行貨幣之間的兌換,如下圖所示。賬本系統(tǒng)不需要信任第三方,因為協(xié)議使用密碼算法為這兩個賬本系統(tǒng)和第三方創(chuàng)建資金托管,并且當(dāng)各方在資金上達(dá)成共識時,它們可以互相進(jìn)行交易。這意味著此類交易不需要受到法律合同的保護(hù)和過多的審查,大大降低了交易的門檻。5.3.2
InterLedger1.InterLedger協(xié)議功能InterLedger協(xié)議(InterLedgerProtocol,ILP)有3個關(guān)鍵功能,即具有ILP數(shù)據(jù)包、可進(jìn)行無信任發(fā)送和具有打包價值。InterLedger協(xié)議功能具有打包價值可無信任發(fā)送具有ILP數(shù)據(jù)包(1)具有ILP數(shù)據(jù)包:InterLedger協(xié)議的核心是ILP數(shù)據(jù)包,這是發(fā)送方、第三方、接收方之間使用的消息傳遞標(biāo)準(zhǔn)。(2)可進(jìn)行無信任發(fā)送:InterLedger的第二個關(guān)鍵功能是其能夠讓用戶通過第三方網(wǎng)絡(luò)進(jìn)行匯款,而不需要信任它們。(3)具有打包價值:或?qū)⑤^大的轉(zhuǎn)賬分成許多低價值的數(shù)據(jù)包。5.3.3
steemSteem項目使用加密貨幣獎勵用戶,解決了現(xiàn)有社交平臺利潤分配不合理的問題。簡而言之,Steem是一個通過加密貨幣獎勵來支持社區(qū)建設(shè)和社交互動的區(qū)塊鏈數(shù)據(jù)庫。Steem的兩個重要特色:1.共識機制:Steem系統(tǒng)采用石墨烯技術(shù),所以區(qū)塊鏈記賬采用的是DPoS算法。2.首創(chuàng)零手續(xù)費:因為Steem使用新發(fā)行的代幣給見證人(記賬員)發(fā)工資,加上Steem使用的是DPoS共識機制,記賬員記賬不會有太大的工作量,所以大部分的價值可以保存下來并分發(fā)給平臺中的其他貢獻(xiàn)者。所有記賬員的工資占Steem系統(tǒng)每年產(chǎn)生新代幣總數(shù)的10%。DPoS共識機制5.4
編程案例5.4.1實現(xiàn)私有鏈1.準(zhǔn)備工作本小節(jié)的目標(biāo)是開發(fā)一個能夠在本地運行的私有鏈,這一區(qū)塊鏈接收和存儲本地用戶上傳的數(shù)據(jù),且每個用戶在上傳數(shù)據(jù)時需要提供自己的數(shù)字簽名以驗證自己的身份。簡易區(qū)塊鏈架構(gòu)如下圖:2.區(qū)塊結(jié)構(gòu)構(gòu)建在本小節(jié)中為簡便起見,我們只是簡單地將其以列表的形式進(jìn)行組織。一般來說,區(qū)塊鏈中的區(qū)塊必須包含下列元數(shù)據(jù):區(qū)塊產(chǎn)生的時間,誰生成了這個區(qū)塊,上一個區(qū)塊的哈希值,工作量證明的結(jié)果等。每個區(qū)塊都必須包含以下屬性:前一個區(qū)塊的哈希值(hash)、工作量證明(proof)、索引(index)、時間戳(timestamp)以及交易列表(trans)5.4.1
實現(xiàn)私有鏈3.Blockchain類回憶一下前文對這個私有鏈的要求,它需要完成3個功能。(1)能夠接收區(qū)塊鏈擁有者上傳的數(shù)據(jù),并把接收到的數(shù)據(jù)存儲到區(qū)塊鏈中。(2)能夠執(zhí)行工作量證明算法,產(chǎn)生存儲數(shù)據(jù)的新區(qū)塊,并將未確認(rèn)的數(shù)據(jù)寫入新區(qū)塊。(3)能夠?qū)?shù)據(jù)提交者的身份進(jìn)行驗證,只有通過了驗證,系統(tǒng)才會接收提交的數(shù)據(jù)。Blockchain類的功能是管理區(qū)塊鏈,它能執(zhí)行存儲交易、加入新區(qū)塊、驗證簽名等操作。在它的構(gòu)造方法中還創(chuàng)建了兩個列表:chain列表用于存儲區(qū)塊鏈,trans列表用于存儲尚未確認(rèn)的交易(數(shù)據(jù))。newTrans()方法newBlock()方法hash()方法工作量證明機制signProof()方法lastBlock()方法經(jīng)過上圖的流程,Blockchain類的開發(fā)已經(jīng)基本完成了,它能夠驗證上傳數(shù)據(jù)者的身份,將未確認(rèn)的新交易緩存起來,創(chuàng)建新的區(qū)塊并將緩存的交易寫入其中。5.4.1實現(xiàn)私有鏈4.區(qū)塊鏈API開發(fā)首先,需要為Flask框架編寫HTML模板。目前我們需要兩個模板,一個是控制區(qū)塊鏈執(zhí)行各種操作的頁面的模板,另一個是提交交易的頁面的模板。編寫完模板之后,就需要為Flask框架定制接口了。/index區(qū)塊鏈應(yīng)用的首頁/chain查看區(qū)塊鏈上存儲的所有數(shù)據(jù)/newtrans接收和驗證用戶提交的數(shù)據(jù)/newblock執(zhí)行工作量證明算法并生成新的區(qū)塊編寫向外界提供4類接口5.測試與運行編寫完成Blockchain類和接口.py文件之后,就可以開始運行區(qū)塊鏈了。運行結(jié)果如圖所示。sever.py腳本運行結(jié)果5.4.1實現(xiàn)私有鏈Web服務(wù)器啟動之后,會顯示服務(wù)器綁定的IP地址和端口。復(fù)制命令行中的“:5000”,將其粘貼到瀏覽器地址欄中,在末尾加上前文編寫的某個接口的名稱。即可訪問我們編寫的頁面,其結(jié)果如下圖所示。
單擊“查看區(qū)塊鏈”按鈕,就可以看到目前區(qū)塊鏈中存儲的所有數(shù)據(jù),其結(jié)果如圖所示。5.4.1實現(xiàn)私有鏈可以看到,目前區(qū)塊鏈中只存在初始化Blockchain類時建立的創(chuàng)世區(qū)塊?;氐降谝粋€頁面,單擊“新交易”按鈕就會進(jìn)入交易提交界面,如圖右所示。前3項可以任意填寫,因為目前的區(qū)塊鏈只負(fù)責(zé)存儲我們提交的數(shù)據(jù)而不會在意具體數(shù)據(jù)是否有意義。第4項和第5項需要輸入配套的公鑰和私鑰,公鑰和私鑰的生成如右圖所示。5.4.1實現(xiàn)私有鏈分別復(fù)制命令行中的公鑰和私鑰到交易提交頁面的兩個輸入框中,單擊“提交”按鈕即可查看交易提交是否成功。交易提交成功的結(jié)果如圖所示。另外一種產(chǎn)生配套的公鑰和私鑰的方法是在網(wǎng)上搜索“RSA密鑰在線生成”,可以找到一些提供配套RSA密鑰生成的網(wǎng)站,如圖所示。5.4.1實現(xiàn)私有鏈交易順利提交之后,再次訪問/chain接口,可以看到剛剛提交的交易還沒有加入?yún)^(qū)塊鏈。這是因為剛剛提交的交易還沒有通過工作量證明算法加入新區(qū)塊,目前仍處于未確認(rèn)狀態(tài)?;氐降谝粋€頁面,單擊“新區(qū)塊”按鈕就會開始執(zhí)行工作量證明算法,這個過程可能會需要一些時間,特別是如果hard被設(shè)置得太大,時間會更久。當(dāng)工作
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026黑龍江鶴崗市興山區(qū)招聘公益性崗位人員30人考試備考題庫及答案解析
- 2026上海市社會主義學(xué)院公開招聘專職教師筆試模擬試題及答案解析
- 2026年煙臺科技學(xué)院招聘(273人)筆試模擬試題及答案解析
- 2026年阜陽市界首市中醫(yī)院公開招聘專業(yè)技術(shù)人員考試備考題庫及答案解析
- 2026湖南長沙市雨花湘一外國語中學(xué)春季合同制教師招聘考試參考題庫及答案解析
- 2026年甘肅蘭州鐵路技師學(xué)院高校畢業(yè)生招聘考試備考試題及答案解析
- 2026年寵物行為訓(xùn)練與健康管理培訓(xùn)
- 2026中國國際商會新疆商會人員招聘20人考試參考題庫及答案解析
- 2026江蘇南京大學(xué)化學(xué)學(xué)院科研人員招聘筆試備考題庫及答案解析
- 2026曲靖市事業(yè)單位公開招聘工作人員(889人)考試備考題庫及答案解析
- 重慶市2026年高一(上)期末聯(lián)合檢測(康德卷)化學(xué)+答案
- 2026年湖南郴州市百??毓杉瘓F(tuán)有限公司招聘9人備考考試題庫及答案解析
- 【四年級】【數(shù)學(xué)】【秋季上】期末家長會:數(shù)海引航愛伴成長【課件】
- 2025年中國船舶集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 辦公樓物業(yè)服務(wù)的品質(zhì)提升策略
- 養(yǎng)殖場土地租賃合同
- JBT 8200-2024 煤礦防爆特殊型電源裝置用鉛酸蓄電池(正式版)
- (正式版)SHT 3078-2024 立式圓筒形料倉工程設(shè)計規(guī)范
- 計算機就業(yè)能力展示
- 設(shè)備維修團(tuán)隊的協(xié)作與溝通
- 華為三支柱運作之HRBP實踐分享概要課件
評論
0/150
提交評論