• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

    2020-01-10 06:38:32毛燕琴沈蘇彬
    計算機技術(shù)與發(fā)展 2020年1期
    關(guān)鍵詞:以太數(shù)字簽名哈希

    魏 艷,毛燕琴,沈蘇彬

    (南京郵電大學(xué) 計算機學(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ā)表了一篇名為《比特幣:一種點對點的電子現(xiàn)金系統(tǒng)》的技術(shù)白皮書[1],具體闡述了交易、時間戳服務(wù)器、工作量證明、網(wǎng)絡(luò)、加密、區(qū)塊鏈技術(shù)等基于互聯(lián)網(wǎng)的、去中心的電子貨幣框架的重要理念,并且隨后上線了比特幣的系統(tǒng)。在比特幣的概念中,區(qū)塊鏈被稱為比特幣交易的公共賬本。區(qū)塊鏈的去中心化、分布式、持久性、不可篡改等屬性成為區(qū)塊鏈應(yīng)用迅速發(fā)展的主要動力,也成為具有隱私保護應(yīng)用需求的數(shù)據(jù)完整性驗證的主要關(guān)注焦點。

    文中提出了面向區(qū)塊鏈數(shù)據(jù)完整性驗證的區(qū)塊鏈結(jié)構(gòu);提出了基于去中心化時間戳的數(shù)據(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ù),這些缺乏完整性保護的物聯(lián)網(wǎng)數(shù)據(jù)會對物聯(lián)網(wǎng)應(yīng)用造成極大的危害。區(qū)塊鏈提供的去中心化的、匿名信任管理機制,無需將數(shù)據(jù)傳遞到網(wǎng)絡(luò)服務(wù)器就可以驗證數(shù)據(jù)的完整性,這樣使得區(qū)塊鏈成為目前解決具有隱私保護需求的數(shù)據(jù)完整性問題的一種優(yōu)選方法。數(shù)據(jù)完整性是指維護和確保數(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é)議、激勵機制、可信時間戳,以及已有的數(shù)據(jù)完整性驗證機制。

    1.1 區(qū)塊鏈概述

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

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

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

    1.2 共識協(xié)議

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

    1.3 激勵機制

    面向區(qū)塊鏈數(shù)據(jù)完整性驗證的區(qū)塊鏈結(jié)構(gòu)模仿比特幣的激勵機制。通過對淘金者提供獎勵,在保持去中心化的同時利用自我利益的力量驅(qū)動區(qū)塊鏈網(wǎng)絡(luò)的高速發(fā)展。比特幣系統(tǒng)對區(qū)塊的創(chuàng)建者提供了比特幣的激勵,對驗證交易的一方也提供了比特幣的激勵。區(qū)塊中的第一筆交易會產(chǎn)生一個新的比特幣獎勵給區(qū)塊的創(chuàng)建者。這會激勵節(jié)點驗證交易,然后將比特幣投入流通領(lǐng)域,因為沒有中央機構(gòu)發(fā)布比特幣。第一筆交易稱為創(chuàng)幣(coinbase)交易。使用這種方法,可以激勵節(jié)點保持誠實。比特幣網(wǎng)絡(luò)大約10分鐘產(chǎn)生一個區(qū)塊。除了基于區(qū)塊創(chuàng)建產(chǎn)生的獎勵,節(jié)點通過驗證交易也會被獎勵比特幣。這種將新區(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ù)的不變性有很強的保證,并且隨著時間的推移這個保證更強[9-10]。這個保證使得區(qū)塊鏈很適用于時間戳應(yīng)用程序,因為它們保證了數(shù)據(jù)在未來不會發(fā)生變化。區(qū)塊鏈可以說是一個去中心化的時間戳服務(wù)器技術(shù)[11-13],該技術(shù)被比特幣數(shù)字貨幣系統(tǒng)引進。時間戳證明數(shù)據(jù)在某個特定時間點肯定存在,例如報紙就可以充當(dāng)一個時間證明。在區(qū)塊里,每個區(qū)塊都包含有一個時間戳,這個時間戳是淘金者根據(jù)本地系統(tǒng)時間設(shè)定的,表明區(qū)塊被成功挖掘的時間。區(qū)塊頭中包含的時間戳可以確保區(qū)塊的順序,有效預(yù)防對區(qū)塊中數(shù)據(jù)的篡改和偽造??尚艜r間戳是驗證在某一時間點未改變的數(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)點:(1)時間戳的去中心化的密碼完整性驗證的過程。(2)高度激勵計算節(jié)點致力于去中心化過程。區(qū)塊鏈不受限于單個實體,而是由加入到加密貨幣網(wǎng)絡(luò)中的所有計算節(jié)點進行維護,任何人都可以公開訪問。

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

    傳統(tǒng)的方法都是使用中心化的方式為存儲的數(shù)據(jù)完整性驗證指明了光明的未來,但是這些都是依賴第三方進行數(shù)據(jù)完整性驗證的方法,存在的主要問題是第三方仍不可信。相對于傳統(tǒng)的數(shù)據(jù)完整性驗證,文中利用區(qū)塊鏈技術(shù),拋棄第三方審查機構(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進行標(biāo)識[19]。但是它們都依賴于某些信任方或者權(quán)威機構(gòu),而且不能保證隨著時間的推移可以檢索到相同的資源。所以在不被信任的環(huán)境下,數(shù)字資源應(yīng)該通過可以唯一識別內(nèi)容的機制進行識別,也就是數(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)引進去中心化的概念,具體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í)行代碼的機制,為了淘金者執(zhí)行代碼消耗的計算工作,以太坊會支付成比例的費用。淘金者執(zhí)行此交易的交易費是執(zhí)行代碼實際消耗的燃料乘以燃料單價。如果某些執(zhí)行需要燃料比還要高,則執(zhí)行將以異常的形式終止,狀態(tài)將恢復(fù)為初始狀態(tài),就像一切沒有發(fā)生一樣。在這種情況下,發(fā)件人仍然必須向淘金者支付所有限定的燃料量,作為對抗資源枯竭攻擊的對策??傊?,執(zhí)行代碼需要使用燃料,這些燃料由外部賬戶使用以太幣購買。燃料的成本實際上是一個交易費用,鼓勵淘金者去執(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)換率,每個燃料單位的價格。

    最大燃料量:這筆交易花費的燃料總量,也就是當(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ù)字段)?;谧约旱漠a(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é)點需要使安全哈希函數(shù)對數(shù)據(jù)進行哈希運算,得到數(shù)據(jù)的哈希值。得到的結(jié)果記為hash。

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

    (5)節(jié)點和數(shù)據(jù)完整性智能合約進行交互,通過使用數(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。以太坊平臺運行在Ubuntu16.04LTS 64位操作系統(tǒng)上。智能合約由solidity語言實現(xiàn),區(qū)塊鏈環(huán)境使用以太坊solidity編程語言開發(fā)框架truffle和可視化私有鏈客戶端ganache。

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

    圖3為部署智能合約的過程。首先啟動一個以太坊節(jié)點(如Geth),使用智能合約編程語言(如Solidity)編寫智能合約(后綴為.sol)。用solc編譯器將.sol合約代碼編譯成以太坊虛擬機字節(jié)碼。將編譯好的合約代碼部署到以太坊區(qū)塊鏈,需要消耗燃料,并且需要合約發(fā)起用戶使用自己的外部所有賬戶對將要部署的合約進行簽名,通過淘金者確認(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ù)所有者。運行結(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ù)并將它們與存儲的值進行比較來驗證存儲的數(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é)點通過唯一標(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ù)的存儲和驗證的正確性,從而進一步確保數(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)注點。文中提出的基于區(qū)塊鏈的數(shù)據(jù)完整性驗證解決方案理論上證明該方案可以保證數(shù)據(jù)完整性,并在以太坊平臺上進行實驗驗證,結(jié)果表明基于區(qū)塊鏈的數(shù)據(jù)完整性驗證的結(jié)構(gòu)確保了數(shù)據(jù)的完整性。但是依舊要考慮利用智能合約存儲到區(qū)塊鏈中的效率,以及實驗的驗證規(guī)模較小,希望未來的工作可以對此有所優(yōu)化。在未來的工作中,將計劃設(shè)計和構(gòu)建一個應(yīng)用程序,以使用豐富的數(shù)據(jù)存儲格式支持更加復(fù)雜的數(shù)據(jù)完整性驗證,并借助強大的評估模型,確定應(yīng)用程序的安全性。

    猜你喜歡
    以太數(shù)字簽名哈希
    以太極為旗,開啟新時代“黃河大合唱”
    少林與太極(2023年7期)2023-08-25 05:27:52
    淺析計算機安全防護中數(shù)字簽名技術(shù)的應(yīng)用
    車易鏈:做汽車業(yè)的“以太坊”
    汽車觀察(2018年9期)2018-10-23 05:46:24
    基于數(shù)字簽名的QR碼水印認(rèn)證系統(tǒng)
    基于OpenCV與均值哈希算法的人臉相似識別系統(tǒng)
    基于維度分解的哈希多維快速流分類算法
    計算機工程(2015年8期)2015-07-03 12:20:04
    百通推出入門級快速工業(yè)以太網(wǎng)絡(luò)交換器系列
    以太互聯(lián) 高效便捷 經(jīng)濟、可靠、易用的小型可編程控制器
    自動化博覽(2014年6期)2014-05-29 09:40:16
    基于同態(tài)哈希函數(shù)的云數(shù)據(jù)完整性驗證算法
    計算機工程(2014年6期)2014-02-28 01:25:40
    基于數(shù)字簽名和HSM的數(shù)據(jù)庫篡改檢測機制
    仲巴县| 衡山县| 读书| 视频| 敦化市| 濮阳县| 正定县| 七台河市| 泉州市| 微山县| 石景山区| 韩城市| 改则县| 新余市| 罗山县| 利辛县| 胶州市| 女性| 宁陕县| 定陶县| 鄂伦春自治旗| 米脂县| 青川县| 鹤壁市| 新晃| 孝感市| 汝南县| 邓州市| 福鼎市| 宝坻区| 潼南县| 高淳县| 鄯善县| 南澳县| 梁山县| 凭祥市| 萨迦县| 孝义市| 德庆县| 朝阳县| 宁南县|