国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種基于區(qū)塊鏈的可信數(shù)據(jù)共享解決方案

2020-11-14 11:31:52沈蘇彬
計算機技術(shù)與發(fā)展 2020年9期
關(guān)鍵詞:數(shù)字簽名

汪 菲,沈蘇彬

(1.南京郵電大學(xué) 計算機學(xué)院,江蘇 南京 210046; 2.南京郵電大學(xué) 通信與網(wǎng)絡(luò)技術(shù)國家工程研究中心,江蘇 南京 210046)

0 引 言

共享數(shù)據(jù)的采集、傳遞、存儲過程中,如若沒有嚴(yán)密的防范措施,就可能存在數(shù)據(jù)假冒、被偽造的可能性。采集、傳遞數(shù)據(jù)過程中,從手工記錄到使用無線電遙測等高效方式[1],再到數(shù)字跟蹤設(shè)備[2],誤差率的驟降顯著地降低了偽造數(shù)據(jù)的可能性。如今,強大的計算和存儲能力[3]使得用戶更愿意依托云來存儲或共享數(shù)據(jù),借助會議密鑰協(xié)商協(xié)議加密數(shù)據(jù)所有者的共享數(shù)據(jù)[4],使云中多個參與者能夠自由成組共享數(shù)據(jù),但大量信息交互和高度集中的計算資源使云面臨著嚴(yán)峻的安全挑戰(zhàn)[5],例如,云系統(tǒng)可能會受到惡意用戶或云提供商的攻擊。

如何在數(shù)據(jù)共享的同時還能保證數(shù)據(jù)存儲更安全、數(shù)據(jù)信息更保密就成為新的核心問題。研究發(fā)現(xiàn),數(shù)據(jù)越來越多地發(fā)生在與所有者相關(guān)的網(wǎng)絡(luò)服務(wù)器站點上,即數(shù)據(jù)所有者和訪問者之間。集中查詢數(shù)據(jù)[6]是不經(jīng)濟的,不僅要解決數(shù)據(jù)龐大、分布式管理等問題,還要解決數(shù)據(jù)的安全性和隱私性[7-8]等問題,而在數(shù)據(jù)共享中,雙方成為了數(shù)據(jù)共享的最小范圍。2008年,中本聰發(fā)表了一篇名為《比特幣:一種點對點的電子現(xiàn)金系統(tǒng)》的技術(shù)白皮書[9],具體闡述了交易、時間戳服務(wù)器、工作量證明、網(wǎng)絡(luò)、加密、區(qū)塊鏈技術(shù)等去中心化電子貨幣框架的重要理念,并上線了比特幣的系統(tǒng)。區(qū)塊鏈技術(shù)源于此系統(tǒng),是比特幣的底層數(shù)據(jù)存儲技術(shù),也是近年來最具有革命性的技術(shù)之一。區(qū)塊鏈技術(shù)被稱為實現(xiàn)比特幣交易的公共賬本,其主要特點就是去中心化[10],由網(wǎng)絡(luò)節(jié)點共同維護這一公共賬本,且區(qū)塊上的數(shù)據(jù)也具有不可篡改、撤銷的特性,由此區(qū)塊鏈技術(shù)成為共享數(shù)據(jù)達(dá)到去中心化、增強共享數(shù)據(jù)安全性[11]和隱私性的關(guān)注點。

文中提出利用區(qū)塊鏈的自身特性實現(xiàn)數(shù)據(jù)共享的去中心化,將區(qū)塊鏈技術(shù)應(yīng)用到數(shù)據(jù)共享技術(shù)中。首先要解決的問題是如何設(shè)計基于區(qū)塊鏈的共享數(shù)據(jù)的存儲結(jié)構(gòu),其次是如何使區(qū)塊形成鏈,最后是基于區(qū)塊鏈如何實現(xiàn)數(shù)據(jù)共享,提出去中心化的數(shù)據(jù)共享機制。最終形成將共享數(shù)據(jù)的信息存儲到區(qū)塊鏈上實現(xiàn)數(shù)據(jù)共享的解決方案,并在以太坊平臺上模擬真實場景。

主要貢獻(xiàn)如下:

(1)提出了面向區(qū)塊鏈的共享數(shù)據(jù)的塊結(jié)構(gòu)。

(2)提出了去中心化的數(shù)據(jù)共享機制,利用區(qū)塊鏈的自身特性實現(xiàn)數(shù)據(jù)共享的去中心化。

(3)在以太坊平臺上模擬真實的場景,設(shè)計了去中心化、可信數(shù)據(jù)共享的智能合約并具體實現(xiàn),基于區(qū)塊鏈的數(shù)據(jù)共享模型增強了數(shù)據(jù)的隱私性和安全性。

1 基于區(qū)塊鏈的數(shù)據(jù)共享結(jié)構(gòu)設(shè)計

目前所提及的是區(qū)塊鏈技術(shù)不再是單純的底層數(shù)據(jù)存儲技術(shù),它還包含了對等網(wǎng)絡(luò)技術(shù)、加密和數(shù)字簽名技術(shù)、共識協(xié)議和實現(xiàn)機制、數(shù)據(jù)完整性存儲等多個方面綜合的技術(shù),區(qū)塊鏈技術(shù)可以實現(xiàn)可信數(shù)據(jù)公開、可信數(shù)據(jù)回溯、可信數(shù)據(jù)管理的設(shè)計方法。由于基于云的數(shù)據(jù)共享技術(shù)涉及第三方的參與,可能會降低共享數(shù)據(jù)的安全性和隱私性,文中提出了一種基于區(qū)塊鏈的去中心化數(shù)據(jù)共享解決方案,去除第三方的參與,設(shè)計了一種去中心化、可信數(shù)據(jù)共享的智能合約,合約中包括共享數(shù)據(jù)的存儲塊結(jié)構(gòu),共享數(shù)據(jù)的區(qū)塊鏈結(jié)構(gòu)。

1.1 共享數(shù)據(jù)存儲塊結(jié)構(gòu)

一般來說,區(qū)塊鏈?zhǔn)怯啥鄠€節(jié)點共同參與、帶有時間戳的塊鏈。它是由一串按照密碼學(xué)方法產(chǎn)生的數(shù)據(jù)塊和數(shù)據(jù)包組成,即區(qū)塊。對每個區(qū)塊數(shù)據(jù)信息都自動加蓋時間戳,從而計算出一個數(shù)據(jù)加密數(shù)值,即哈希值。每一區(qū)塊都包含塊頭(Header)和塊體(Body)兩個部分,塊頭包含前一個區(qū)塊的哈希值、當(dāng)前區(qū)塊的時間戳、一次性數(shù)、難度系數(shù)、Merkle根哈希值;塊體是采用二叉樹的形式存儲交易數(shù)據(jù),值得注意的是:這里并不是存儲所有的交易數(shù)據(jù),而是存儲每筆交易通過加密算法得出的一個哈希序列,將交易的哈希序列作為葉子節(jié)點按二叉樹形式加密存儲得到一個根值,而這個值就是Merkle根哈希值。時間戳是斷定相鄰區(qū)塊之間繼承關(guān)系的時間標(biāo)簽,是用來保證區(qū)塊的有序性,并且有效地防止了對區(qū)塊數(shù)據(jù)進(jìn)行篡改和欺騙行為。一次性數(shù)(Nounce)是一個隨機哈希序列的值,用來完成工作量證明。難度系數(shù)代表了驗證區(qū)塊的工作量,可以自行動態(tài)調(diào)整的同時保證在預(yù)期時間內(nèi)被計算出的時間控制。

圖1是詳細(xì)的區(qū)塊結(jié)構(gòu)。

使用密碼哈希函數(shù)Keccak256[12]實現(xiàn)數(shù)字簽名來進(jìn)行節(jié)點的真實性身份驗證。數(shù)字簽名是通過數(shù)據(jù)名稱、IP地址、端口號的數(shù)據(jù)信息與私鑰共同生成的。數(shù)字簽名需要一對密鑰(公鑰和私鑰),而密鑰來自于橢圓曲線算法[13]。數(shù)字簽名用于簽署共享的報文數(shù)據(jù)。交易[14]是指數(shù)據(jù)上傳與下載、變更網(wǎng)絡(luò)狀態(tài)的過程。在去中心化的數(shù)據(jù)共享解決方案中,共享數(shù)據(jù)的存儲被視為交易。Merkle樹[15]是用來驗證區(qū)塊中獨一無二的交易,如果交易數(shù)據(jù)的任何內(nèi)容有一點點的變化,哈希序列都會產(chǎn)生很大的變化。用戶可通過Merkle根哈希值追溯到數(shù)據(jù)共享區(qū)塊鏈中的任意一項共享記錄以及當(dāng)前狀態(tài),實現(xiàn)共享數(shù)據(jù)的追溯。可信的時間戳用于記錄當(dāng)前區(qū)塊數(shù)據(jù)的寫入時間,證明了某些數(shù)據(jù)在某個時間存在某個狀態(tài),并且之后沒有被更改。通過使用區(qū)塊鏈技術(shù)保證和驗證數(shù)據(jù)的完整性,增強共享數(shù)據(jù)的不可篡改性、隱私性。

通過使用數(shù)字簽名,可以抵御惡意節(jié)點的IP欺騙和Sybil攻擊。由于每個節(jié)點能夠通過數(shù)字簽名的加密、解密過程來證明其他節(jié)點的身份,因此有效防止了將數(shù)據(jù)名稱與惡意修改的IP地址組合,從而對壞節(jié)點進(jìn)行IP欺騙。同樣,使用數(shù)字簽名能夠防御Sybil攻擊。因為簽名是由唯一私鑰創(chuàng)建的,當(dāng)作為許多偽造節(jié)點發(fā)送簽名時,誠實節(jié)點通過使用偽造節(jié)點的公鑰解密簽名而得到結(jié)果是錯誤的,因此有效防止了單一節(jié)點具有多個身份標(biāo)識。

支持基于區(qū)塊鏈進(jìn)行共享數(shù)據(jù)發(fā)布和共享數(shù)據(jù)追溯的兩個重要部分就是時間戳和哈希樹根值。在區(qū)塊結(jié)構(gòu)中,獲得新區(qū)塊開采權(quán)的礦工在打包數(shù)據(jù)塊時,會在區(qū)塊頭中加蓋時間戳,用于記錄當(dāng)前區(qū)塊數(shù)據(jù)的寫入時間。時間戳可以作為存在性證明的重要參數(shù),它能夠證實特定數(shù)據(jù)必然在某特定時刻是的確存在的,區(qū)塊鏈在很大程度上保證了存儲的共享數(shù)據(jù)不變性,并且隨著時間的推移這個保證越來越強,因而適用于時間戳應(yīng)用程序。而區(qū)塊體中的哈希樹將會對每一筆交易進(jìn)行數(shù)字簽名并加蓋時間戳,最終由哈希算法得出一個哈希樹根植存儲于區(qū)塊頭中,用戶可以通過該值追溯到數(shù)據(jù)共享區(qū)塊鏈中的任意一項共享記錄與當(dāng)前狀態(tài),實現(xiàn)共享數(shù)據(jù)的追溯。

用戶的原始數(shù)字?jǐn)?shù)據(jù)是巨大的,可以是千兆字節(jié)甚至太字節(jié),一般使用URIs或DOIs進(jìn)行標(biāo)識[16]。若原始數(shù)字?jǐn)?shù)據(jù)直接發(fā)布,不僅不能保證其所有權(quán),且對網(wǎng)絡(luò)來說也是一個巨大的負(fù)擔(dān)。元數(shù)據(jù)[17]是一種新的數(shù)據(jù)類型,定義元數(shù)據(jù)的格式可完全描述原始數(shù)據(jù),且顯著地減輕網(wǎng)絡(luò)負(fù)擔(dān)。一般情況下,元數(shù)據(jù)的功能是作為描述性信息存在的?,F(xiàn)許多系統(tǒng)支持各種形式的元數(shù)據(jù)管理和數(shù)字資源保存,但前提是數(shù)據(jù)庫所有者是可信任的。在不受信任的環(huán)境下,區(qū)塊鏈技術(shù)依靠加密技術(shù)和共識協(xié)議提供持久的、不可篡改證明的公共賬本,很好地克服了這個問題。因為數(shù)據(jù)標(biāo)識具有唯一性,數(shù)字資源可通過唯一識別內(nèi)容的機制進(jìn)行識別,且很難推斷出與其相關(guān)的任何內(nèi)容。

文中提出的實現(xiàn)方法是在智能合約中存儲一些與源數(shù)據(jù)相關(guān)的元數(shù)據(jù)以及數(shù)據(jù)所有者可共享的相關(guān)必要數(shù)據(jù)信息。區(qū)塊中的完整的數(shù)據(jù)不是數(shù)據(jù)本身,而是數(shù)據(jù)所有者提供給訪問者的一個URL,或者是一個ftp入口,數(shù)據(jù)本身是存儲在數(shù)據(jù)所有者的本地服務(wù)器上,共享數(shù)據(jù)的鏈接入口信息直接存儲在區(qū)塊上。該方法通過在智能合約中增加一個Data結(jié)構(gòu)實現(xiàn),這個結(jié)構(gòu)包含一些附加信息也就是元數(shù)據(jù),有共享數(shù)據(jù)的關(guān)鍵詞(bytes name)、完整共享數(shù)據(jù)的鏈接入口(bytes hash)、數(shù)字簽名(bytes dsign)、時間戳(uint256 timestamp)、數(shù)據(jù)所有者的地址(address owner)。具體定義如下(使用solidity語言):

struct Data{

bytes name;

bytes hash;

bytes dsign;

uint256 timestamp;

address owner;

}

1.2 共享數(shù)據(jù)的區(qū)塊鏈結(jié)構(gòu)

基于區(qū)塊鏈的共享數(shù)據(jù)存儲實際上就是共享數(shù)據(jù)形成區(qū)塊后的上鏈過程。共享數(shù)據(jù)存儲交易通過數(shù)字簽名的驗證后加入到當(dāng)前區(qū)塊中,當(dāng)前區(qū)塊經(jīng)過工作量證明后,添加到區(qū)塊鏈的尾部。以太坊采用工作量證明機制來實現(xiàn)共識協(xié)議,即所謂的“挖礦”,負(fù)責(zé)新區(qū)塊的生成,因為區(qū)塊鏈副本存在于大量的節(jié)點中。共享數(shù)據(jù)區(qū)塊鏈的結(jié)構(gòu)如圖2所示。

每個共享數(shù)據(jù)的節(jié)點通過計算一次性數(shù)(Nounce)來爭奪記賬權(quán),求得正確的數(shù)值以生成區(qū)塊的能力是節(jié)點計算力的具體表現(xiàn)。共享數(shù)據(jù)存儲在區(qū)塊上,所有的節(jié)點都要同意其內(nèi)容,并且這個內(nèi)容是不可更改、持久的[18],工作量證明機制的本質(zhì)就是一節(jié)點一票,“大多數(shù)”的決定表示為最長的鏈,因為最長的鏈包含了最大的工作量。如果大多數(shù)的節(jié)點被誠實節(jié)點控制,那么誠實節(jié)點將以最快的速度延長,并超越其他競爭鏈條;如果想要篡改已出現(xiàn)的區(qū)塊,攻擊者必須重新完成該區(qū)塊的工作量,并完成該區(qū)塊之后的所有區(qū)塊的工作量,最終還要趕上并超越誠實節(jié)點的工作量,而這個過程代價巨大。區(qū)塊中的難度系數(shù)代表了驗證區(qū)塊的工作量,可以自行動態(tài)調(diào)整的同時保證在預(yù)期時間內(nèi)被計算出的時間控制。區(qū)塊鏈的安全性通過工作量證明得以保證。主觀上,挖礦節(jié)點獲取了獎勵;客觀上,區(qū)塊鏈基于此規(guī)則得到了持續(xù)穩(wěn)定的共同維護。

當(dāng)共享數(shù)據(jù)需要更新時,數(shù)據(jù)所有者應(yīng)重新提交數(shù)據(jù)存儲交易,鏈里的記錄內(nèi)容是無法更改和刪除的,只能新增記錄。比特幣系統(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é)點通過驗證交易也會被獎勵比特幣。智能合約的執(zhí)行是需要消耗一定的燃料(gas),共享數(shù)據(jù)形成的區(qū)塊成功上鏈會得到一定的gas,可理解為執(zhí)行代碼消耗的計算工作所給出相對應(yīng)的獎勵,即存在相應(yīng)的激勵機制,實際上gas就是交易的費用。如若當(dāng)前區(qū)塊執(zhí)行異常,區(qū)塊鏈狀態(tài)將恢復(fù)為初始狀態(tài),就像一切沒有發(fā)生一樣。

2 基于區(qū)塊鏈的數(shù)據(jù)共享機制設(shè)計

最初的第一代區(qū)塊鏈應(yīng)用案例——比特幣的成功,到后來第二代的區(qū)塊鏈發(fā)展重點在于注冊、驗證、合約或財產(chǎn),智能合約[14,19]的發(fā)展使得區(qū)塊鏈技術(shù)進(jìn)一步成長為一個可編程的平臺,它把業(yè)務(wù)規(guī)則轉(zhuǎn)化成在區(qū)塊鏈平臺自動執(zhí)行的代碼。當(dāng)一個預(yù)先編好的條件被觸發(fā)時,智能合約自動執(zhí)行相應(yīng)的合約條款,這個過程不需要人的干涉,也無法進(jìn)行干涉,除非改變智能合約的內(nèi)容。智能合約對外提供服務(wù)接口來處理數(shù)據(jù),智能合約編譯后會產(chǎn)生ABI,通過與智能合約交互可以實現(xiàn)共享數(shù)據(jù)的存儲和訪問請求與服務(wù)。

基于區(qū)塊鏈的數(shù)據(jù)共享機制中的智能合約記錄兩大主要信息:共享數(shù)據(jù)存儲Data類以及用于授權(quán)認(rèn)證的AuthoList類,該兩類在以太坊虛擬機中實現(xiàn)。Data類中,記錄區(qū)塊的具體信息,不同共享數(shù)據(jù)是以數(shù)組的方式存儲,記為Datas。用于共享數(shù)據(jù)存儲的store函數(shù)允許通過數(shù)據(jù)標(biāo)識包含的元數(shù)據(jù)傳遞給此函數(shù)并存儲到區(qū)塊鏈中,其中元數(shù)據(jù)包含共享數(shù)據(jù)關(guān)鍵詞,完整數(shù)據(jù)的鏈接入口,數(shù)據(jù)所有者的公鑰地址、數(shù)字簽名,數(shù)據(jù)的定價(可不定價)。節(jié)點通過使用keccak256算法聯(lián)合時間戳對共享數(shù)據(jù)關(guān)鍵詞,完整數(shù)據(jù)的鏈接入口,數(shù)據(jù)的定價這三者進(jìn)行加密計算從而得到基礎(chǔ)共享數(shù)據(jù)包,結(jié)果記為message。通過密碼哈希函數(shù)對完整數(shù)據(jù)的鏈接入口進(jìn)行哈希運算得到哈希值,并對這個哈希值進(jìn)行數(shù)字簽名,得到數(shù)據(jù)所有者的數(shù)字簽名dsign。利用去中心化時間戳,將共享數(shù)據(jù)的關(guān)鍵詞name、完整共享數(shù)據(jù)的鏈接入口hash、數(shù)字簽名dsign以及交易發(fā)生的時間戳timestamp和數(shù)據(jù)所有者owner都作為附加信息添加到Data結(jié)構(gòu)中。最后將這個結(jié)構(gòu)代替數(shù)據(jù)哈希值映射到智能合約中。同樣的,使用mapping類型的AuthoList以256位字節(jié)大小的鍵值存儲來進(jìn)行授權(quán)列表的存儲,它在合約的執(zhí)行期間可以使用值類型或者引用類型進(jìn)行讀取或者寫入,鍵是數(shù)據(jù)請求方的公鑰地址,值是數(shù)據(jù)請求方是否已經(jīng)被授權(quán)的布爾值。在無信任的環(huán)境下,數(shù)據(jù)請求者首次請求區(qū)塊鏈的共享數(shù)據(jù)需要通過AuthoList的驗證。

數(shù)據(jù)所有者A與數(shù)據(jù)請求者B共享數(shù)據(jù)時,首先要與B達(dá)成共識以制定約束(數(shù)據(jù)范圍等),即A已將共享的數(shù)據(jù)存儲在區(qū)塊鏈中。在基于區(qū)塊鏈的數(shù)據(jù)共享系統(tǒng)中,共享數(shù)據(jù)區(qū)塊成功上鏈后,系統(tǒng)中的數(shù)據(jù)庫會提取出區(qū)塊中A的公鑰地址和主題信息關(guān)鍵詞,B可以通過查詢此數(shù)據(jù)找到想要的數(shù)據(jù)信息。設(shè)定訪問者B已經(jīng)找到想要的共享數(shù)據(jù)信息,得到關(guān)鍵詞和數(shù)據(jù)所有者的公鑰地址。用于共享數(shù)據(jù)的訪問請求和服務(wù)的query函數(shù)允許B通過A的公鑰地址傳遞給此函數(shù)發(fā)送共享請求到區(qū)塊鏈中,區(qū)塊鏈驗證B是否已被授權(quán),即在AuthoList列表中查詢其布爾值是否為真。若找不到該數(shù)據(jù)或者布爾值為假,需要通過區(qū)塊鏈的身份驗證,在AuthoList中給予授權(quán)。若布爾值為真,輸出區(qū)塊中存儲的該數(shù)據(jù)所有者的共享數(shù)據(jù)信息,其中完整數(shù)據(jù)的鏈接入口是用B的公鑰通過不對稱加密算法進(jìn)行加密后而輸出的。當(dāng)B得到區(qū)塊的相關(guān)信息時,用自己的私鑰對加密的完整數(shù)據(jù)鏈接入口進(jìn)行解密。至此,A和B成功共享數(shù)據(jù)。

目前比特幣采用的公鑰加密算法是橢圓曲線加密法(ECC),共享數(shù)據(jù)的加密方式也采用了該方法。ECC是建立在基于橢圓曲線的離散對數(shù)問題上的密碼體制,它選定了一條橢圓曲線Ep(a,b),取橢圓曲線上的一點作為基點G,由一個私有密鑰k生成公開密鑰K=kG。A將共享數(shù)據(jù)鏈接入口的明文編碼到Ep(a,b)上一點M,并產(chǎn)生一個隨機整數(shù)r。計算點C1=M+rK;C2=rG,再將C1、C2傳給用戶B。用戶B接到信息后,計算C1-kC2,結(jié)果就是點M。因為C1-kC2=M+rK-k(rG),再對點M進(jìn)行解碼就可以得到明文。在這個加密通信中,如果有一個第三方H,他只能看到Ep(a,b)、K、G、C1、C2,而通過K、G求k或通過C2、G求r都是相對困難的,因此,H無法得到A、B間傳送的明文信息。相比較于RSA和DSA算法,ECC安全性更高,速度更快,占用存儲空間更小。

區(qū)塊鏈技術(shù)優(yōu)勢在于強容災(zāi)能力和防篡改機制,即數(shù)據(jù)不會丟失、信息不會被單方面修改。共享數(shù)據(jù)產(chǎn)生的交易是記錄在區(qū)塊鏈的側(cè)鏈上,共享數(shù)據(jù)存儲和共享數(shù)據(jù)交易的結(jié)構(gòu)不同,因此在上傳時不會存在上鏈錯誤的情況。最終表現(xiàn)為:對于數(shù)據(jù)本身來說,數(shù)據(jù)由數(shù)據(jù)所有者存儲和管理,即誰的數(shù)據(jù)誰控制;交易過程中,數(shù)據(jù)僅能被訪問者獲得,其他任何第三方無法獲取數(shù)據(jù)。對于交易雙方來說,訪問的數(shù)據(jù)要保證其真實性,即明確知道共享數(shù)據(jù)的所有權(quán)是由誰提供的;交易要保密,信息查詢或購買行為本身就是隱私,不能除雙方外的任何人或機構(gòu)知曉。

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

設(shè)計的去中心化、可信數(shù)據(jù)共享的智能合約包含了共享數(shù)據(jù)存儲階段,共享數(shù)據(jù)訪問請求和服務(wù)階段,最終完成雙方之間的數(shù)據(jù)共享。智能合約應(yīng)為雙方各自與區(qū)塊鏈進(jìn)行交互提供調(diào)用接口以完成各項功能。一旦智能合約被部署,其預(yù)定義的代碼就作為一個合約賬戶存在于網(wǎng)絡(luò)中,智能合約賬戶開放其預(yù)定義的接口函數(shù)供其他賬戶調(diào)用,在各節(jié)點驗證交易簽名后,根據(jù)交易參數(shù)執(zhí)行合約,對參與方和交易參數(shù)進(jìn)行驗證更改區(qū)塊鏈賬本。

3.1 智能合約的運行

文中選擇在以太坊平臺上進(jìn)行仿真和測試,選擇由solidity編程語言truffle框架下的webpack模版來完成可信數(shù)據(jù)共享的實驗和可視化私有鏈客戶端ganache。在寫自己的智能合約時要刪除contracts目錄下原有的ConvertLib.sol和MetaCoin.sol文件,編寫自己的DataSharing.sol文件。

首先要啟動一個以太坊節(jié)點(如Geth),使用智能合約編程語言(如Solidity)編寫智能合約(后綴為.sol)。通過編譯智能合約獲得應(yīng)用二進(jìn)制接口ABI和字節(jié)碼bytecode,ABI是賬戶和智能合約間交互的接口,bytecode是EVM可以執(zhí)行的字節(jié)碼。賬戶使用bytecode作為交易的參數(shù),廣播創(chuàng)建合約交易。智能合約的執(zhí)行同樣以交易的形式存在。賬戶通過ABI接口獲取合約,之后節(jié)點通過EVM虛擬機運行bytecode執(zhí)行智能合約的代碼邏輯,將運行的結(jié)果打包成交易存儲于區(qū)塊鏈中。將編譯好的合約代碼部署到以太坊區(qū)塊鏈中,這個過程需要消耗燃料,并且需要合約發(fā)起者使用自己的私鑰對合約進(jìn)行簽名,通過工作量證明驗證后,將合約代碼存于以太坊區(qū)塊鏈上。圖3表示去中心化、可信數(shù)據(jù)共享的智能合約部署成功,并且消費了一定的ETH。

圖3 智能合約部署結(jié)果

3.2 共享數(shù)據(jù)的存儲階段

實驗使用了一種將兩種存儲數(shù)據(jù)方法結(jié)合的方式。一種存儲數(shù)據(jù)方法是利用賬戶存儲數(shù)據(jù),另一種存儲數(shù)據(jù)方法是利用事件存儲數(shù)據(jù),也稱為日志存儲。這種結(jié)合提高實驗的存儲效率及精確度。以太坊區(qū)塊鏈上的智能合約允許數(shù)據(jù)作為變量直接存儲在合約中。區(qū)塊鏈中數(shù)據(jù)的不易篡改特性可保證數(shù)據(jù)的更改方式只能使用重新部署智能合約的方式進(jìn)行更改,并且每次和智能合約的交互都會被看作一個交易記錄在區(qū)塊鏈上。區(qū)塊鏈技術(shù)可安全地在雙方之間記錄交易,無需可信任的第三方機構(gòu),同時提供了一種使用可變的公鑰作為身份來保護隱私,而區(qū)塊鏈安全問題是通過工作量證明挖掘新的區(qū)塊來解決加密難題從而得到保證。

具體實現(xiàn)的智能合約包含一個store存儲函數(shù),該函數(shù)允許通過數(shù)據(jù)標(biāo)識包含的元數(shù)據(jù)傳遞給此函數(shù)并存儲到區(qū)塊鏈中,其中name、hash、dsign、timestamp、owner分別代表共享數(shù)據(jù)的主題信息關(guān)鍵詞、完整數(shù)據(jù)的鏈接入口、數(shù)字簽名、時間戳和數(shù)據(jù)所有者。運行結(jié)果如圖4所示。

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

contract DataSharing {

function store(bytes32 name,bytes hash,uint256 timestamp,bytes dsign) public returns (bytes) {

if(msg.sender!=owner)

throw;

address owner=msg.sender;

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

address recovered=recoverSigner(message, dsign);

require(recovered==msg.sender);

Datas.push(Data({

name:name,

hash:hash,

timestamp:timestamp,

owner:owner,

dsign:dsign

}));

Dsign(name,hash,timestamp,owner, dsign);

return dsign;

}

}

3.3 共享數(shù)據(jù)訪問請求和服務(wù)階段

智能合約包含一個共享數(shù)據(jù)訪問請求和服務(wù)階段,該階段具體分為兩部分:一部分是檢索,找到目標(biāo)數(shù)據(jù)所在的區(qū)塊,本論文的前提是根據(jù)共享數(shù)據(jù)的主題信息關(guān)鍵詞已找到所需共享信息的數(shù)據(jù)所有者的公鑰地址,在基于區(qū)塊鏈的數(shù)據(jù)共享平臺中,提供這樣的數(shù)據(jù)檢索模塊;另一部分是對區(qū)塊鏈發(fā)送數(shù)據(jù)訪問請求和服務(wù)。在訪問請求中數(shù)據(jù)所有者首先要驗證訪問者的身份,即在AuthoList中查看是否被授權(quán),如若已被授權(quán),則返回區(qū)塊中存儲的相應(yīng)共享數(shù)據(jù)信息,其中完整數(shù)據(jù)的鏈接入口是用訪問者的公鑰通過不對稱加密算法進(jìn)行加密后而輸出的。訪問者得到區(qū)塊的相關(guān)信息時,用自己的私鑰對加密的完整數(shù)據(jù)鏈接入口進(jìn)行解密。否則,要先對其進(jìn)行授權(quán),通過全網(wǎng)節(jié)點的驗證認(rèn)可而進(jìn)行授權(quán)。具體實現(xiàn)的智能合約包含一個query請求函數(shù),運行結(jié)果如圖5所示。

圖5 請求階段的實驗結(jié)果

function query(address owner) public returns(bytes32,bytes32,uint256,address,bytes){

bool autho=AuthoList[msg.sender];

if(autho==true){

uint len=Datas.length;

for(uint i=0;i

bytes memory sig=Datas[i].dsign;

if(isEqual(sig,dsign)){

return (Datas[i].name,recover(Datas[i].hash),Datas[i].timestamp, Datas[i].owner, Datas[i].dsign);

}

}

}else{

addAuthorize(msg.sender);

}

}

由以上實驗可以看出,共享數(shù)據(jù)的鏈接入口不再是原來的值,且其字節(jié)長度和公鑰地址長度是一致的,這是因為共享數(shù)據(jù)的鏈接入口數(shù)據(jù)用訪問者的公鑰進(jìn)行加密而形成。在授權(quán)情況下,請求方的數(shù)據(jù)請求報文能夠得到區(qū)塊中已經(jīng)存入的共享數(shù)據(jù)信息,也證實是能夠?qū)^(qū)塊鏈技術(shù)應(yīng)用到數(shù)據(jù)共享中,從而達(dá)到去中心化的目的。

4 結(jié)束語

區(qū)塊鏈的去中心化以及區(qū)塊上數(shù)據(jù)不可篡改的特性,可保證安全地記錄雙方之間交易而無需可信的第三方機構(gòu),這改變了基于云的數(shù)據(jù)共享模式。提出的基于區(qū)塊鏈的共享數(shù)據(jù)存儲區(qū)塊設(shè)計、共享數(shù)據(jù)的區(qū)塊鏈結(jié)構(gòu),以及基于區(qū)塊鏈的去中心化數(shù)據(jù)共享機制,通過設(shè)計一種去中心化、可信的智能合約在以太坊平臺上成功模擬真實場景。實驗表明,基于區(qū)塊鏈的數(shù)據(jù)共享實現(xiàn)了去中心化的目標(biāo),增強了數(shù)據(jù)的可信性與安全性,同時保證了數(shù)據(jù)的隱私性。但是針對信息檢索部分,當(dāng)前基本沒有任何區(qū)塊鏈項目支持用戶數(shù)據(jù)的自定義索引,但是從本質(zhì)上看沒有任何根據(jù)表明當(dāng)前的區(qū)塊鏈項目結(jié)構(gòu)無法在其上構(gòu)建通用索引能力(包括B樹索引、位圖索引、全文檢索等)。希望未來的工作可以對此有所優(yōu)化。這一點在未來的通用型區(qū)塊鏈項目中一定會被彌補的。

猜你喜歡
數(shù)字簽名
基于正交拉丁方理論的數(shù)字簽名分組批量驗證
交通運輸行業(yè)數(shù)字簽名系統(tǒng)的設(shè)計與實現(xiàn)分析
淺析計算機安全防護中數(shù)字簽名技術(shù)的應(yīng)用
數(shù)字簽名助力系統(tǒng)安全
基于數(shù)字簽名的QR碼水印認(rèn)證系統(tǒng)
數(shù)字簽名簡述
掌握方法用好數(shù)字簽名
個人電腦(2014年12期)2014-12-29 13:29:47
基于數(shù)字簽名和HSM的數(shù)據(jù)庫篡改檢測機制
基于JAVA的數(shù)字簽名設(shè)計與實現(xiàn)
復(fù)制數(shù)字簽名,巧妙偽裝病毒
锦州市| 霍山县| 铁岭县| 中卫市| 共和县| 娱乐| 曲麻莱县| 德庆县| 剑河县| 汉川市| 武平县| 延安市| 广昌县| 织金县| 女性| 科尔| 佛教| 突泉县| 辽阳市| 通州市| 桓台县| 钦州市| 漯河市| 浮梁县| 霍邱县| 石景山区| 镇原县| 儋州市| 金门县| 青海省| 霞浦县| 隆子县| 扬州市| 德昌县| 银川市| 松江区| 栾川县| 米林县| 工布江达县| 永丰县| 梅州市|