




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
用于Fabric的AES加密算法的設(shè)計(jì)與實(shí)現(xiàn)目錄TOC\o"1-3"\h\u24753一、引言 131746二、物聯(lián)網(wǎng)數(shù)據(jù)安全與區(qū)塊鏈相關(guān)技術(shù) 131044(一)物聯(lián)網(wǎng)安全 1235691.目前存在的物聯(lián)網(wǎng)安全問題 129122.區(qū)塊鏈技術(shù)在物聯(lián)網(wǎng)應(yīng)用中的特點(diǎn) 3327673.基于區(qū)塊鏈技術(shù)的物聯(lián)網(wǎng)安全優(yōu)勢(shì) 515725(二)區(qū)塊鏈相關(guān)技術(shù) 626721.賬本結(jié)構(gòu) 6199562.共識(shí)機(jī)制 652323.智能合約 77116三、基于Fabric的數(shù)據(jù)傳輸和身份認(rèn)證 82937(一)HyperledgerFabric 8104011.fabric的組成結(jié)構(gòu) 8215842.Fabric的交易流程 912480(二)hyperledgerfabric平臺(tái)搭建 11546(三)Fabric1.4.0節(jié)點(diǎn)交易 1226491.Fabric節(jié)點(diǎn)交易測(cè)試 12110883.節(jié)點(diǎn)交易身份認(rèn)證 1320357(四)Fabric鏈碼的安裝 1429125(五)本章小結(jié) 1512762四、用于Fabric的AES加密算法的設(shè)計(jì)與實(shí)現(xiàn) 1517100(一)AES加密算法 1529041.AES算法簡(jiǎn)介 15129882.數(shù)學(xué)基礎(chǔ) 178170(二)AES加密過程 18151011.加密過程 18235152.解密過程 195422(三)AES加密算法的設(shè)計(jì)與實(shí)現(xiàn) 20324811.AES加密算法詳細(xì)設(shè)計(jì) 2011362.AES解密算法詳細(xì)設(shè)計(jì) 2124762(四)將AES加密算法應(yīng)用于Fabric的實(shí)現(xiàn) 2197681.通過BCCSP模塊對(duì)AES算法的實(shí)現(xiàn) 2190652.FabricENCChaincode賬本AES128加密解密和簽名驗(yàn)證 2328087(五)本章小結(jié) 242191五、總結(jié)與展望 2419184參考文獻(xiàn) 25一、引言目前物聯(lián)網(wǎng)應(yīng)用主要采用中心化服務(wù)器體系架構(gòu)來(lái)對(duì)物聯(lián)網(wǎng)數(shù)據(jù)進(jìn)行存儲(chǔ)和共享。一方面,物聯(lián)網(wǎng)節(jié)點(diǎn)多、覆蓋廣、數(shù)據(jù)傳輸量大,很多設(shè)備直接暴露在互聯(lián)網(wǎng)上,這些設(shè)備可能被惡意感染為成僵尸主機(jī),當(dāng)中心服務(wù)器故障或病毒攻擊時(shí),會(huì)導(dǎo)致整個(gè)系統(tǒng)宕機(jī)。例如美國(guó)域名服務(wù)商Dyn曾遭受大規(guī)模的分布式拒絕服務(wù)攻擊,其中重要的攻擊源來(lái)自眾多感染了惡意病毒的物聯(lián)網(wǎng)設(shè)備組成的僵尸網(wǎng)絡(luò),美國(guó)東海岸幾乎癱瘓。另一方面,中心化服務(wù)器能夠正常運(yùn)作的基礎(chǔ)是用戶對(duì)平臺(tái)的信任,然而可能存在為了利益出賣用戶隱私數(shù)據(jù)的非法商家。區(qū)塊鏈的興起為解決上述問題提供了新的可能性,在比特幣誕生初期,區(qū)塊鏈被提議作為底層技術(shù)。區(qū)塊鏈具有去中心化,數(shù)據(jù)不可篡改,隱私保護(hù)性強(qiáng)等特點(diǎn)。區(qū)塊鏈技術(shù)的引入可以改進(jìn)物聯(lián)網(wǎng)的安全現(xiàn)狀,為物聯(lián)網(wǎng)的數(shù)據(jù)安全提供更好的保護(hù)。因此,通過對(duì)區(qū)塊鏈的研究來(lái)提高物聯(lián)網(wǎng)數(shù)據(jù)的安全性具有很好的發(fā)展前景。二、物聯(lián)網(wǎng)數(shù)據(jù)安全與區(qū)塊鏈相關(guān)技術(shù)(一)物聯(lián)網(wǎng)安全1.目前存在的物聯(lián)網(wǎng)安全問題與傳統(tǒng)互聯(lián)網(wǎng)相比,物聯(lián)網(wǎng)還因其自組織形式、網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)和網(wǎng)絡(luò)異構(gòu)等自身特性而受到更多的安全威脅,如圖2-1所示,例如信息泄露、數(shù)據(jù)重放、數(shù)據(jù)篡改、數(shù)據(jù)偽造等問題。圖2-1物聯(lián)網(wǎng)主要安全威脅由于物聯(lián)網(wǎng)自身的異構(gòu)型,以及隨著發(fā)展帶來(lái)的設(shè)備日益增多、數(shù)據(jù)量爆發(fā)式增長(zhǎng),同時(shí)受限于硬件條件,節(jié)點(diǎn)存儲(chǔ)空間有限,以下安全問題是物聯(lián)網(wǎng)的主要安全威脅:①擁塞攻擊:分為全頻段擁塞干擾和集中擁塞干擾,主要通過發(fā)射無(wú)線干擾射頻信號(hào)來(lái)達(dá)到破壞無(wú)線通信的目的。傳感器網(wǎng)絡(luò)可以使用跳頻和節(jié)點(diǎn)占空比等技術(shù)來(lái)防止擁塞攻擊。②物理破壞:攻擊者通過捕獲網(wǎng)絡(luò)中的節(jié)點(diǎn),對(duì)捕獲的節(jié)點(diǎn)進(jìn)行物理拆解,破壞網(wǎng)絡(luò)的正常功能,破壞網(wǎng)絡(luò)安全性。攻擊者可以立即停止被捕獲節(jié)點(diǎn)的正常運(yùn)行,改變網(wǎng)絡(luò)結(jié)構(gòu),并且可以在節(jié)點(diǎn)設(shè)計(jì)過程中使用防篡改硬件來(lái)防止物理?yè)p壞。③碰撞攻擊:公共算法使用偽造的哈希值來(lái)欺騙密碼驗(yàn)證并進(jìn)入系統(tǒng)工作。為了確定沖突是否由惡意意圖引起,可以在應(yīng)用沖突檢測(cè)的同時(shí)設(shè)置退避算法,或者可以使用糾錯(cuò)編碼來(lái)解決。④耗盡攻擊:攻擊者不斷向通信節(jié)點(diǎn)發(fā)送數(shù)據(jù)使其大量耗能,導(dǎo)致無(wú)法工作。可以在協(xié)議編寫時(shí),設(shè)定任一數(shù)據(jù)包的發(fā)送次數(shù),從而避免攻擊者能不斷發(fā)送數(shù)據(jù)包到通信節(jié)點(diǎn)。⑤非公平競(jìng)爭(zhēng):由于優(yōu)先級(jí)高的報(bào)文將被前置執(zhí)行,攻擊者用高優(yōu)先級(jí)的報(bào)文來(lái)影響正常的執(zhí)行順序,面對(duì)這一攻擊,可以調(diào)整幀大小,使每一幀更短,減少惡意消息占用信道的時(shí)間;另一種方法是使用爭(zhēng)用或時(shí)分多址(TDMA)進(jìn)行數(shù)據(jù)傳輸。⑥虛假路由信息:通過欺騙、操縱或重發(fā)信息來(lái)干擾路由正常運(yùn)行,同時(shí)改變信息的源路徑,用虛假信息來(lái)干擾網(wǎng)絡(luò),影響數(shù)據(jù)傳輸。⑦選擇性轉(zhuǎn)發(fā)攻擊:攻擊者攻擊特定報(bào)文,使其丟失或者重復(fù)轉(zhuǎn)發(fā),導(dǎo)致報(bào)文無(wú)法到達(dá)目的地,造成網(wǎng)絡(luò)陷入混亂。當(dāng)攻擊者確定其在數(shù)據(jù)流的路徑上時(shí),這種類型的攻擊通常是最有效的。⑧槽洞攻擊:攻擊者利用漏洞對(duì)區(qū)域中的流量產(chǎn)生誘導(dǎo),使其經(jīng)過攻擊者設(shè)定的惡意節(jié)點(diǎn),流量一旦通過這個(gè)惡意節(jié)點(diǎn),數(shù)據(jù)就可能被修改,因此,無(wú)線傳感器網(wǎng)絡(luò)特別容易受到sinkhole攻擊。⑨女巫Sybil攻擊:明顯地降低分布式存儲(chǔ)、去中心化、多路徑路由等路由方案的容錯(cuò)能力,其中通過位置信息來(lái)完成路由尋址的算法會(huì)遭受更多威脅。⑩洪泛攻擊:攻擊者可以利用TCP傳輸?shù)娜蛭帐謾C(jī)制,利用攻擊端偽造的IP地址向被攻擊端發(fā)送大量用戶請(qǐng)求,使被攻擊端無(wú)法及時(shí)得到生產(chǎn)消耗和服務(wù)器的響應(yīng)信息資源。我們可以引入服務(wù)器端入侵機(jī)制,讓基站限制這些泛洪報(bào)文的發(fā)送。攻擊物聯(lián)網(wǎng)的方法有很多,主要是通過攻擊保密認(rèn)證算法、通信節(jié)點(diǎn)本身以及路由信息來(lái)對(duì)物聯(lián)網(wǎng)造成傷害。目前,物聯(lián)網(wǎng)項(xiàng)目的安全性主要從數(shù)據(jù)機(jī)密性、數(shù)據(jù)完整性、數(shù)據(jù)新鮮性、可用性、魯棒性和訪問控制六方面來(lái)看,這些方面的專項(xiàng)加固是我們保障物聯(lián)網(wǎng)安全的主要手段。2.區(qū)塊鏈技術(shù)在物聯(lián)網(wǎng)應(yīng)用中的特點(diǎn)因?yàn)槲锫?lián)網(wǎng)的自身特性,在物聯(lián)網(wǎng)中處理的數(shù)據(jù)與傳統(tǒng)數(shù)據(jù)庫(kù)處理的離散數(shù)據(jù)不同,主要是流式數(shù)據(jù)。流式數(shù)據(jù)是連續(xù)性和實(shí)時(shí)性的,在受到攻擊時(shí),流式數(shù)據(jù)因其連續(xù)性,將導(dǎo)致所有數(shù)據(jù)被攻擊。物聯(lián)網(wǎng)的快速發(fā)展帶來(lái)了龐大的數(shù)據(jù)量,這些數(shù)據(jù)的存儲(chǔ)和處理過程中有巨大的安全威脅,其存儲(chǔ)和處理結(jié)構(gòu)如圖2-2所示。目前物聯(lián)網(wǎng)節(jié)點(diǎn)自身的數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)傳感器獲取的外界信息數(shù)據(jù),在數(shù)據(jù)處理和存儲(chǔ)過程中產(chǎn)生的非結(jié)構(gòu)化數(shù)據(jù)則使用云服務(wù)器來(lái)進(jìn)行存儲(chǔ)。由于在數(shù)據(jù)被反復(fù)調(diào)用時(shí)會(huì)產(chǎn)生很大的流量,中央云服務(wù)器的負(fù)擔(dān)巨大,并且無(wú)法保證企業(yè)數(shù)據(jù)的安全。物聯(lián)網(wǎng)應(yīng)用需要考慮數(shù)據(jù)的安全性和隱私性,在數(shù)據(jù)傳輸過程中,還要防止非授權(quán)用戶入侵并使用數(shù)據(jù)。圖2-2物聯(lián)網(wǎng)數(shù)據(jù)存儲(chǔ)和處理結(jié)構(gòu)目前物聯(lián)網(wǎng)連接設(shè)備數(shù)量龐大,數(shù)據(jù)的安全與隱私難以得到保障。在節(jié)點(diǎn)數(shù)過多時(shí),由于節(jié)點(diǎn)和節(jié)點(diǎn)之間的高網(wǎng)絡(luò)延遲,導(dǎo)致事件被觀察到的序列在節(jié)點(diǎn)之間不是一致的,而通過設(shè)置在一個(gè)時(shí)間段內(nèi)節(jié)點(diǎn)對(duì)所發(fā)生的事件先后順序形成共識(shí)的機(jī)制,物聯(lián)網(wǎng)節(jié)點(diǎn)之間的數(shù)據(jù)傳輸可以得到保護(hù),這種機(jī)制稱為共識(shí)機(jī)制。而區(qū)塊鏈以下四個(gè)特點(diǎn)的實(shí)現(xiàn),將成為推動(dòng)物聯(lián)網(wǎng)發(fā)展的關(guān)鍵。①去中心化:去中心化是區(qū)塊鏈最典型的特征,也是在物聯(lián)網(wǎng)數(shù)據(jù)進(jìn)行安全應(yīng)用范圍最廣的點(diǎn)。物聯(lián)網(wǎng)中節(jié)點(diǎn)眾多,網(wǎng)絡(luò)間的數(shù)據(jù)量龐大,如果采用傳統(tǒng)的中心節(jié)點(diǎn)進(jìn)行數(shù)據(jù)的傳輸,將極大加重中心節(jié)點(diǎn)的負(fù)擔(dān),使維持網(wǎng)絡(luò)的成本提高。而在區(qū)塊鏈網(wǎng)絡(luò)中,中心節(jié)點(diǎn)將被移除,網(wǎng)絡(luò)的安全維護(hù)將由具有維護(hù)功能的平等節(jié)點(diǎn)維護(hù),每個(gè)節(jié)點(diǎn)將獲取完整的數(shù)據(jù)庫(kù)信息。當(dāng)數(shù)據(jù)在節(jié)點(diǎn)之間發(fā)送時(shí),接收者對(duì)發(fā)送者進(jìn)行身份驗(yàn)證,只有能夠正確認(rèn)證,才會(huì)將接收的信息廣播到網(wǎng)絡(luò)。物聯(lián)網(wǎng)與區(qū)塊鏈的結(jié)合可以很好的改善物聯(lián)網(wǎng)中的數(shù)據(jù)存儲(chǔ)中心化和結(jié)構(gòu)中心化問題,傳統(tǒng)物聯(lián)網(wǎng)對(duì)中心節(jié)點(diǎn)的依賴導(dǎo)致的一系列問題得到改善,消除了中心化帶來(lái)的隱患。P2P技術(shù)是一種去中心化的技術(shù),其主要組織結(jié)構(gòu)如圖2-3。圖2-3P2P主要結(jié)構(gòu)②時(shí)序數(shù)據(jù):若在每一數(shù)據(jù)中都有時(shí)間記錄,這樣就可以記錄每筆交易的時(shí)間,使數(shù)據(jù)能夠有序排列,將能數(shù)據(jù)糾錯(cuò)提供很大幫助,因此區(qū)塊鏈在數(shù)據(jù)中加入了時(shí)間戳。區(qū)塊鏈?zhǔn)褂媚藸枖?shù)記錄交易數(shù)據(jù),當(dāng)產(chǎn)生交易時(shí),記錄交易數(shù)據(jù)的默克爾樹生成于第一個(gè)區(qū)塊中,這樣在第一個(gè)區(qū)塊就存儲(chǔ)了所有交易的數(shù)據(jù),該區(qū)塊的區(qū)塊頭存儲(chǔ)默克爾樹的樹根。然后區(qū)塊通過一定算法生成哈希函數(shù)并存入父區(qū)塊的哈希屬性,隨著區(qū)塊的發(fā)展,一個(gè)個(gè)區(qū)塊通過哈希值鏈接,就形成了區(qū)塊鏈,這是不可逆的過程。③數(shù)據(jù)加密:區(qū)塊鏈可以通過非對(duì)稱數(shù)據(jù)加密技術(shù)對(duì)數(shù)據(jù)進(jìn)行加密和簽名,在進(jìn)行數(shù)據(jù)加密后,物聯(lián)網(wǎng)數(shù)據(jù)安全得到有效提升。物聯(lián)網(wǎng)數(shù)據(jù)進(jìn)行交易時(shí),區(qū)塊鏈技術(shù)除了生成時(shí)序數(shù)據(jù)可供用戶通過實(shí)踐戳查詢每一筆交易外,還通過加密技術(shù)對(duì)每一新生成的區(qū)塊進(jìn)行標(biāo)識(shí)和加密,使每個(gè)區(qū)塊都擁有唯一獨(dú)立的ID,同時(shí)新生成的區(qū)塊需經(jīng)過所有用戶的認(rèn)證才能生成。區(qū)塊之間環(huán)環(huán)相扣,若要對(duì)一項(xiàng)數(shù)據(jù)進(jìn)行修改,這需要改變所有區(qū)塊的數(shù)據(jù),區(qū)塊鏈中的數(shù)據(jù)量巨大,攻擊者幾乎不可能修改數(shù)據(jù),因此數(shù)據(jù)的安全性是有保障的。在區(qū)塊本身的保障之外,數(shù)據(jù)在區(qū)塊間進(jìn)行廣播時(shí)還要經(jīng)過身份認(rèn)證進(jìn)一步加強(qiáng)物聯(lián)網(wǎng)數(shù)據(jù)安全性。,④智能合約:NickSzabo提出,智能合約是一組用數(shù)字形式定義的承諾。從用戶的角度來(lái)說(shuō),智能合約不需要被操作,只需啟動(dòng),就能自動(dòng)運(yùn)行。從技術(shù)的角度來(lái)講,智能合約在區(qū)塊鏈上運(yùn)行并執(zhí)行一些特定的程序,可以看作區(qū)塊鏈上的網(wǎng)絡(luò)服務(wù)器。智能合約通過編寫節(jié)點(diǎn)間的合約程序,并將程序存于區(qū)塊鏈中,當(dāng)啟動(dòng)條件達(dá)成時(shí),智能合約就能自動(dòng)運(yùn)行,同時(shí)智能合約還用唯一的地址標(biāo)識(shí),當(dāng)需要進(jìn)行智能合約操作時(shí),可以通過地址進(jìn)行查找。3.基于區(qū)塊鏈技術(shù)的物聯(lián)網(wǎng)安全優(yōu)勢(shì)傳統(tǒng)物聯(lián)網(wǎng)的服務(wù)器與客戶端通過中心服務(wù)器的形式相連,這種架構(gòu)搭建簡(jiǎn)單,但是隨著物聯(lián)網(wǎng)的快速發(fā)展,龐大的數(shù)據(jù)量以及傳感器節(jié)點(diǎn)的增加使得中心服務(wù)器模式的能力捉襟見肘,逐漸與數(shù)據(jù)的增長(zhǎng)脫節(jié),而區(qū)塊鏈去中心化的架構(gòu)模式很好的解決了這些問題,同時(shí)帶來(lái)了物聯(lián)網(wǎng)發(fā)展的新方向,區(qū)塊鏈在物聯(lián)網(wǎng)相關(guān)領(lǐng)域的應(yīng)用和好處包括:①在金融方面,區(qū)塊鏈去信任化以及數(shù)據(jù)加密的特點(diǎn)能夠用來(lái)改善金融領(lǐng)域的安全問題,例如信息偽造、銀行信用等,實(shí)現(xiàn)金融一體化;金融行業(yè)在區(qū)塊鏈的引導(dǎo)下展開了新型的發(fā)展模式。40多家跨國(guó)銀行集團(tuán)在R3CEV的發(fā)起下組成區(qū)塊鏈聯(lián)盟,通過利用區(qū)塊鏈技術(shù)引導(dǎo)金融行業(yè)更好的發(fā)展。除了對(duì)行業(yè)產(chǎn)生影響,區(qū)塊鏈的發(fā)展在未來(lái)也會(huì)對(duì)個(gè)體產(chǎn)生影響。由于區(qū)塊鏈的開放性以及安全性,用戶可以通過區(qū)塊鏈將閑置資源產(chǎn)生新的價(jià)值且不用擔(dān)心數(shù)據(jù)安全。區(qū)塊鏈的賬本結(jié)構(gòu)和加密技術(shù)有效的保障了無(wú)論是行業(yè)還是個(gè)體的數(shù)據(jù)安全。②數(shù)據(jù)存儲(chǔ)方面,利用區(qū)塊鏈的去中心化將改善大數(shù)據(jù)存儲(chǔ)的中性化現(xiàn)狀,使用區(qū)塊鏈數(shù)據(jù)加密技術(shù)確保文件安全;目前各種物聯(lián)網(wǎng)如NFC、RFID、二維碼使用頻繁,在使用時(shí)產(chǎn)生了大量的交易數(shù)據(jù)和隱私數(shù)據(jù),存在一定的安全隱患,而通過區(qū)塊鏈的數(shù)據(jù)加密、數(shù)字簽名、賬本結(jié)構(gòu),有效的解決了這些問題。此外,區(qū)塊鏈中的數(shù)據(jù)訪問是通過數(shù)據(jù)地址進(jìn)行訪問,而通過設(shè)置權(quán)限,用戶在不訪問所有交易原始數(shù)據(jù)的情況下就可以訪問自身有權(quán)限的相應(yīng)數(shù)據(jù),同時(shí)管理自己的隱私信息,通過原始交易數(shù)據(jù)的不可篡改保證數(shù)據(jù)存儲(chǔ)的安全性。若有攻擊者對(duì)服務(wù)器進(jìn)行攻擊,也不能得到用戶隱私數(shù)據(jù)。③公共服務(wù)方面,通過利用區(qū)塊鏈實(shí)時(shí)數(shù)據(jù)可以標(biāo)記產(chǎn)品的生產(chǎn)日期和產(chǎn)地,從而解決食品安全問題;同時(shí)能夠?qū)︶t(yī)療數(shù)據(jù)加密,保障用戶隱私;利用區(qū)塊鏈技術(shù)實(shí)現(xiàn)交通信息共享。(二)區(qū)塊鏈相關(guān)技術(shù)1.賬本結(jié)構(gòu)由于區(qū)塊鏈?zhǔn)褂萌ブ行幕募軜?gòu)模式,在產(chǎn)生交易數(shù)據(jù)時(shí),若數(shù)據(jù)符合身份認(rèn)證,則會(huì)被廣播到網(wǎng)絡(luò)中,所有有記錄能力的節(jié)點(diǎn)將會(huì)保存這一數(shù)據(jù),所以整個(gè)網(wǎng)絡(luò)中產(chǎn)生的交易數(shù)據(jù)都被存儲(chǔ)在所有節(jié)點(diǎn)中,確保了交易合法性和數(shù)據(jù)安全性。區(qū)塊鏈通過默克爾樹存儲(chǔ)數(shù)據(jù),一個(gè)區(qū)塊中的交易數(shù)據(jù)將以默克爾樹的形式存于區(qū)塊中,其中區(qū)塊頭記錄默克爾樹根節(jié)點(diǎn)數(shù)據(jù)。區(qū)塊結(jié)構(gòu)如圖2-4所示,區(qū)塊結(jié)構(gòu)分為兩個(gè)部分:區(qū)塊頭和區(qū)塊體,區(qū)塊頭存儲(chǔ)默克爾樹的根結(jié)點(diǎn)以及前后區(qū)塊的哈希值,區(qū)塊之間通過哈希值鏈接在一起。交易數(shù)據(jù)存于區(qū)塊體中。隨著區(qū)塊鏈的廣泛應(yīng)用,區(qū)塊鏈除了存儲(chǔ)包含交易信息的默克爾樹以及哈希值外,也能存儲(chǔ)一些可信的數(shù)據(jù),不僅僅是交易數(shù)據(jù)。圖2-4區(qū)塊結(jié)構(gòu)2.共識(shí)機(jī)制在區(qū)塊鏈中,所有記錄節(jié)點(diǎn)都會(huì)存儲(chǔ)關(guān)于在網(wǎng)絡(luò)中發(fā)生的所有交易信息,因此可以利用所有節(jié)點(diǎn)對(duì)一個(gè)數(shù)據(jù)進(jìn)行驗(yàn)證,從而確定其是否為有效數(shù)據(jù),同時(shí)認(rèn)證,由于數(shù)據(jù)量巨大,節(jié)點(diǎn)驗(yàn)證的可信度得到了保證,所以也可以防篡改。根據(jù)應(yīng)用場(chǎng)合的不同,為了提高不同場(chǎng)合的安全性,區(qū)塊鏈具有一致的共識(shí)機(jī)制,即工作量證明機(jī)制pow、權(quán)益證明機(jī)制pos、委托權(quán)益證明Dpos和驗(yàn)證池共識(shí)機(jī)制池,在效率和安全之間取得了平衡。區(qū)塊鏈系統(tǒng)中沒有中心化的組織,在傳輸信息和節(jié)點(diǎn)交易時(shí),共識(shí)機(jī)制必須解決并保證所有記賬節(jié)點(diǎn)上每筆交易的一致性和正確性。區(qū)塊鏈的共識(shí)機(jī)制使其即使在去中心化組織的情況下也能高效運(yùn)轉(zhuǎn)。除了密碼學(xué)技術(shù)外,共識(shí)機(jī)制也是區(qū)塊鏈基本元素和核心部分,是保障區(qū)塊鏈系統(tǒng)持續(xù)運(yùn)行的關(guān)鍵。3.智能合約智能合約是去中心化和可共享的區(qū)塊鏈上的程序代碼。在交易雙方就合約達(dá)成一致后。只要啟動(dòng)就在區(qū)塊鏈中寫入智能合約,就能自動(dòng)執(zhí)行合約,其中不需要任何機(jī)構(gòu)去操縱,具有自動(dòng)、去中心化等特點(diǎn),從而避免了惡意干預(yù),保障了交易的安全性,其運(yùn)行機(jī)制如圖2-5。圖2-5智能合約運(yùn)行機(jī)制智能合約運(yùn)行過程如下:對(duì)狀態(tài)、轉(zhuǎn)換規(guī)則、觸發(fā)條件以及對(duì)應(yīng)操作進(jìn)行封裝打包,在交易方共同通過后,通過編程語(yǔ)言寫成程序代碼存入?yún)^(qū)塊鏈中等待調(diào)用;在網(wǎng)絡(luò)中進(jìn)行傳播,驗(yàn)證通過后存入每個(gè)節(jié)點(diǎn)中,每個(gè)節(jié)點(diǎn)在被調(diào)用時(shí)驗(yàn)證其身份。來(lái)完成區(qū)塊鏈對(duì)智能合約的監(jiān)督,只有滿足觸發(fā)合約的條件,智能合約才允許自動(dòng)運(yùn)行。智能合約的興起為區(qū)塊鏈發(fā)展指明了新方向,通過交易雙方約定的智能合約,賦予了底層數(shù)據(jù)的可編程性,將詳細(xì)復(fù)雜的操作寫入智能合約后存入?yún)^(qū)塊鏈中,增加了區(qū)塊鏈的靈活性,同時(shí)為用戶應(yīng)用提供了接口,其執(zhí)行的互不干擾保證了交易數(shù)據(jù)的安全,具有很高的研究?jī)r(jià)值。三、基于Fabric的數(shù)據(jù)傳輸和身份認(rèn)證(一)HyperledgerFabric目前世界上發(fā)展的主要的區(qū)塊鏈技術(shù)平臺(tái)有比特幣(Bitcoin)、以太坊(Ethereum)以及超級(jí)賬本(HyperledgerFabric)REF_Ref42123729\r\h[23]。傳統(tǒng)的商業(yè)模式難以在跨機(jī)構(gòu)交易時(shí)確保由可信機(jī)構(gòu)來(lái)執(zhí)行,每個(gè)交易方都有自己獨(dú)立的賬簿,交易發(fā)生時(shí),雙方的賬目必須分別變更,這將提高交易的開銷,此外,傳統(tǒng)模式只有少數(shù)幾個(gè)中心系統(tǒng),使得商業(yè)網(wǎng)絡(luò)相對(duì)脆弱。賬本結(jié)構(gòu)、共識(shí)機(jī)制、數(shù)據(jù)加密和智能合約是企業(yè)級(jí)區(qū)塊鏈所需具備的是個(gè)條件。目前,其他三點(diǎn)都可以由如以太網(wǎng)eos等公鏈滿足,但隱私不能得到保證。此外,效率較低,還沒有最終確定,由愛好者為主,其發(fā)展趨勢(shì)與當(dāng)今商業(yè)發(fā)展不太合適。聯(lián)盟鏈和許可制較為適用于企業(yè)級(jí)商用區(qū)塊鏈網(wǎng)絡(luò)。在聯(lián)盟鏈中,經(jīng)過授權(quán)的節(jié)點(diǎn)中存儲(chǔ)著其身份認(rèn)證信息,在網(wǎng)絡(luò)中是唯一的,只有通過其他節(jié)點(diǎn)的身份認(rèn)證,才能進(jìn)入?yún)^(qū)塊鏈中進(jìn)行數(shù)據(jù)傳輸和交易,因此,未經(jīng)授權(quán)的用戶將被拒絕服務(wù),保證了節(jié)點(diǎn)的公開性和數(shù)據(jù)的安全性。目前最有發(fā)展前景的是產(chǎn)業(yè)鏈或區(qū)塊鏈,主要由各類行業(yè)組織形成,從而構(gòu)成了行業(yè)內(nèi)公開的半公開鏈。從這個(gè)角度來(lái)看,HyperledgerFabric有潛力成為未來(lái)領(lǐng)先的商業(yè)區(qū)塊鏈技術(shù)平臺(tái),它提供了一種授權(quán)維護(hù)賬本的機(jī)制,確保數(shù)據(jù)隱私,值得技術(shù)開發(fā)人員花費(fèi)時(shí)間和精力學(xué)習(xí)和研究。因此,我們使用Fabric超級(jí)帳本建立一個(gè)單機(jī)多節(jié)點(diǎn)網(wǎng)絡(luò),并在其中模擬物聯(lián)網(wǎng)節(jié)點(diǎn)間的交易。1.fabric的組成結(jié)構(gòu)Fabric組成結(jié)構(gòu)如圖3-1所示圖3-1Fabric整體架構(gòu)Fabric提供了gRPCAPI,SDK供應(yīng)用調(diào)用。應(yīng)用在運(yùn)行時(shí)需要訪問Fabric中的各種數(shù)據(jù),比如賬本數(shù)據(jù)、節(jié)點(diǎn)交易數(shù)據(jù)等,記錄有交易信息和數(shù)據(jù)的賬本是Fabric中最核心的部分,這時(shí)候需要依賴SDK完成訪問和調(diào)用REF_Ref42123873\r\h[24]。區(qū)塊鏈通過數(shù)據(jù)庫(kù)、共識(shí)機(jī)制等技術(shù)完成賬本結(jié)構(gòu)的搭建以及交易的正確執(zhí)行,當(dāng)交易產(chǎn)生時(shí),其執(zhí)行過程是通過事先寫入鏈碼的程序來(lái)執(zhí)行,并且在有權(quán)限的情況下可調(diào)用于外部應(yīng)用程序,這種調(diào)用和訪問由權(quán)限管理模塊負(fù)責(zé)。通過公鑰體系、各種加密算法以及數(shù)字簽名機(jī)制,F(xiàn)abric構(gòu)建了一個(gè)穩(wěn)定的權(quán)限管理模塊。在Fabric底層,有很多P2P架構(gòu)的節(jié)點(diǎn),這些節(jié)點(diǎn)共同完成區(qū)塊鏈內(nèi)賬本的同步,確保數(shù)據(jù)的安全性。2.Fabric的交易流程Fabric根據(jù)交易時(shí)的不同分工將節(jié)點(diǎn)劃分為Endorser節(jié)點(diǎn)和Committer節(jié)點(diǎn),對(duì)應(yīng)著交易發(fā)生時(shí)的不同任務(wù)。Fabric交易處理過程如圖3-2所示,各個(gè)組件的功能主要為:圖3-2Fabric交易流程客戶端(App):客戶端是用戶的操作端,為了從客戶端能夠訪問區(qū)塊鏈中的相應(yīng)數(shù)據(jù),需要使用SDK進(jìn)行訪問。其過程如下:1.FabricCA將為客戶端發(fā)放身份證明,在身份驗(yàn)證通過后加入?yún)^(qū)塊鏈;2.客戶端在交易前創(chuàng)建交易提案(Proposal)并提交給Endorser節(jié)點(diǎn)進(jìn)行背書;3.客戶端通過審批策略構(gòu)造合理的交易請(qǐng)求后,將交易請(qǐng)求發(fā)送到O-rderer節(jié)點(diǎn)進(jìn)行排序處理。在區(qū)塊鏈中還存在這事件監(jiān)管機(jī)制,其功能是監(jiān)聽網(wǎng)絡(luò)中產(chǎn)生的信息,所以客戶端還可以通過它來(lái)查詢交易請(qǐng)求是否正確傳輸。Endorser節(jié)點(diǎn):主要向客戶端提供ProcessProposal方法,通過這一方法,用戶可以對(duì)之前提出的交易請(qǐng)求進(jìn)行簽名。Endorser節(jié)點(diǎn)在接受來(lái)自客戶端提交的交易請(qǐng)求后,首先驗(yàn)證交易是否合法,然后檢查其ACL權(quán)限,在確認(rèn)無(wú)誤后,對(duì)交易進(jìn)行模擬,同時(shí)讀取交易產(chǎn)生時(shí)自動(dòng)生成的密鑰,之后返回給用戶。Committer節(jié)點(diǎn):完成區(qū)塊鏈及部分賬本結(jié)構(gòu)的維護(hù)。當(dāng)排序節(jié)點(diǎn)對(duì)區(qū)塊進(jìn)行排序后,由Committer節(jié)點(diǎn)來(lái)驗(yàn)證這些交易的正確性;Orderer節(jié)點(diǎn):在網(wǎng)絡(luò)中產(chǎn)生的交易順利完成后,將寫入?yún)^(qū)塊中并用時(shí)間戳進(jìn)行標(biāo)記,而Orderer節(jié)點(diǎn)就根據(jù)時(shí)間戳對(duì)這些已經(jīng)完成的交易區(qū)塊進(jìn)行排序,在排序完成后交由Committer節(jié)點(diǎn)進(jìn)行正確性檢查。由于Orderer節(jié)點(diǎn)只讀取時(shí)間戳,因此不需要訪問交易內(nèi)容和賬本,降低節(jié)點(diǎn)間數(shù)據(jù)泄露的風(fēng)險(xiǎn);CA:FabricCA負(fù)責(zé)對(duì)所有參與到交易過程中的節(jié)點(diǎn)進(jìn)行身份信息和證書的發(fā)放,在完成證書發(fā)放之后就結(jié)束了工作,不需要參與到交易中,其架構(gòu)如圖3-3。圖3-3FabricCA架構(gòu)示意圖在Fabric的交易過程中,賬本是一個(gè)有序且不可篡改的記錄,可以進(jìn)行狀態(tài)轉(zhuǎn)換。狀態(tài)轉(zhuǎn)換是參與者提交鏈碼后從不被調(diào)用到被調(diào)用的轉(zhuǎn)換。每筆交易生成一組鍵值對(duì)數(shù)據(jù),在創(chuàng)建、更新或刪除時(shí)發(fā)送到總賬;賬本由鏈(chain)和狀態(tài)數(shù)據(jù)庫(kù)(StateDatebase)組成,該鏈將不可變的順序記錄存儲(chǔ)在塊中并維護(hù)一個(gè)狀態(tài)數(shù)據(jù)庫(kù)。每個(gè)channel都有一個(gè)賬本。每個(gè)peer都為其所加入的每個(gè)通道維護(hù)一個(gè)賬本。(二)hyperledgerfabric平臺(tái)搭建Hyperledgerfabric中的身份隱私保護(hù)技術(shù)和數(shù)據(jù)隱私保護(hù)技術(shù)確保其數(shù)據(jù)的安全,而且其智能合約可以以多種編程語(yǔ)言寫入,故適用于節(jié)點(diǎn)眾多環(huán)境復(fù)雜的物聯(lián)網(wǎng)中。經(jīng)過學(xué)習(xí)和測(cè)試,F(xiàn)abric1.4.3網(wǎng)絡(luò)環(huán)境搭建在ubuntu16.04之上。先安ubuntu16.04,并安裝好fabric需要的前置環(huán)境git,curl,pip,go,node.js,npm,升級(jí)gcc,并添加相應(yīng)環(huán)境變量以確保程序能正常運(yùn)行;然后docker和docker-compose構(gòu)成了鏈碼正常運(yùn)行的基礎(chǔ)。在安裝docker-compose之前,需要先安裝python-pip;最后fabric源碼、fabric-samples源碼、fabric鏡像,在安裝成功后,可初步測(cè)試。(三)Fabric1.4.0節(jié)點(diǎn)交易1.Fabric節(jié)點(diǎn)交易測(cè)試在安裝好各種環(huán)境后,通過Fabric提供的e2e_cli示例,一旦crypto-config.yaml文件配置,就可以用cryptogen讀取該文件,并對(duì)其進(jìn)行節(jié)點(diǎn)搭建及測(cè)試。步驟及流程如下:(1)初始化Fabric環(huán)境在docker-compose-cli.yaml中加入FabricDocker環(huán)境的配置,服務(wù)的運(yùn)行和數(shù)據(jù)的存儲(chǔ)依賴于Docker容器;使用以下命令以啟動(dòng)Fabric環(huán)境的容器:docker-compose-fdocker-compose-cli.yamlup-d創(chuàng)建Channel后,將每個(gè)節(jié)點(diǎn)加到其中。由于默認(rèn)情況下CLI連接的節(jié)點(diǎn)是,所以將其他節(jié)點(diǎn)添加Channel時(shí),必須更改CLI的環(huán)境變量使其指向其他peer。配置好通道和節(jié)點(diǎn)后,安裝并運(yùn)行ChainCode。以e2e_cli為例。這個(gè)例子實(shí)現(xiàn)了兩個(gè)賬戶a和b,可以互相轉(zhuǎn)賬。鏈碼必須安裝在每個(gè)相關(guān)的peer上。對(duì)于Fabric提供的示例e2e_cli,如果4個(gè)peer都想在e2e_cli上工作,需要安裝4次。操作類似于peer0。在CLI命令下,切換到1節(jié)點(diǎn)。要安裝e2e_cli,您需要使用peerchaincodeinstall命令并為其命名。所有節(jié)點(diǎn)安裝完chaincode后,打包生成對(duì)應(yīng)的鏡像和容器,在實(shí)例化時(shí)指定a-account100和b-account200,調(diào)用ChainCode的查詢代碼,返回結(jié)果QueryResult:100。(3)通過下列操作將a賬戶的10元交易給b:peerchaincodeinvoke-o:7050--tlstrue--cafile$ORDERER_CA-Cmychannel-nmycc-c'{"Args":["invoke","a","b","10"]}'以上操作在org1完成,而處于同一區(qū)塊鏈的org2在執(zhí)行查詢命令后,同樣可以查看交易過程與結(jié)果,其中就是節(jié)點(diǎn)間的信息傳輸。2.節(jié)點(diǎn)交易流程及數(shù)據(jù)傳輸在Fabric中節(jié)點(diǎn)之間的交易主被劃分為提交過程和提交后處理,其中提交過程是核心過程。提交過程包括四個(gè)步驟:預(yù)處理、驗(yàn)證交易、更新本地區(qū)塊鏈結(jié)構(gòu)和更新本地?cái)?shù)據(jù)庫(kù)結(jié)構(gòu);預(yù)處理階段負(fù)責(zé)構(gòu)造一個(gè)有效的內(nèi)部區(qū)塊結(jié)構(gòu),其主要功能如圖3-4圖3-4預(yù)處理功能驗(yàn)證交易是對(duì)區(qū)塊中的交易進(jìn)行MVCC檢查,驗(yàn)證私密讀寫集,并更新區(qū)塊元數(shù)據(jù)中的交易有效標(biāo)記列表,主要實(shí)現(xiàn)方法如圖3-5。圖3-5驗(yàn)證交易實(shí)現(xiàn)在完成驗(yàn)證交易后,需更新本地區(qū)塊鏈結(jié)構(gòu),主要步驟是將區(qū)塊寫入本地Chunk文件,更新索引數(shù)據(jù)庫(kù)(區(qū)塊號(hào)、哈希值、文件指針、交易偏移量、區(qū)塊元數(shù)據(jù))、將提交的區(qū)塊號(hào)更新到私有數(shù)據(jù)庫(kù);更新數(shù)據(jù)庫(kù)是提交交易的最后一步,主要包括如下步驟:刪除過期的私密數(shù)據(jù);更新私密DLM記錄數(shù)據(jù)庫(kù);更新本地公共狀態(tài)數(shù)據(jù)庫(kù)和私密狀態(tài)數(shù)據(jù)庫(kù);如果歷史數(shù)據(jù)庫(kù)在交易活動(dòng)中啟動(dòng),這也要對(duì)其進(jìn)行更新。提交結(jié)束后,清理本地臨時(shí)狀態(tài)數(shù)據(jù)庫(kù)、更新賬本高度信息,節(jié)點(diǎn)間的交易數(shù)據(jù)通過廣播的方式傳輸?shù)秸麄€(gè)區(qū)塊中,擁有權(quán)限的節(jié)點(diǎn)可以通過指令查詢交易數(shù)據(jù)。3.節(jié)點(diǎn)交易身份認(rèn)證在Fabric賬本中,通過CA進(jìn)行實(shí)現(xiàn)所有證書的管理,在節(jié)點(diǎn)交易測(cè)試時(shí),使用abric-ca為節(jié)點(diǎn)用戶生成msp證書,以及tls證書。具體操作如下:安裝編譯依賴libtool、libtdhl-dev和fabric-ca-server、fabric-ca-client,設(shè)置程序執(zhí)行環(huán)境變量,其操作如圖3-6。圖3-6設(shè)置環(huán)境變量啟用fabric-ca服務(wù)并生成節(jié)點(diǎn)證書,更改文件夾中證書文件的路徑,方便在節(jié)點(diǎn)配置文件中配置證書路徑。該路徑用于在節(jié)點(diǎn)配置文件中查找tls證書的路徑,,其操作如圖3-7圖3-7修改證書路徑節(jié)點(diǎn)交易時(shí),所有節(jié)點(diǎn)收到該區(qū)塊后,驗(yàn)證該區(qū)塊中的交易背書是否已滿足且自讀取集創(chuàng)建以來(lái)未被更改,并將該區(qū)塊中的交易標(biāo)記為有效或無(wú)效。(四)Fabric鏈碼的安裝區(qū)塊鏈中的智能合約在Fabric中又被稱為鏈碼。鏈碼是由go語(yǔ)言編寫的程序,通過Java等編程語(yǔ)言設(shè)定的接口進(jìn)行調(diào)用,在安全的Docker容器中運(yùn)行,由背書節(jié)點(diǎn)進(jìn)程將其獨(dú)立,保障操作的抗干擾性。賬本中的數(shù)據(jù)就是通過鏈碼進(jìn)行操作。在接下來(lái)的研究中,需要通過鏈碼對(duì)數(shù)據(jù)進(jìn)行加密,因此需要提前完成對(duì)鏈碼的安裝。通過開源的Fabric超級(jí)帳本,下載其提供的enccc_example.go并安裝。在通過指令下載好enccc_example.go鏈碼后,對(duì)其進(jìn)行安裝和實(shí)例化,步驟如下登錄cli容器,設(shè)置環(huán)境變量并安裝,詳細(xì)操作如圖3-8:圖3-8設(shè)置環(huán)境變量在安裝好鏈碼后,需對(duì)其實(shí)例化,實(shí)例化是一筆特殊的交易,完成后,將實(shí)例化信息廣播給通道內(nèi)的所有節(jié)點(diǎn),防止再次被實(shí)例化發(fā)生沖突,詳細(xì)操作如圖3-9圖3-9鏈碼實(shí)例化為了保護(hù)網(wǎng)絡(luò)中其他成員的chaincode邏輯的機(jī)密性,chaincode只能安裝在chaincode擁有背書的成員的peer節(jié)點(diǎn)上。沒有chaincode的成員不能執(zhí)行chaincode。但是,它們?nèi)匀豢梢则?yàn)證并將交易提交到賬本。成功實(shí)例化之后,鏈碼就會(huì)進(jìn)入待命狀態(tài),在收到操作指令后就會(huì)對(duì)指令進(jìn)行處理。在完成了鏈碼的安裝及實(shí)例化之后,在第四章將通過其BCCSP接口將用go語(yǔ)言編寫好的AES-128加密算法應(yīng)用到Fabric鏈碼的數(shù)據(jù)加密中。(五)本章小結(jié)本章介紹Fabric超級(jí)帳本的相關(guān)知識(shí),并將其與比特幣、以太坊兩種區(qū)塊鏈平臺(tái)做了簡(jiǎn)單的對(duì)比,其優(yōu)勢(shì)在于屬于半公開的聯(lián)盟鏈,對(duì)授予了證書的機(jī)構(gòu)開放,有很好的發(fā)展前景。同時(shí)在了解了Fabric交易流程的基礎(chǔ)上對(duì)節(jié)點(diǎn)間的交易以及身份認(rèn)證進(jìn)行了測(cè)試,最后安裝了鏈碼實(shí)例,為之后的通過鏈碼對(duì)節(jié)點(diǎn)的數(shù)據(jù)進(jìn)行加密祝好準(zhǔn)備工作。四、用于Fabric的AES加密算法的設(shè)計(jì)與實(shí)現(xiàn)目前的加密算法主要包括對(duì)稱加密算法和非對(duì)稱加密算法。對(duì)稱加密算法的加解密和解密密鑰是一樣的,由于加密速度高,適合頻繁的數(shù)據(jù)傳輸。非對(duì)稱加密則不同,加密和解密密鑰是不同的,密鑰傳輸方便,但加密慢。而在物聯(lián)網(wǎng)網(wǎng)絡(luò)中節(jié)點(diǎn)眾多,數(shù)據(jù)傳輸頻率高,因此采用對(duì)稱加密算法中的AES算法對(duì)Fabric節(jié)點(diǎn)的數(shù)據(jù)進(jìn)行加密。(一)AES加密算法1.AES算法簡(jiǎn)介高級(jí)加密標(biāo)準(zhǔn)(AES,AdvancedEncryptionStandard)是應(yīng)用最廣泛的對(duì)稱加密算法[26]。對(duì)稱加密算法使用相同的密鑰進(jìn)行加密和解密。具體加密過程如圖4-1所示:圖4-1AES算法加密流程其中各個(gè)部分的作用與意義如圖4-2:圖4-2加密算法各部分作用及意義AES加密算法分為3種,即AES-128,AES-192,AES-256。三者之間區(qū)別如圖4-3所示:圖4-3AES算法三種類型目前的AES-128加密算法更安全,沒有出現(xiàn)被攻破的情況REF_Ref42123790\r\h[27],因此,AES-128加密算法可以應(yīng)用于信息安全研究。2.數(shù)學(xué)基礎(chǔ)AES加密算法的大部分操作是字節(jié)操作,也有一些是字操作。在有限域8GF(2)中,一個(gè)字節(jié)代表一個(gè)元素,四個(gè)字節(jié)為32位字(次數(shù)小于4),8GF(2)中的系數(shù)為[28]。各種元素的組合在有限域8GF(2)中有很多,而有限域的引入增加其復(fù)雜程度。有限域8GF(2)中的元素是由AES的多項(xiàng)式表示的。8GF(2)中的元素系數(shù)是小于8的多項(xiàng)式且系數(shù)在GF(2)中。例如由構(gòu)成一個(gè)字節(jié)的多項(xiàng)式(4-1)其中,如二進(jìn)數(shù)為01101011對(duì)應(yīng)于多項(xiàng)式為(4-2)GF(28)中的加法使用二元多項(xiàng)式加法,系數(shù)滿足模2加法(即異或)。例如“6B”和“71”之和為:6B+71=1A,或多項(xiàng)式記法:(4-3)顯然,多項(xiàng)式加法和比特異或以字節(jié)為單位的結(jié)果是一樣的。在GF(28)上的乘法(用符節(jié)“.”表示)定義為二進(jìn)制多項(xiàng)式的乘積以8次不可約多項(xiàng)式為模的乘積,該8次不可約多項(xiàng)式為:(4-4)十六進(jìn)制是“11B”,二進(jìn)制表示是100011011,這個(gè)乘法滿足GF(28)上的結(jié)合律,且有一個(gè)本原元(“01”),例如:(4-5)或者:(4-6)顯然,模數(shù)的結(jié)果是一個(gè)低于8階的多項(xiàng)式,與加法不同的是,乘法不是一個(gè)簡(jiǎn)單的字節(jié)單運(yùn)算。(二)AES加密過程AES加密算法主要由加密和解密兩部分組成。加密過程由字節(jié)替換、行移位、列混合洗和輪密鑰添加組成的函數(shù)的循環(huán)執(zhí)行形成。而解密過程則是由這些操作的逆操作循環(huán)執(zhí)行形成REF_Ref42123812\r\h[29]。1.加密過程在AES加密算法中,十輪加密輪函數(shù)的運(yùn)行組成了其加密部分,完成了AES-128加密算法的加密部分,其中前九輪加密相同,只有第十輪加密不同REF_Ref42123839\r\h[30]。每一輪加密包括字節(jié)代換、行位移、列混合、輪密鑰加是個(gè)部分這四個(gè)部分就是AES加密算法的核心操作。AES加密算法將128位的明文數(shù)據(jù)包P和密鑰K分成16個(gè)字節(jié),分別標(biāo)記為P=P0P1...P15和K=K0K1...K15。最常見的是,狀態(tài)矩陣用于以字節(jié)為單位描述文本數(shù)據(jù)包的數(shù)組,它代表了目前明文處于第幾輪加密。在十輪加密中,矩陣的狀態(tài)隨著加密的進(jìn)行而改變,在每一輪都呈現(xiàn)出不同的狀態(tài),如圖4-4所示:圖4-4AES算法加密過程前九輪的加密操作相同,包括字節(jié)替換、行位移、列混合和輪密鑰加,行列混合在第十輪加密中不被進(jìn)行,這就是第十輪加密與前九輪不同的地方。并且在第一輪加密之前,明文和密鑰進(jìn)行異或加密。2.解密過程AES算法的解密輪次與加密相同,都是十輪,每輪解密操作包括反向字節(jié)替換、反向移動(dòng)、反向列混合和輪密鑰添加。與加密操作一樣,最后一輪不進(jìn)行反向混合,在第一輪解密之前進(jìn)行密鑰添加操作,其過程如圖4-5:圖4-5AES解密算法流程(三)AES加密算法的設(shè)計(jì)與實(shí)現(xiàn)AES-128塊對(duì)稱加密是指將明文數(shù)據(jù)分解成多個(gè)16字節(jié)的明文塊,每個(gè)明文塊用一個(gè)密鑰加密,得到相同數(shù)量的16字節(jié)的文本塊。如果明文塊小于16字節(jié),則必須有填充和鏈?zhǔn)骄幋a方式。在FabricSuperLedger中給出了許多鏈碼示例,在本研究中我們選用ENCChaincode數(shù)據(jù)賬本進(jìn)行實(shí)驗(yàn)。1.AES加密算法詳細(xì)設(shè)計(jì)在AES加密函數(shù)中,第一步是將密鑰展開,然后將明文字符串讀入一個(gè)4*4的整數(shù)數(shù)組,形成狀態(tài)矩陣。在AES編碼函數(shù)中,每輪運(yùn)算的行位移和列混合函數(shù)都會(huì)改變pArray(狀態(tài)矩陣函數(shù))。為了加密后的字符存儲(chǔ)在明文P中,經(jīng)過10輪加密后,將pArray轉(zhuǎn)換回字符串,然后存儲(chǔ)在明文p的字符串中。這個(gè)轉(zhuǎn)換過程是通過convertArrayToStr()函數(shù)實(shí)現(xiàn)的,主要實(shí)現(xiàn)代碼如圖4-6。圖4-6AES加密函數(shù)2.AES解密算法詳細(xì)設(shè)計(jì)AES的解密函數(shù)和加密函數(shù)不同,解密函數(shù)中調(diào)用的是各輪操作的逆函數(shù)。主要實(shí)現(xiàn)代碼如圖4-7圖4-7AES解密函數(shù)在完成了AES-128算法的編寫后,將其儲(chǔ)存在Fabric超級(jí)帳本密碼算法模塊BCCSP(blockchaincryptoserviceprovider)中,即可在后續(xù)的實(shí)例中調(diào)用并對(duì)數(shù)據(jù)進(jìn)行加密。(四)將AES加密算法應(yīng)用于Fabric的實(shí)現(xiàn)1.通過BCCSP模塊對(duì)AES算法的實(shí)現(xiàn)在編寫好AES加密算法后,將其存入BCCSP的sw目錄之后,需對(duì)結(jié)構(gòu)體進(jìn)行定義,主要操作如圖4-8。圖4-8sw結(jié)構(gòu)體定義之后通過定義加解密以及字符填充模塊,就可以在鏈碼中調(diào)用加密算法對(duì)數(shù)據(jù)進(jìn)行加密,詳細(xì)過程如下:加密模塊主要內(nèi)容如圖4-9,圖4-9加密模塊解密模塊主要內(nèi)容如圖4-10,圖4-10解密模塊Fabric中使用的padding方法是:pkcs7Padding,即padding字符串由一個(gè)字節(jié)串組成,每個(gè)字節(jié)填充字節(jié)串的長(zhǎng)度,如圖4-11。圖4-11字符填充在完成了各模塊的編寫,可以調(diào)用加密算法對(duì)鏈碼中的數(shù)據(jù)進(jìn)行加密2.FabricENCChaincode賬本AES128加密解密和簽名驗(yàn)證在之前的研究中,由Fabric超級(jí)帳本通過e2e_cli提供,進(jìn)行了節(jié)點(diǎn)間的數(shù)據(jù)傳輸,而在這里,使用Fabric開源提供的enccc_example.go來(lái)進(jìn)行數(shù)據(jù)傳輸?shù)募用芤约膀?yàn)證簽名。AES128塊對(duì)稱加密是指將明文數(shù)據(jù)分解成多個(gè)16字節(jié)的明文塊,然后用密鑰對(duì)每個(gè)明文塊進(jìn)行加密,得到相同數(shù)量的16字節(jié)密文塊。塊小于16字節(jié),它必須具有填充和鏈編碼模式。我們使用PKCS7Padding的方法來(lái)填充ENCChaincode,也就是用缺失的數(shù)字來(lái)填充。例如,如果塊長(zhǎng)度為12個(gè)字節(jié),缺少4個(gè)字節(jié),則填寫4個(gè)字節(jié)的內(nèi)容,每個(gè)字節(jié)的內(nèi)容為十進(jìn)制的4。在提供的鏈碼中,ENCKEY和DECKEY用于分組對(duì)稱加密和解密,IV為加密過程中使用的向量。ENCCC示例使用CBC模式,必須向鏈碼提供IV。如果未提供,它將隨機(jī)生成。但是,如果背書策略規(guī)定需要多個(gè)節(jié)點(diǎn)背書,那么必須指定一個(gè)唯一的IV,否則背書時(shí)節(jié)點(diǎn)會(huì)出現(xiàn)讀寫沖突。主要函數(shù)及功能如下:Encrypter把通過AES128位密鑰進(jìn)行加密的value寫入賬本;Decrypter將賬本value讀出并通過AES128位密鑰進(jìn)行解密;EncrypterSigner對(duì)value使用AES128位密鑰進(jìn)行加密和prime256v1標(biāo)準(zhǔn)進(jìn)行簽名,并將value寫入賬本;DecrypterVerify從賬本中讀取數(shù)據(jù),使用AES128位密鑰進(jìn)行解密和prime256v1標(biāo)準(zhǔn)驗(yàn)證簽名。使用e2e_cli示例網(wǎng)絡(luò)結(jié)構(gòu):一個(gè)orderer節(jié)點(diǎn),分屬兩個(gè)Org的四個(gè)peer節(jié)點(diǎn)。修改了script.sh腳本,在所有peer節(jié)點(diǎn)安裝、實(shí)例化ENCCC(ENCChaincode)測(cè)試過程中設(shè)置了ENCKEY、DECKEY、DECKEY1、IV、SIGKEY、VERKEY、VERKEY1為cli容器的環(huán)境變量。首先驗(yàn)證其加密解密,使用ENCKEY將value寫入賬本,結(jié)果:數(shù)據(jù)可正確加密寫入如圖4-12:圖4-12寫入value使用DECKEY讀取value,數(shù)據(jù)正確讀出并解密如圖4-13圖4-13讀出數(shù)據(jù)但是如果使用DECKEY1讀取value,則解密失敗,說(shuō)明節(jié)點(diǎn)的數(shù)據(jù)傳輸安全得到了保障,本區(qū)塊外的節(jié)點(diǎn)無(wú)法解密。最后就是簽名的認(rèn)證,使用ENCKEY和SIGKEY在賬本中寫入值,結(jié)果數(shù)據(jù)正確簽名加密,并且寫入賬本,使用ENCKEY和VERKEY讀取值時(shí),能夠正確讀出并解密,驗(yàn)證簽名通過,使用ENCKEY和VERKEY1讀取值時(shí)可以讀取數(shù)據(jù),但是簽名驗(yàn)證不通過,增強(qiáng)了數(shù)據(jù)的安全保障。enccc_example為我們提供了一種加密分類帳數(shù)據(jù)的解決方案。要通過加密隔離數(shù)據(jù),需要針對(duì)特定應(yīng)用程序進(jìn)行某些更改。通過對(duì)鏈碼的加密,提高節(jié)點(diǎn)間數(shù)據(jù)傳輸?shù)陌踩裕鳤ES加密算法適用于經(jīng)常收發(fā)數(shù)據(jù)的場(chǎng)景,符合物聯(lián)網(wǎng)網(wǎng)絡(luò)的需求,通過應(yīng)用AES算法加密的區(qū)塊鏈,它可以在一定程度上增強(qiáng)物聯(lián)網(wǎng)數(shù)據(jù)的安全性。(五)本章小結(jié)本章首先介紹了AES算法的相關(guān)知識(shí)和數(shù)學(xué)基礎(chǔ),同時(shí)對(duì)其加密解密過程進(jìn)行分析,然后通過Fabric的BCCSP模塊簡(jiǎn)編寫好的AES加密算法包裝成可供節(jié)點(diǎn)調(diào)用的加密模塊,最后通過鏈碼實(shí)例enccc_example.go進(jìn)行了數(shù)據(jù)加密以及簽名驗(yàn)證。AES加密算法的加入,保證了節(jié)點(diǎn)數(shù)據(jù)的安全,只有在同一區(qū)塊中并且簽名
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年山東省菏澤市中考?xì)v史真題
- 花崗巖開采管理制度
- 茶葉修剪隊(duì)管理制度
- 防疫督導(dǎo)員管理制度
- 課外閱讀專項(xiàng)-部編人教版小學(xué)三年級(jí)語(yǔ)文下冊(cè)試卷-部編人教版小學(xué)三年級(jí)語(yǔ)文下冊(cè)試卷
- 設(shè)備維修合同 (三)
- 設(shè)備機(jī)組維修技術(shù)培訓(xùn)方案及質(zhì)量保證措施
- 哈爾濱市第九中學(xué)校2024-2025學(xué)年高二下學(xué)期6月月考政治試卷(含答案)
- 大班各領(lǐng)域教育內(nèi)容要點(diǎn)及實(shí)施策略探討
- 【高中語(yǔ)文】《六國(guó)論》課文深度解析+統(tǒng)編版高一語(yǔ)文必修下冊(cè)
- 通信員工安全試題及答案
- 2025年洗紋身協(xié)議書
- 工會(huì)廠務(wù)公開課件
- 桃花源記的試題及答案
- 工廠計(jì)件獎(jiǎng)罰管理制度
- 2024年陜西省西安市初中學(xué)業(yè)水平模擬考試地理試卷
- 2025黑龍江省交通投資集團(tuán)限公司招聘348人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- cpsm考試試題及答案
- 匯川技術(shù)高壓變頻器技術(shù)標(biāo)準(zhǔn)教材
- 2025年玻璃鋼圍網(wǎng)漁船項(xiàng)目市場(chǎng)調(diào)查研究報(bào)告
- 《老年人認(rèn)知記憶訓(xùn)練》課件
評(píng)論
0/150
提交評(píng)論