亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        一種基于區(qū)塊鏈的數(shù)據(jù)完整性驗證解決方案

        2020-01-10 06:38:32毛燕琴沈蘇彬
        關(guān)鍵詞:智能

        魏 艷,毛燕琴,沈蘇彬

        (南京郵電大學(xué) 計算機(jī)學(xué)院,江蘇 南京 210023)

        0 引 言

        數(shù)據(jù)在當(dāng)今時代是一項非常重要的資產(chǎn),推動著不同領(lǐng)域做出具有戰(zhàn)略意義的決策。因為數(shù)據(jù)發(fā)揮著關(guān)鍵作用,使其成為網(wǎng)絡(luò)攻擊的一個目標(biāo)。其攻擊目的是破壞數(shù)據(jù)的CIA(保密性、完整性、可用性)屬性,其中數(shù)據(jù)的完整性是數(shù)據(jù)是否可信的關(guān)鍵。2008年,一位署名為中本聰?shù)娜税l(fā)表了一篇名為《比特幣:一種點(diǎn)對點(diǎn)的電子現(xiàn)金系統(tǒng)》的技術(shù)白皮書[1],具體闡述了交易、時間戳服務(wù)器、工作量證明、網(wǎng)絡(luò)、加密、區(qū)塊鏈技術(shù)等基于互聯(lián)網(wǎng)的、去中心的電子貨幣框架的重要理念,并且隨后上線了比特幣的系統(tǒng)。在比特幣的概念中,區(qū)塊鏈被稱為比特幣交易的公共賬本。區(qū)塊鏈的去中心化、分布式、持久性、不可篡改等屬性成為區(qū)塊鏈應(yīng)用迅速發(fā)展的主要動力,也成為具有隱私保護(hù)應(yīng)用需求的數(shù)據(jù)完整性驗證的主要關(guān)注焦點(diǎn)。

        文中提出了面向區(qū)塊鏈數(shù)據(jù)完整性驗證的區(qū)塊鏈結(jié)構(gòu);提出了基于去中心化時間戳的數(shù)據(jù)完整性驗證機(jī)制,利用區(qū)塊鏈擁有的自身特性保證數(shù)據(jù)完整性。在以太坊平臺上模擬真實場景,具體實現(xiàn)了數(shù)據(jù)完整性驗證的智能合約。實驗結(jié)果表明,基于區(qū)塊鏈數(shù)據(jù)完整性驗證的模型,提高了數(shù)據(jù)的安全性,確保了數(shù)據(jù)的完整性。

        1 相關(guān)工作分析

        數(shù)據(jù)在物聯(lián)網(wǎng)環(huán)境下采集、傳遞、存儲的過程中,如果缺少嚴(yán)密的安全防范措施,可能會出現(xiàn)假冒的、被篡改的或者過期的數(shù)據(jù),這些缺乏完整性保護(hù)的物聯(lián)網(wǎng)數(shù)據(jù)會對物聯(lián)網(wǎng)應(yīng)用造成極大的危害。區(qū)塊鏈提供的去中心化的、匿名信任管理機(jī)制,無需將數(shù)據(jù)傳遞到網(wǎng)絡(luò)服務(wù)器就可以驗證數(shù)據(jù)的完整性,這樣使得區(qū)塊鏈成為目前解決具有隱私保護(hù)需求的數(shù)據(jù)完整性問題的一種優(yōu)選方法。數(shù)據(jù)完整性是指維護(hù)和確保數(shù)據(jù)在其整個生命周期內(nèi)的準(zhǔn)確性和一致性[2]。如果系統(tǒng)提供了完整性,那么系統(tǒng)就要保證數(shù)據(jù)是來自于經(jīng)過身份驗證的數(shù)據(jù)源發(fā)送給接收者的,并且要保證數(shù)據(jù)沒有被篡改,這樣在某種意義上就具有了不可抵賴性[3]。

        與基于區(qū)塊鏈的數(shù)據(jù)完整性驗證方法相關(guān)的技術(shù)包括區(qū)塊鏈、共識協(xié)議、激勵機(jī)制、可信時間戳,以及已有的數(shù)據(jù)完整性驗證機(jī)制。

        1.1 區(qū)塊鏈概述

        區(qū)塊鏈由區(qū)塊鏈接組成,每個區(qū)塊包含一個區(qū)塊頭和一系列交易作為其負(fù)載。這一系列交易通過所有交易作為梅克爾樹的葉子節(jié)點(diǎn)構(gòu)成的梅克爾樹的根被包含在區(qū)塊頭中。另外這個區(qū)塊頭包含一個時間戳和前一區(qū)塊頭的哈希,一次性數(shù)等。時間戳服務(wù)器對區(qū)塊進(jìn)行散列并公開發(fā)布它,從而證明區(qū)塊內(nèi)的數(shù)據(jù)在散列時就已經(jīng)存在。時間戳服務(wù)器必須驗證區(qū)塊的時間戳大于前一區(qū)塊的時間戳。區(qū)塊鏈中的每個區(qū)塊都通過包含前一區(qū)塊表示的哈希值來“鏈接”前一個區(qū)塊。這些哈希值連接成一條鏈,被稱為區(qū)塊鏈[4]。區(qū)塊中的每個交易被散列成一棵梅克爾樹[5]。梅克爾樹是具有很多葉子節(jié)點(diǎn)的二叉樹,而且葉子節(jié)點(diǎn)的樹根是它子節(jié)點(diǎn)的哈希[6]。

        圖1 區(qū)塊的結(jié)構(gòu)

        如圖1所示,一個比特幣的區(qū)塊的一部分是交易哈希值的梅克爾樹。樹中的任何不一致都會在區(qū)塊鏈中被反映,所以梅克爾樹對于區(qū)塊鏈的長期維護(hù)非常重要。區(qū)塊鏈?zhǔn)腔诰W(wǎng)絡(luò)的、可以分散可信存儲、交換和訪問數(shù)據(jù)的管理系統(tǒng)。區(qū)塊鏈不僅僅是一個數(shù)據(jù)結(jié)構(gòu),必然包括可信數(shù)據(jù)存儲、交換和數(shù)據(jù)訪問的相關(guān)操作機(jī)制。區(qū)塊鏈可以看作是一種去中心化的數(shù)據(jù)管理系統(tǒng),也可以看作是對等網(wǎng)絡(luò)上的一類應(yīng)用。

        1.2 共識協(xié)議

        基于工作量證明的區(qū)塊鏈擁有的許多特性都和數(shù)據(jù)完整性相關(guān),主要是因為淘金過程和區(qū)塊鏈的副本存在于大量的節(jié)點(diǎn)中。當(dāng)一個區(qū)塊是區(qū)塊鏈的一部分,所有的淘金者都要同意其內(nèi)容,所以這個內(nèi)容是不可抵賴和持久的[7]。區(qū)塊鏈對存儲的數(shù)據(jù)的不變性有很強(qiáng)的保證,并且隨著時間的推移這個保證更強(qiáng),因而適用于時間戳應(yīng)用程序。區(qū)塊鏈的安全性通過工作量證明保證。在區(qū)塊鏈網(wǎng)絡(luò)中,淘金者通過在區(qū)塊中增加一個一次性數(shù)直到區(qū)塊的散列滿足指定條件的值,過程需要花費(fèi)巨大的算力,因而稱工作量證明。新生成的區(qū)塊被添加在整條鏈的尾部,攻擊者若想改變此區(qū)塊中的信息,只能通過重做這個區(qū)塊之后的所有區(qū)塊的工作量證明工作才能完成,代價巨大。

        1.3 激勵機(jī)制

        面向區(qū)塊鏈數(shù)據(jù)完整性驗證的區(qū)塊鏈結(jié)構(gòu)模仿比特幣的激勵機(jī)制。通過對淘金者提供獎勵,在保持去中心化的同時利用自我利益的力量驅(qū)動區(qū)塊鏈網(wǎng)絡(luò)的高速發(fā)展。比特幣系統(tǒng)對區(qū)塊的創(chuàng)建者提供了比特幣的激勵,對驗證交易的一方也提供了比特幣的激勵。區(qū)塊中的第一筆交易會產(chǎn)生一個新的比特幣獎勵給區(qū)塊的創(chuàng)建者。這會激勵節(jié)點(diǎn)驗證交易,然后將比特幣投入流通領(lǐng)域,因為沒有中央機(jī)構(gòu)發(fā)布比特幣。第一筆交易稱為創(chuàng)幣(coinbase)交易。使用這種方法,可以激勵節(jié)點(diǎn)保持誠實。比特幣網(wǎng)絡(luò)大約10分鐘產(chǎn)生一個區(qū)塊。除了基于區(qū)塊創(chuàng)建產(chǎn)生的獎勵,節(jié)點(diǎn)通過驗證交易也會被獎勵比特幣。這種將新區(qū)塊添加到區(qū)塊鏈的過程稱為淘金[8]。最初的區(qū)塊獎勵設(shè)置為50個比特幣,后來每210 000個區(qū)塊獎勵會減半。區(qū)塊鏈的第一個區(qū)塊是創(chuàng)世區(qū)塊,用來向網(wǎng)絡(luò)提供最初的50個比特幣。區(qū)塊創(chuàng)建獎勵的減半策略會持續(xù)到獎勵低于一個聰。

        1.4 去中心化可信時間戳

        區(qū)塊鏈對存儲的數(shù)據(jù)的不變性有很強(qiáng)的保證,并且隨著時間的推移這個保證更強(qiáng)[9-10]。這個保證使得區(qū)塊鏈很適用于時間戳應(yīng)用程序,因為它們保證了數(shù)據(jù)在未來不會發(fā)生變化。區(qū)塊鏈可以說是一個去中心化的時間戳服務(wù)器技術(shù)[11-13],該技術(shù)被比特幣數(shù)字貨幣系統(tǒng)引進(jìn)。時間戳證明數(shù)據(jù)在某個特定時間點(diǎn)肯定存在,例如報紙就可以充當(dāng)一個時間證明。在區(qū)塊里,每個區(qū)塊都包含有一個時間戳,這個時間戳是淘金者根據(jù)本地系統(tǒng)時間設(shè)定的,表明區(qū)塊被成功挖掘的時間。區(qū)塊頭中包含的時間戳可以確保區(qū)塊的順序,有效預(yù)防對區(qū)塊中數(shù)據(jù)的篡改和偽造??尚艜r間戳是驗證在某一時間點(diǎn)未改變的數(shù)字?jǐn)?shù)據(jù)的存在的一個過程。隨著加密貨幣的推出,區(qū)塊鏈?zhǔn)状螌崿F(xiàn)了防篡改、不可信、匿名和可自動編程的“去中心化可信時間戳”。該技術(shù)展現(xiàn)了如果數(shù)據(jù)的哈希值被嵌入到加密貨幣的交易記錄中,加密貨幣的區(qū)塊鏈(例如比特幣)充當(dāng)一個去中心化的可信時間戳服。證明數(shù)據(jù)在某個時間存在某個狀態(tài),并且之后沒有被更改。通過使用區(qū)塊鏈技術(shù)保證和驗證數(shù)據(jù)的完整性。這個和已經(jīng)建立好的時間戳協(xié)議相比有以下優(yōu)點(diǎn):(1)時間戳的去中心化的密碼完整性驗證的過程。(2)高度激勵計算節(jié)點(diǎn)致力于去中心化過程。區(qū)塊鏈不受限于單個實體,而是由加入到加密貨幣網(wǎng)絡(luò)中的所有計算節(jié)點(diǎn)進(jìn)行維護(hù),任何人都可以公開訪問。

        2 基于區(qū)塊鏈的數(shù)據(jù)完整性驗證

        傳統(tǒng)的方法都是使用中心化的方式為存儲的數(shù)據(jù)完整性驗證指明了光明的未來,但是這些都是依賴第三方進(jìn)行數(shù)據(jù)完整性驗證的方法,存在的主要問題是第三方仍不可信。相對于傳統(tǒng)的數(shù)據(jù)完整性驗證,文中利用區(qū)塊鏈技術(shù),拋棄第三方審查機(jī)構(gòu),采用去中心化的數(shù)據(jù)完整性驗證,保證了數(shù)據(jù)完整性驗證的可信性[14-17]。

        2.1 數(shù)據(jù)標(biāo)識的基本結(jié)構(gòu)

        使用密碼哈希函數(shù)SHA-256實現(xiàn)數(shù)字簽名可以提供數(shù)據(jù)的完整性。數(shù)字簽名需要一對密鑰(公鑰和私鑰),這來自于橢圓曲線算法[18]。使用哈希函數(shù)用來簽名和驗證報文的完整性。數(shù)字簽名被用來簽署交換的報文。時間戳證明數(shù)據(jù)在某個時間存在某個狀態(tài),并且之后沒有被更改。通過使用區(qū)塊鏈技術(shù)保證和驗證數(shù)據(jù)的完整性。

        數(shù)字資源一般使用URIs或者DOIs進(jìn)行標(biāo)識[19]。但是它們都依賴于某些信任方或者權(quán)威機(jī)構(gòu),而且不能保證隨著時間的推移可以檢索到相同的資源。所以在不被信任的環(huán)境下,數(shù)字資源應(yīng)該通過可以唯一識別內(nèi)容的機(jī)制進(jìn)行識別,也就是數(shù)據(jù)標(biāo)識具有唯一性。隨著需要處理不同的媒體類型和慣例表示的資源,以及處理被編碼的資源,使用字節(jié)內(nèi)容的哈希值已經(jīng)成為一個普遍適用的方法。擁有可以識別資源及其數(shù)據(jù)的賬戶,就要關(guān)注數(shù)據(jù)真實性的問題,也就是允許數(shù)據(jù)的所有者提供證明,是由他們自己提供的數(shù)據(jù)。區(qū)塊鏈?zhǔn)且粋€合適的解決方案,因為區(qū)塊鏈允許數(shù)據(jù)的擁有者添加交易到區(qū)塊鏈中,在區(qū)塊鏈中可以加密證明數(shù)據(jù)的出處,而且不能被刪除。目前在區(qū)塊鏈領(lǐng)域,驗證數(shù)據(jù)完整性的方法是將標(biāo)識符-哈希值映射類型存儲在智能合約中。但是通過查看智能合約中的這些數(shù)據(jù)很難推斷出和其相關(guān)的任何信息。文中提出的實現(xiàn)方法是在智能合約中存儲一些與源數(shù)據(jù)相關(guān)的元數(shù)據(jù)以及哈希值。該方法通過在智能合約中增加一個Identifier結(jié)構(gòu)實現(xiàn),這個結(jié)構(gòu)包含一些附加信息也就是元數(shù)據(jù),有數(shù)字簽名(bytes dsign),時間戳(uint256 timestamp),哈希值(bytes hash),數(shù)據(jù)的所有者(address owner)。然后將這個結(jié)構(gòu)代替數(shù)據(jù)哈希值映射到智能合約中。因此標(biāo)識符的基本結(jié)構(gòu)引進(jìn)去中心化的概念,具體Identifier結(jié)構(gòu)定義如下(使用solidity語言):

        struct Identifier

        {

        bytes dsign;//數(shù)字簽名

        uint256 timestamp;//時間戳

        bytes hash;//哈希值

        address owner;//數(shù)據(jù)的所有者

        }

        2.2 數(shù)據(jù)完整性驗證的區(qū)塊鏈結(jié)構(gòu)

        以太坊有兩種賬戶類型,一種是由賬戶控制的外部賬戶,此賬戶是由用戶控制的公-私鑰對,用A、B……表示這些賬戶。另一種是合約賬戶存儲執(zhí)行的智能合約代碼,用x表示。這兩種賬戶類型都可以存儲以太坊的貨幣“以太幣”。如果沒有用戶交互,以太坊不會在合約中執(zhí)行計算。所以,合約賬戶在它的代碼被執(zhí)行之前必須被外部賬戶激活。智能合約是一種分布式執(zhí)行代碼的機(jī)制,為了淘金者執(zhí)行代碼消耗的計算工作,以太坊會支付成比例的費(fèi)用。淘金者執(zhí)行此交易的交易費(fèi)是執(zhí)行代碼實際消耗的燃料乘以燃料單價。如果某些執(zhí)行需要燃料比還要高,則執(zhí)行將以異常的形式終止,狀態(tài)將恢復(fù)為初始狀態(tài),就像一切沒有發(fā)生一樣。在這種情況下,發(fā)件人仍然必須向淘金者支付所有限定的燃料量,作為對抗資源枯竭攻擊的對策??傊?,執(zhí)行代碼需要使用燃料,這些燃料由外部賬戶使用以太幣購買。燃料的成本實際上是一個交易費(fèi)用,鼓勵淘金者去執(zhí)行代碼。

        如圖2所示,A在區(qū)塊鏈上創(chuàng)建了一個合約,合約代碼放置在交易的數(shù)據(jù)字段被發(fā)送到區(qū)塊鏈。合約的地址是X。B使用第二個交易發(fā)送一定量的燃料到地址X來調(diào)用合約的一個函數(shù)。

        以太坊的交易結(jié)構(gòu)如圖2所示,每個字段的含義如下:

        簽名字段:來自外部賬戶的簽名,用于授權(quán)交易,也就是可以標(biāo)識發(fā)送方證明他們發(fā)送一筆交易。

        接收方字段:交易的接收方,既可以是外部賬戶也可以是合約賬戶。

        數(shù)據(jù)字段:數(shù)據(jù)字段是可選字段,在圖2中是指發(fā)送給一個合約賬戶的消息,包含合約代碼,用于創(chuàng)建一個新合約或者執(zhí)行合約指令。

        燃料價格:使用以太幣購買燃料的轉(zhuǎn)換率,每個燃料單位的價格。

        最大燃料量:這筆交易花費(fèi)的燃料總量,也就是當(dāng)用戶發(fā)送交易以調(diào)用合約時,用戶必須指定愿意為執(zhí)行提供多少燃料。

        以太坊中交易定義,交易是被使用在以太坊中是指已經(jīng)被簽名的數(shù)據(jù)包(data package),這個數(shù)據(jù)包會被從一個外部賬戶(EOA)發(fā)送給區(qū)塊鏈中的另一個賬戶。這個賬戶可以是外部賬戶,也可以是合約賬戶。這個數(shù)據(jù)包存儲了一個消息(message),這個消息數(shù)據(jù)可以是以太幣也可以是合約執(zhí)行參數(shù)(數(shù)據(jù)字段)。基于自己的產(chǎn)品有兩種類型的交易,一個是創(chuàng)建新賬戶,也就是圖2的合約創(chuàng)建交易,另一個是用于消息調(diào)用,也就是調(diào)用合約交易。

        圖2 基于區(qū)塊鏈的數(shù)據(jù)完整性驗證的區(qū)塊鏈結(jié)構(gòu)

        2.3 基于區(qū)塊鏈的數(shù)據(jù)完整性驗證分析

        (1)節(jié)點(diǎn)需要使安全哈希函數(shù)對數(shù)據(jù)進(jìn)行哈希運(yùn)算,得到數(shù)據(jù)的哈希值。得到的結(jié)果記為hash。

        (2)節(jié)點(diǎn)對這個哈希值進(jìn)行數(shù)字簽名,得到數(shù)字簽名dsign。利用去中心化時間戳和唯一數(shù)據(jù)標(biāo)識技術(shù)。將哈希值hash、數(shù)字簽名dsign以及交易發(fā)生的時間戳timestamp和數(shù)據(jù)所有者owner都作為附加信息添加到Identifier結(jié)構(gòu)中。最后將這個結(jié)構(gòu)代替數(shù)據(jù)哈希值映射到智能合約中。

        礦體受構(gòu)造控制作用明顯。區(qū)域性的大型構(gòu)造控制著巖體的分布,次級構(gòu)造控制著礦體的分布。本區(qū)位于朱陽關(guān)—夏館—大河區(qū)域性斷裂的南側(cè),該構(gòu)造給巖漿和成礦物質(zhì)提供了上升通道;郭莊組及劉山巖組地層內(nèi)的次級構(gòu)造為鉬礦體提供的成礦空間,發(fā)育有脈狀的鉬多金屬礦床。

        (3)用戶將數(shù)據(jù)存入本地服務(wù)器中,并保留數(shù)據(jù)標(biāo)識中的元數(shù)據(jù)信息,以便實時的數(shù)據(jù)完整性驗證。

        (4)用戶需要進(jìn)行完整性驗證服務(wù)時,首先計算出在本地服務(wù)器中存儲的數(shù)據(jù)的哈希值hash0,然后根據(jù)保留的時間戳信息timestamp0,再進(jìn)行哈希計算,最終得到一個新的哈希值hash1,最后利用用戶自身的私鑰,對hash1進(jìn)行數(shù)字簽名,得到新的數(shù)字簽名dsign0。

        (5)節(jié)點(diǎn)和數(shù)據(jù)完整性智能合約進(jìn)行交互,通過使用數(shù)字簽名dsign0,搜索智能合約中Identifier結(jié)構(gòu)對應(yīng)的存儲在區(qū)塊鏈的數(shù)據(jù)哈希值hash。

        (6)對比兩個哈希值hash和hash0,驗證數(shù)據(jù)的完整性。如果兩個值相同,該源數(shù)據(jù)就順利完成數(shù)據(jù)完整性驗證,說明數(shù)據(jù)沒有被篡改,反之,源數(shù)據(jù)就遭到篡改或者破壞。

        3 仿真實現(xiàn)與測試

        實驗的硬件環(huán)境是Intel(R)Core(TM)i7-8550U CPU (1.80 GHz),RAM為8 GB。以太坊平臺運(yùn)行在Ubuntu16.04LTS 64位操作系統(tǒng)上。智能合約由solidity語言實現(xiàn),區(qū)塊鏈環(huán)境使用以太坊solidity編程語言開發(fā)框架truffle和可視化私有鏈客戶端ganache。

        基于去中心化時間戳的數(shù)據(jù)完整性驗證機(jī)制如下:通過數(shù)據(jù)完整性驗證的智能合約實現(xiàn)。智能合約包含存儲函數(shù)put以及驗證函數(shù)get。該過程可以使用式1和式2表示。其中h是哈希函數(shù)本身,m是將要轉(zhuǎn)換成哈希值的報文,生成哈希值hash,timestamp是交易的時間戳,利用用戶的私鑰private,執(zhí)行數(shù)字簽名sign,生成唯一的數(shù)字標(biāo)識dsign,通過存儲函數(shù)put,數(shù)字簽名dsign,時間戳timestamp,哈希值hash,數(shù)據(jù)所有者owner被永久地存儲在以太坊區(qū)塊鏈中。通過使用唯一數(shù)據(jù)標(biāo)識符dsign作為驗證函數(shù)put的輸入,返回與此數(shù)據(jù)標(biāo)識符相關(guān)的數(shù)據(jù)。用戶交易會以交易列表的形式作為區(qū)塊的一部分。每個區(qū)塊必須指向前一區(qū)塊,因此新的區(qū)塊會確認(rèn)前一區(qū)塊的內(nèi)容。因為區(qū)塊鏈的激勵機(jī)制的存在,就會激勵節(jié)點(diǎn)發(fā)布一組新的交易,進(jìn)而形成新的區(qū)塊。一旦區(qū)塊被確認(rèn)之后,就無法改變一個交易的時間戳。這個過程可以幫助證明數(shù)據(jù)在某一時間點(diǎn)存在,自某一時間點(diǎn)之后就沒有被改變,確保數(shù)據(jù)的完整性。存儲到區(qū)塊鏈中的數(shù)據(jù)是很難被篡改或者偽造的,所以數(shù)據(jù)可以被安全存儲。

        (1)

        get=(dsign)

        (2)

        3.1 數(shù)據(jù)完整性存儲階段

        以太坊設(shè)計了兩種方法存儲數(shù)據(jù)。一種利用賬戶存儲數(shù)據(jù),另一種利用事件存儲數(shù)據(jù),也稱為日志存儲。這兩種方法都在合約代碼中實現(xiàn)。以太坊中的每個賬戶都有額外的空間用于數(shù)據(jù)存儲。該存儲在以太坊虛擬機(jī)中實現(xiàn),為256位字大小的鍵值存儲。它在合同的執(zhí)行期間可以使用值類型或者引用類型進(jìn)行讀取或者寫入。將腳本編譯成以太坊虛擬機(jī)代碼之后,必須由外部賬戶發(fā)送一個特殊的報文來完成合約的創(chuàng)建。在以太坊中存儲數(shù)據(jù)的第二種方法是日志存儲,也被稱為事件。其用途就是發(fā)送返回值或者日志事件到一個特定用戶。實驗使用兩種方法結(jié)合的存儲數(shù)據(jù)方式,提高實驗的存儲效率及精確度。以太坊區(qū)塊鏈上的智能合約允許數(shù)據(jù)作為變量直接存儲在這些合約中。因為區(qū)塊鏈不易篡改的屬性,可以保證這些數(shù)據(jù)只能使用智能合約的功能進(jìn)行更改,并且每次和智能合約的交互都會被看作一個交易記錄在區(qū)塊鏈上。根據(jù)區(qū)塊鏈和智能合約的這些屬性,確保數(shù)據(jù)完整性的最簡單辦法就是將所有數(shù)據(jù)通過智能合約直接存儲在區(qū)塊鏈上。

        圖3為部署智能合約的過程。首先啟動一個以太坊節(jié)點(diǎn)(如Geth),使用智能合約編程語言(如Solidity)編寫智能合約(后綴為.sol)。用solc編譯器將.sol合約代碼編譯成以太坊虛擬機(jī)字節(jié)碼。將編譯好的合約代碼部署到以太坊區(qū)塊鏈,需要消耗燃料,并且需要合約發(fā)起用戶使用自己的外部所有賬戶對將要部署的合約進(jìn)行簽名,通過淘金者確認(rèn)后,將合約代碼存于以太坊區(qū)塊鏈上。在這一步中,用戶可獲得合約的地址,以及調(diào)用合約所需的接口,以便之后使用。編譯智能合約過程如圖4所示,部署合約過程如圖5所示。

        圖3 部署智能合約的過程

        圖4 編譯合約

        圖5 部署合約

        具體實現(xiàn)的智能合約包含一個存儲函數(shù),該函數(shù)允許通過數(shù)據(jù)標(biāo)識包含的元數(shù)據(jù)傳遞給此函數(shù)并存儲到區(qū)塊鏈中,其中元數(shù)據(jù)dsign,timestamp,hash,owner分別代表數(shù)字簽名,時間戳,哈希值和數(shù)據(jù)所有者。運(yùn)行結(jié)果如圖6所示。

        contract DataIntegrity{

        function put(bytes dsign,bytes hash,uint256 timestamp) public returns (bytes) {

        address owner=msg.sender;

        bytes32 message=prefixed(keccak256(hash,timestamp));

        address recovered=recoverSigner(message,dsign);

        require(recovered==msg.sender);

        identifiers.push(Identifier({

        dsign:dsign,

        timestamp:timestamp,

        hash:hash,

        owner:owner

        }));

        }

        圖6 數(shù)據(jù)存儲階段的實驗結(jié)果

        3.2 數(shù)據(jù)完整性驗證階段

        智能合約包含一個驗證函數(shù),該函數(shù)允許通過將標(biāo)識符和哈希值傳遞給此函數(shù)并將它們與存儲的值進(jìn)行比較來驗證存儲的數(shù)據(jù)。

        contract DataIntegrity {

        function get(bytes dsign) public returns (bytes,uint256,bytes,address) {

        uint len=identifiers.length;

        for(uint i=0;i

        bytes memory sig=identifiers[i].dsign;

        if(isEqual(sig,dsign)) {

        return(identifiers[i].dsign,identifiers[i].timestamp,identifiers[i].hash,identifiers[i].owner);

        }

        }

        //bytes dsign;

        uint256 timestamp;

        bytes hash;

        address owner;

        return(dsign,timestamp,hash,owner);

        }

        }

        }

        節(jié)點(diǎn)通過唯一標(biāo)識dsign作為輸入,輸出與此標(biāo)識相關(guān)聯(lián)的數(shù)據(jù),其中與存儲數(shù)據(jù)相對比可以看出,存儲階段和驗證階段的數(shù)據(jù)完全相同,結(jié)果如圖7所示。

        但是如果以一個錯誤的標(biāo)識作為輸入,經(jīng)過對比數(shù)據(jù),此數(shù)據(jù)無法通過數(shù)據(jù)完整性驗證,結(jié)果如圖8所示。

        以上實驗可以看出,基于區(qū)塊鏈的數(shù)據(jù)完整性驗證技術(shù)可以保證數(shù)據(jù)的存儲和驗證的正確性,從而進(jìn)一步確保數(shù)據(jù)的完整性。

        圖7 數(shù)據(jù)驗證階段的實驗結(jié)果

        圖8 數(shù)據(jù)驗證階段的測試結(jié)果

        4 結(jié)束語

        區(qū)塊鏈提供有關(guān)數(shù)據(jù)完整性的可信特性,使得區(qū)塊鏈成為一項引人注目的技術(shù)。使用區(qū)塊鏈來解決數(shù)據(jù)完整性的威脅似乎是一種自然的選擇。區(qū)塊鏈的去中心化、分布式、持久性、不可篡改等屬性成為數(shù)據(jù)完整性驗證的主要關(guān)注點(diǎn)。文中提出的基于區(qū)塊鏈的數(shù)據(jù)完整性驗證解決方案理論上證明該方案可以保證數(shù)據(jù)完整性,并在以太坊平臺上進(jìn)行實驗驗證,結(jié)果表明基于區(qū)塊鏈的數(shù)據(jù)完整性驗證的結(jié)構(gòu)確保了數(shù)據(jù)的完整性。但是依舊要考慮利用智能合約存儲到區(qū)塊鏈中的效率,以及實驗的驗證規(guī)模較小,希望未來的工作可以對此有所優(yōu)化。在未來的工作中,將計劃設(shè)計和構(gòu)建一個應(yīng)用程序,以使用豐富的數(shù)據(jù)存儲格式支持更加復(fù)雜的數(shù)據(jù)完整性驗證,并借助強(qiáng)大的評估模型,確定應(yīng)用程序的安全性。

        猜你喜歡
        智能
        智能與自主
        讓紙變得智能
        一種智能微耕機(jī)的研發(fā)
        智能制造 反思與期望
        智能前沿
        文苑(2018年23期)2018-12-14 01:06:06
        智能前沿
        文苑(2018年19期)2018-11-09 01:30:14
        智能前沿
        文苑(2018年17期)2018-11-09 01:29:26
        智能前沿
        文苑(2018年21期)2018-11-09 01:22:32
        智能制造·AI未來
        商周刊(2018年18期)2018-09-21 09:14:46
        爭渡智能石化
        能源(2018年4期)2018-05-19 01:53:44
        亚洲精品一区二区在线免费观看| 国产成人免费a在线视频| 97无码人妻一区二区三区蜜臀| 国产精品又爽又粗又猛又黄 | 日本亚洲国产精品久久| 国产精品国产三级国av在线观看| 夜夜综合网| 无码h黄动漫在线播放网站| 黑人巨大精品欧美在线观看| 亚洲综合网一区二区三区| 视频女同久久久一区二区| 无码人妻一区二区三区在线| 野外性史欧美k8播放| 美女熟妇67194免费入口| 好看的国内自拍三级网站| 亚洲天堂一区av在线| av在线亚洲欧洲日产一区二区| 亚洲中文字幕无码卡通动漫野外| 国产精品日本中文在线| 人人澡人人妻人人爽人人蜜桃麻豆| 97夜夜澡人人爽人人喊中国片 | 26uuu欧美日本在线播放| 日本精品一级二区三级| 亚洲性无码一区二区三区| 无码欧亚熟妇人妻AV在线外遇| 国产综合一区二区三区av| 中文字幕精品一区久久| 99精品国产一区二区三区a片| 97中文字幕在线观看| 日本人妻高清免费v片| 日韩av无码久久一区二区| 男女啪啪无遮挡免费网站| 中文字幕不卡高清免费| 青青草视频在线播放观看| 蜜桃视频在线观看免费亚洲 | 国产自国产自愉自愉免费24区| 又大又紧又粉嫩18p少妇| 四虎影视永久在线精品| 亚洲国产一区二区三区,| 黄色av亚洲在线观看| 三男一女吃奶添下面|