劉新,胡翔瑜,徐剛,陳秀波
(1.內(nèi)蒙古科技大學(xué) 信息工程學(xué)院,內(nèi)蒙古 包頭 014010;2.北方工業(yè)大學(xué) 信息學(xué)院,北京 100144;3.北京郵電大學(xué)網(wǎng)絡(luò)與交換技術(shù)國家重點(diǎn)實(shí)驗(yàn)室,北京 100876)
隨著區(qū)塊鏈技術(shù)的快速發(fā)展,人們對于區(qū)塊鏈隱私保護(hù)問題越來越重視,如何在區(qū)塊鏈上存儲(chǔ)數(shù)據(jù)并保護(hù)數(shù)據(jù)隱私成為熱點(diǎn)研究方向[1-2]?,F(xiàn)有研究主要集中于實(shí)現(xiàn)區(qū)塊鏈交易雙方身份和交易內(nèi)容的隱私保護(hù)[3-5],用戶將數(shù)據(jù)存儲(chǔ)在區(qū)塊鏈上,在便于交易和計(jì)算的同時(shí)還需解決數(shù)據(jù)管理和存儲(chǔ)空間問題。文獻(xiàn)[6]提出一種基于區(qū)塊鏈和代理重加密的數(shù)據(jù)共享方案,利用區(qū)塊鏈中的處理節(jié)點(diǎn)作為代理服務(wù)器并加密數(shù)據(jù),在確保數(shù)據(jù)安全的同時(shí)可抵抗合謀攻擊。文獻(xiàn)[7]設(shè)計(jì)一種鏈上-鏈下共同存儲(chǔ)方式,將存儲(chǔ)者的數(shù)據(jù)訪問地址以加密的形式存儲(chǔ)在鏈上,將用戶的大量數(shù)據(jù)存儲(chǔ)在鏈下,若查詢者需要訪問該用戶數(shù)據(jù),則需要被授予存儲(chǔ)者訪問令牌,并交予第三方獲得真正的地址,顯然該系統(tǒng)存在第三方泄漏數(shù)據(jù)地址和查詢者信息的風(fēng)險(xiǎn)。針對數(shù)據(jù)共享時(shí)存在數(shù)據(jù)泄漏的情況,文獻(xiàn)[8]提出一種可問責(zé)的數(shù)據(jù)共享方案(ADS),該方案利用不經(jīng)意傳輸(Oblivious Transfer,OT)和零知識證明,將接收方的私鑰隱藏在共享數(shù)據(jù)中,若接收方泄漏共享數(shù)據(jù),則發(fā)送方可以對其進(jìn)行問責(zé),從而獲取接收方的私鑰,但該方案存在發(fā)送方可能篡改數(shù)據(jù)的問題。文獻(xiàn)[9]建立一種基于鏈上-鏈下相結(jié)合的日志安全存儲(chǔ)與檢索模型,利用區(qū)塊鏈分布式存儲(chǔ)技術(shù),保證了數(shù)據(jù)的機(jī)密性和完整性,并通過鏈上索引的方式進(jìn)行數(shù)據(jù)檢索,然而該方案沒有解決用戶在檢索與傳輸數(shù)據(jù)時(shí)導(dǎo)致個(gè)人信息泄漏的問題。文獻(xiàn)[10]提出一種將醫(yī)療數(shù)據(jù)存儲(chǔ)在區(qū)塊鏈上的方案,并對數(shù)據(jù)共享、存儲(chǔ)、訪問和計(jì)算進(jìn)行隱私保護(hù)方面的評估和分析,同時(shí)構(gòu)建一個(gè)模塊化的混合隱私保護(hù)框架,該框架基于保護(hù)患者的隱私信息來管理不同類型的醫(yī)療數(shù)據(jù),對電子病例、消費(fèi)者基因數(shù)據(jù)等信息進(jìn)行保密,但攻擊者可以通過收集用戶共享、傳輸?shù)尼t(yī)療數(shù)據(jù)推測出用戶的隱私敏感信息。
在區(qū)塊鏈數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)查詢過程中,當(dāng)查詢者獲取數(shù)據(jù)時(shí),全網(wǎng)每個(gè)節(jié)點(diǎn)均有可能獲取查詢者的敏感信息,因此對于查詢者的隱私保護(hù)顯得尤為重要。文獻(xiàn)[11]提出一種公平的大數(shù)據(jù)交換方案(FAPS),采用RSA 算法與AES 算法相結(jié)合的方式進(jìn)行不經(jīng)意傳輸,保護(hù)了交易雙方的數(shù)據(jù)隱私,且不需要可信第三方參與傳輸,但該方案存在交易一方惡意篡改數(shù)據(jù)的情況。文獻(xiàn)[12]設(shè)計(jì)一種隱私保護(hù)下的區(qū)塊鏈關(guān)鍵詞搜索方案,使得數(shù)據(jù)提供者無法了解查詢者搜索內(nèi)容的相關(guān)信息,同時(shí)利用了區(qū)塊鏈可驗(yàn)證數(shù)據(jù)的性質(zhì),使得惡意方無法篡改數(shù)據(jù)。在該方案中,數(shù)據(jù)存儲(chǔ)者在區(qū)塊鏈上加密存儲(chǔ)數(shù)據(jù),各個(gè)節(jié)點(diǎn)相互驗(yàn)證后按順序?qū)?shù)據(jù)存儲(chǔ)在區(qū)塊鏈上,導(dǎo)致了區(qū)塊鏈存儲(chǔ)量大、節(jié)點(diǎn)計(jì)算復(fù)雜、傳輸效率低下及節(jié)點(diǎn)之間驗(yàn)證存在延遲等問題。文獻(xiàn)[13]提出一種基于不經(jīng)意傳輸和區(qū)塊鏈的隱私保護(hù)數(shù)據(jù)傳輸方案,并將其應(yīng)用于智能醫(yī)療中,保護(hù)了醫(yī)生和病人的數(shù)據(jù)隱私,同時(shí)采用代理重加密技術(shù)實(shí)現(xiàn)密文之間的轉(zhuǎn)換,但依然存在海量數(shù)據(jù)分布式存儲(chǔ)在區(qū)塊鏈上導(dǎo)致的存儲(chǔ)量大、資源浪費(fèi)等問題。
本文采用鏈上-鏈下數(shù)據(jù)存儲(chǔ)方式,引入代理重加密機(jī)制[14-15],將存儲(chǔ)者加密后的數(shù)據(jù)采用MapReduce 進(jìn)行歸類后分布式存儲(chǔ)在鏈下數(shù)據(jù)存儲(chǔ)層,并將存儲(chǔ)者發(fā)送的索引信息存儲(chǔ)在鏈上的塊身中,使得查詢者能根據(jù)索引信息找到需要的數(shù)據(jù),不論是存儲(chǔ)者本身還是其他用戶均無法隨意篡改數(shù)據(jù)。查詢者和存儲(chǔ)者利用橢圓曲線加密算法[16-18]進(jìn)行不經(jīng)意傳輸,使得所有用戶均無法獲取查詢者數(shù)據(jù)信息,同時(shí)存儲(chǔ)者的私鑰和原始數(shù)據(jù)也不會(huì)被泄漏。
不經(jīng)意傳輸協(xié)議[19]是密碼學(xué)的基本工具,在安全多方計(jì)算中具有廣泛應(yīng)用[20]。該協(xié)議保證接收方獲取發(fā)送方的某個(gè)數(shù)據(jù)后,發(fā)送方不知道接收方獲取了具體哪個(gè)數(shù)據(jù),同時(shí)接收方無法獲取發(fā)送方的其他數(shù)據(jù)[21-22],目前研究最多的是協(xié)議[23-25],其中,n為發(fā)送方的所有數(shù)據(jù)個(gè)數(shù),k為接收方獲取的數(shù)據(jù)個(gè)數(shù)。
Merkle 樹數(shù)據(jù)結(jié)構(gòu)[26-27]主要用來快速歸納和校驗(yàn)數(shù)據(jù)的完整性,將數(shù)據(jù)分組進(jìn)行哈希運(yùn)算,向上不斷遞歸運(yùn)算產(chǎn)生新的哈希節(jié)點(diǎn),最終只剩下一個(gè)Merkle 樹根哈希值,如圖1 所示,其中H(m)表示對數(shù)據(jù)m取哈希值。Merkle 樹具有不可篡改、可驗(yàn)證、高效率等特點(diǎn),運(yùn)用在區(qū)塊鏈中極大地提高了區(qū)塊鏈運(yùn)行效率和可擴(kuò)展性。
圖1 Merkle 樹數(shù)據(jù)結(jié)構(gòu)Fig.1 Merkle tree data structure
由于數(shù)據(jù)在區(qū)塊鏈上進(jìn)行同步時(shí)會(huì)占用大量空間,因此本文根據(jù)鏈上-鏈下相結(jié)合的存儲(chǔ)思想,設(shè)計(jì)鏈上存儲(chǔ)索引信息、鏈下存儲(chǔ)原始數(shù)據(jù)的存儲(chǔ)框架,釋放了區(qū)塊鏈上的大量存儲(chǔ)空間。將區(qū)塊鏈分為網(wǎng)絡(luò)層和數(shù)據(jù)存儲(chǔ)層,鏈上的網(wǎng)絡(luò)層全網(wǎng)公示,用于查詢者選擇區(qū)塊鏈數(shù)據(jù),鏈下的數(shù)據(jù)存儲(chǔ)層存儲(chǔ)大量的加密信息,如圖2 所示。
圖2 區(qū)塊鏈存儲(chǔ)框架Fig.2 Blockchain storage framework
在圖2 中,索引信息由存儲(chǔ)者生成,其中包括數(shù)據(jù)標(biāo)題、密文哈希值等,存儲(chǔ)者將密文發(fā)送至重加密節(jié)點(diǎn)存放在鏈下數(shù)據(jù)存儲(chǔ)層,將索引信息發(fā)送至全節(jié)點(diǎn)存放在鏈上網(wǎng)絡(luò)層的塊身中形成索引信息列表。該框架中有輕節(jié)點(diǎn)、全節(jié)點(diǎn)、重加密節(jié)點(diǎn)3 類,其中:輕節(jié)點(diǎn)負(fù)責(zé)記錄區(qū)塊鏈的塊頭以及促進(jìn)區(qū)塊鏈的運(yùn)轉(zhuǎn);全節(jié)點(diǎn)負(fù)責(zé)記錄整個(gè)鏈上的信息,包含塊頭和塊身,為查詢者提供塊身中的索引信息;重加密節(jié)點(diǎn)負(fù)責(zé)保存鏈下數(shù)據(jù)存儲(chǔ)層的大量數(shù)據(jù),而且誠實(shí)的重加密節(jié)點(diǎn)數(shù)量大于全部重加密節(jié)點(diǎn)數(shù)量的1/2,即可保證數(shù)據(jù)不可被篡改。
MapReduce 是一種編程模型,用于大規(guī)模數(shù)據(jù)集的并行運(yùn)算,從而提高計(jì)算效率。重加密節(jié)點(diǎn)收到發(fā)布的新區(qū)塊后就進(jìn)行一次MapReduce 運(yùn)算,將新區(qū)塊中所有存儲(chǔ)者的數(shù)據(jù)按照存儲(chǔ)者用戶名進(jìn)行分類,存儲(chǔ)在數(shù)據(jù)存儲(chǔ)層,以便在完成不經(jīng)意傳輸時(shí)節(jié)省篩選存儲(chǔ)者數(shù)據(jù)的時(shí)間。基于MapReduce 的區(qū)塊鏈數(shù)據(jù)存儲(chǔ)框架如圖3 所示。
圖3 基于MapReduce 的區(qū)塊鏈數(shù)據(jù)存儲(chǔ)框架Fig.3 MapReduce-based blockchain data storage framework
在MapReduce 執(zhí)行過程中,重加密節(jié)點(diǎn)在產(chǎn)生各個(gè)分節(jié)點(diǎn)的同時(shí)進(jìn)行并行運(yùn)算,首先在Map 階段將數(shù)據(jù)進(jìn)行切割,然后在Shuffle 階段進(jìn)行分組和排序,接著在Reduce 階段進(jìn)行歸約,最后重加密節(jié)點(diǎn)將所有的數(shù)據(jù)按照存儲(chǔ)者用戶名分類存儲(chǔ)在數(shù)據(jù)存儲(chǔ)層中。重加密節(jié)點(diǎn)通過分布式存儲(chǔ)的方式將數(shù)據(jù)備份在各個(gè)分節(jié)點(diǎn)處,分節(jié)點(diǎn)將密文取哈希后與鏈上索引信息中的密文哈希值進(jìn)行對比驗(yàn)證,保證了數(shù)據(jù)的可用性和完整性。
本文設(shè)計(jì)的區(qū)塊鏈數(shù)據(jù)保密查詢的不經(jīng)意傳輸協(xié)議分為數(shù)據(jù)存儲(chǔ)和不經(jīng)意傳輸兩部分。在數(shù)據(jù)存儲(chǔ)部分:重加密節(jié)點(diǎn)將存儲(chǔ)者加密后的數(shù)據(jù)采用MapReduce 進(jìn)行歸類后,分布式存儲(chǔ)在鏈下數(shù)據(jù)存儲(chǔ)層,確保了數(shù)據(jù)的完整性;全節(jié)點(diǎn)將存儲(chǔ)者發(fā)送的索引信息存儲(chǔ)在鏈上的塊身中,使得查詢者能根據(jù)索引信息找到需要的數(shù)據(jù),不論是存儲(chǔ)者本身還是各個(gè)節(jié)點(diǎn),均無法隨意篡改數(shù)據(jù),確保了數(shù)據(jù)的可靠性和可驗(yàn)證性。在不經(jīng)意傳輸部分,查詢者和存儲(chǔ)者通過重加密節(jié)點(diǎn)進(jìn)行不經(jīng)意傳輸協(xié)議后,所有節(jié)點(diǎn)和存儲(chǔ)者無法得知查詢者獲取了哪個(gè)數(shù)據(jù),同時(shí)存儲(chǔ)者的私鑰和原始數(shù)據(jù)也不會(huì)被泄漏。
在區(qū)塊鏈中,誠實(shí)的重加密節(jié)點(diǎn)數(shù)量大于全部重加密節(jié)點(diǎn)數(shù)量的1/2,即可保證協(xié)議能夠順利執(zhí)行。此外,在區(qū)塊鏈上存儲(chǔ)的原始數(shù)據(jù)均視為正確數(shù)據(jù),不考慮輸入數(shù)據(jù)為錯(cuò)誤的情況。
鏈上網(wǎng)絡(luò)層中的每個(gè)區(qū)塊分為塊頭和塊身,塊頭由輕節(jié)點(diǎn)進(jìn)行分布式存儲(chǔ),上一區(qū)塊頭的哈希值記錄在本塊頭中,防止數(shù)據(jù)被篡改,塊頭中還記錄了隨機(jī)數(shù)、Merkle 樹根哈希值、時(shí)間戳等信息。索引信息存放在塊身中形成索引信息列表,按照從左到右的順序排列,由全節(jié)點(diǎn)進(jìn)行記錄,使得查詢者根據(jù)塊身中的索引信息列表找到所需的數(shù)據(jù)。區(qū)塊鏈網(wǎng)絡(luò)層中的數(shù)據(jù)存儲(chǔ)框架如圖4 所示。
圖4 區(qū)塊鏈網(wǎng)絡(luò)層中的數(shù)據(jù)存儲(chǔ)框架Fig.4 Data storage framework in the blockchain network layer
存儲(chǔ)者利用橢圓曲線加密算法對上傳的信息進(jìn)行加密得到密文和標(biāo)識符,再用SHA256 哈希函數(shù)將密文轉(zhuǎn)為哈希值,同時(shí)為該密文選取標(biāo)題和序號。存儲(chǔ)者將密文發(fā)送至重加密節(jié)點(diǎn)存儲(chǔ)在數(shù)據(jù)存儲(chǔ)層中,再將自己的用戶名和該密文的序號、標(biāo)題、標(biāo)識符、密文哈希值組成一個(gè)索引信息發(fā)送至全節(jié)點(diǎn)。序號表示執(zhí)行不經(jīng)意傳輸協(xié)議時(shí)索引信息的發(fā)送順序,標(biāo)題為查詢者提供信息類別,標(biāo)識符用于加密查詢者公鑰,密文哈希值用于數(shù)據(jù)不經(jīng)意傳輸完成后的驗(yàn)證。全節(jié)點(diǎn)將所有索引信息公開存儲(chǔ)在鏈上塊身中形成索引信息列表,同時(shí)用SHA256 哈希函數(shù)依次將每一條索引信息轉(zhuǎn)化為哈希值,用Merkle 樹數(shù)據(jù)結(jié)構(gòu)的方式形成一個(gè)根哈希值存儲(chǔ)在塊頭中。
重加密節(jié)點(diǎn)通過對密文進(jìn)行二次加密,使得存儲(chǔ)者不需要提供私鑰,查詢者僅利用自己的私鑰就能完成對二次加密后的密文進(jìn)行解密,交互過程具體如下:
1)查詢者確定獲取數(shù)據(jù)的序號后,利用索引信息中的標(biāo)識符加密自己的公鑰發(fā)送給存儲(chǔ)者。
2)存儲(chǔ)者將自己的私鑰與查詢者發(fā)送的加密數(shù)據(jù)進(jìn)行結(jié)合,產(chǎn)生重加密密鑰,并將重加密密鑰發(fā)送給重加密節(jié)點(diǎn)。
3)重加密節(jié)點(diǎn)在數(shù)據(jù)存儲(chǔ)層中收到存儲(chǔ)者上傳的密文,利用重加密密鑰依次對其進(jìn)行二次加密,然后依次發(fā)送給查詢者。
4)查詢者按序號找到重加密節(jié)點(diǎn)發(fā)送的二次加密密文,利用自己的私鑰進(jìn)行解密獲取存儲(chǔ)者的原始數(shù)據(jù)。
區(qū)塊鏈不經(jīng)意傳輸過程如圖5 所示。
圖5 區(qū)塊鏈不經(jīng)意傳輸過程Fig.5 Process of blockchain oblivious transfer
2.3.1 協(xié)議構(gòu)建
假設(shè)Alice 為數(shù)據(jù)存儲(chǔ)者,Bob 為查詢者,Bob 想要獲取Alice 存儲(chǔ)在區(qū)塊鏈上的某個(gè)數(shù)據(jù),但不想讓全網(wǎng)和Alice 知道自己獲取了哪個(gè)數(shù)據(jù)。協(xié)議分為數(shù)據(jù)存儲(chǔ)階段和不經(jīng)意傳輸階段,Alice 在區(qū)塊鏈正常運(yùn)行下執(zhí)行數(shù)據(jù)存儲(chǔ)階段,Bob 在需要獲取區(qū)塊鏈上的數(shù)據(jù)時(shí)執(zhí)行不經(jīng)意傳輸階段。在整個(gè)協(xié)議過程中,均采用橢圓曲線加密系統(tǒng)進(jìn)行加解密。協(xié)議中的符號含義如表1 所示,其中i∈(1,2,…,n)。
表1 協(xié)議中的符號含義Table 1 The meaning of symbols in the protocols
假設(shè)用戶Alice擁有原始數(shù)據(jù)m1,m2,…,mn,公鑰pA和私鑰sA,隨機(jī)數(shù)ri。Bob 擁有公鑰pB和私鑰sB。Alice 利用私鑰和隨機(jī)數(shù)將數(shù)據(jù)存儲(chǔ)到區(qū)塊鏈中,Bob 需要查詢數(shù)據(jù)時(shí)發(fā)起申請,在通過身份驗(yàn)證后,開始與Alice 進(jìn)行交互,協(xié)議算法偽代碼如算法1所示。
算法1區(qū)塊鏈保密數(shù)據(jù)查詢的不經(jīng)意傳輸算法
區(qū)塊鏈保密數(shù)據(jù)查詢的不經(jīng)意傳輸協(xié)議包括數(shù)據(jù)加密和數(shù)據(jù)保密查詢兩個(gè)階段,具體如下:
1)數(shù)據(jù)加密階段:Alice 選擇sA作為私鑰,通過橢圓曲線加密算法生成公鑰pA=sA·G,將原始數(shù)據(jù)編碼成橢圓曲線上的點(diǎn)后進(jìn)行公鑰加密得到密文Ci,每加密一個(gè)原始數(shù)據(jù)時(shí)Alice 需要選擇一個(gè)隨機(jī)數(shù)ri,同時(shí)利用這個(gè)隨機(jī)數(shù)生成一個(gè)標(biāo)識符C′i,加密過程如下:
2)數(shù)據(jù)保密查詢階段:(1)Bob 選擇隨機(jī)數(shù)sB作為私鑰,產(chǎn)生公鑰pB=sB·G,利用索引信息中的標(biāo)識符和序號x計(jì)算X=C′i+pB,然后將X發(fā)送給Alice;(2)Alice計(jì)算K=sA·X得到重加密密鑰,并將K發(fā)送給重加密節(jié)點(diǎn);(3)重加密節(jié)點(diǎn)在鏈下存儲(chǔ)層中找到Alice 所有的密文Ci,利用重加密密鑰K依次計(jì)算Wi=K-Ci,并將Wi返回給Bob;(4)Bob 通過序號找到對應(yīng)的Wx(即i取x),利用私鑰sB和Alice 的公鑰pA計(jì)算Mx=sB·pA-Wx,并得到Alice 原始數(shù)據(jù)。至此協(xié)議結(jié)束。
2.3.2 正確性分析
正確性分析步驟具體如下:
1)假設(shè)在數(shù)據(jù)保密查詢階段中第4 步解密結(jié)果是正確的,Bob對Wx進(jìn)行如下解密過程:
2)Bob 無法解密Alice 的其他數(shù)據(jù),假設(shè)Bob 選擇第y個(gè)二次加密密文Wy進(jìn)行解密,由于y≠x,因此ry≠rx,解密過程如下:
4)Alice 和重加密節(jié)點(diǎn)無法知道Bob 獲取了哪個(gè)數(shù)據(jù),在第2 步中,Alice 收到Bob 發(fā)送的加密數(shù)據(jù)X后,可利用標(biāo)識符依次計(jì)算Pi=X-解密得到Bob的公鑰,但得到n個(gè)數(shù)據(jù)時(shí)卻不知道哪個(gè)是Bob 的公鑰,每個(gè)數(shù)據(jù)都有1/n的概率是Bob 的公鑰,因此Alice 得到的數(shù)據(jù)均不可區(qū)分,具有很好的隱私性。
2.3.3 威脅模型分析
本文提出的區(qū)塊鏈數(shù)據(jù)保密查詢的不經(jīng)意傳輸協(xié)議具有識別惡意節(jié)點(diǎn)的功能,根據(jù)安全性假設(shè),通過以下2 種情況進(jìn)行分析:
情況1若重加密節(jié)點(diǎn)篡改鏈下存儲(chǔ)層的數(shù)據(jù),查詢者則無法獲取正確結(jié)果。
查詢者獲取數(shù)據(jù)后可利用區(qū)塊鏈的公開性來驗(yàn)證得到的數(shù)據(jù)是否正確,首先利用存儲(chǔ)者的公鑰加密原始數(shù)據(jù)后獲取哈希值,然后與鏈上索引信息中的密文哈希值進(jìn)行對比,若相等則說明驗(yàn)證成功,該重加密節(jié)點(diǎn)是誠實(shí)的;若不相等,則查詢者可向區(qū)塊鏈申請,讓存儲(chǔ)者將重加密密鑰發(fā)送給另一位新的重加密節(jié)點(diǎn),若新的重加密節(jié)點(diǎn)返回的二次加密密文能讓查詢者通過驗(yàn)證,則表明之前的重加密節(jié)點(diǎn)私自篡改了數(shù)據(jù),并將其視為惡意節(jié)點(diǎn)。
情況2若存儲(chǔ)者發(fā)送錯(cuò)誤的重加密密鑰給重加密節(jié)點(diǎn),查詢者則無法獲取正確結(jié)果。
當(dāng)誠實(shí)的重加密節(jié)點(diǎn)數(shù)量大于1/2 時(shí),若查詢者在多次驗(yàn)證失敗向區(qū)塊鏈發(fā)起申請后(即存儲(chǔ)者多次發(fā)送重加密密鑰給新的重加密節(jié)點(diǎn)后),驗(yàn)證新重加密節(jié)點(diǎn)返回的數(shù)據(jù)均失敗,則表明存儲(chǔ)者提供了錯(cuò)誤的重加密密鑰,并將其視為惡意節(jié)點(diǎn)。
在識別出惡意節(jié)點(diǎn)后,采用基于聲譽(yù)信任機(jī)制[28]或基于激勵(lì)機(jī)制[29]的管理方法來抵制惡意節(jié)點(diǎn)。P2P 網(wǎng)絡(luò)中最重要的特征之一就是需要節(jié)點(diǎn)積極參與,對提供正確數(shù)據(jù)的節(jié)點(diǎn)進(jìn)行獎(jiǎng)勵(lì),對惡意節(jié)點(diǎn)進(jìn)行懲罰,節(jié)點(diǎn)通過不斷賺取聲譽(yù)來獲取信任,從而獲得更多的獎(jiǎng)勵(lì)。
2.3.4 安全性證明
本文使用模擬范例方法證明協(xié)議的安全性[30],構(gòu)造兩個(gè)模擬器S1與S2代替參與雙方執(zhí)行協(xié)議,如果能證明協(xié)議中任意一方無法獲取其他參與者的信息,或者獲取的數(shù)據(jù)是不可區(qū)分的,即可證明該協(xié)議是安全的。
定義1(安全性[30])對于協(xié)議π和函數(shù)f(x,y),如果存在概率多項(xiàng)式時(shí)間算法使得式(4)、式(5)成立,則認(rèn)為π保密計(jì)算了f,表明π具有較高的安全性。
構(gòu)造模擬器S1和S2分別代表Alice 和Bob,通過模擬范例模擬Alice 和Bob 的執(zhí)行過程,從而證明協(xié)議的安全性。在證明過程中,假設(shè)攻擊者會(huì)對重加密節(jié)點(diǎn)進(jìn)行攻擊,從而獲取重加密節(jié)點(diǎn)的信息,因此在中會(huì)加入重加密節(jié)點(diǎn)的數(shù)據(jù)并證明其不可區(qū)分。由于S1在執(zhí)行時(shí)希望推導(dǎo)出S2的公鑰,因此在收到加密數(shù)據(jù)X后,會(huì)試圖計(jì)算出px′=X-與px進(jìn)行對比,S2執(zhí)行時(shí)希望獲取S1的其他數(shù)據(jù)M。
定理1區(qū)塊鏈保密數(shù)據(jù)查詢的不經(jīng)意傳輸協(xié)議是安全的。
證明
本文采用的區(qū)塊鏈數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)分為鏈上網(wǎng)絡(luò)層和鏈下存儲(chǔ)層,分別對其計(jì)算效率和存儲(chǔ)空間進(jìn)行分析。假設(shè)存儲(chǔ)者用戶數(shù)為t,每個(gè)用戶上傳了n個(gè)長度為l的數(shù)據(jù),橢圓曲線采用secp256k1 曲線。
在鏈下存儲(chǔ)層中,存儲(chǔ)者利用橢圓曲線加密算法加密數(shù)據(jù)得到密文和標(biāo)識符,計(jì)算效率為2nt次橢圓曲線乘法運(yùn)算。在存儲(chǔ)空間方面,重加密節(jié)點(diǎn)分布式存儲(chǔ)所有存儲(chǔ)者的密文,每個(gè)密文大小為512 bit,則重加密節(jié)點(diǎn)需要的存儲(chǔ)空間大小為512ntbit。
在鏈上網(wǎng)絡(luò)層中,全節(jié)點(diǎn)共收集nt個(gè)索引信息,將其遞歸運(yùn)算得到Merkle 樹根哈希值,計(jì)算效率為2nt-1 次SHA256 哈希運(yùn)算。在存儲(chǔ)空間方面,每個(gè)索引信息標(biāo)識符為512 bit,密文哈希值為256 bit,用戶名、序號、標(biāo)題共計(jì)256 bit,則每一個(gè)塊身索引信息列表大小為1 024ntbit。塊頭中輕節(jié)點(diǎn)僅存儲(chǔ)Merkle 樹根哈希值和前一區(qū)塊哈希值,共512 bit,因此塊頭存儲(chǔ)大小可忽略不計(jì)。
將本文提出的不經(jīng)意傳輸協(xié)議與文獻(xiàn)[11,13]和文獻(xiàn)[21-24]協(xié)議從以下2 個(gè)方面進(jìn)行計(jì)算效率對比,對比結(jié)果如表2 所示:
表2 計(jì)算效率對比Table 2 Comparison of computational efficiency
1)計(jì)算復(fù)雜度。計(jì)算復(fù)雜度是評價(jià)協(xié)議的重要因素,對比協(xié)議在傳輸過程中采用加減法運(yùn)算、異或運(yùn)算、哈希運(yùn)算、模指數(shù)運(yùn)算、橢圓曲線上的加法和乘法運(yùn)算等,比較耗時(shí)的為模指數(shù)運(yùn)算和橢圓曲線上的乘法運(yùn)算,其中,r=[l/L],l為明文的比特長度,L為映射到群G后元素的最長明文比特長度,n表示發(fā)送方的所有數(shù)據(jù)數(shù)量,k表示接收方獲取的數(shù)據(jù)數(shù)量。文獻(xiàn)[11]在初始化階段需要2n次模指數(shù)運(yùn)算,在不經(jīng)意傳輸階段需要2kn+2k次模指數(shù)運(yùn)算,共計(jì)(2k+2)n+2k次模指數(shù)運(yùn)算;文獻(xiàn)[13]在準(zhǔn)備和注冊階段需要n+4 次模指數(shù)運(yùn)算,在不經(jīng)意傳輸階段需要2n+k+4 次模指數(shù)運(yùn)算,共計(jì)3n+k+6 次模指數(shù)運(yùn)算。文獻(xiàn)[21]由于每個(gè)接收方單獨(dú)獲取信息,因此發(fā)送方需要重新計(jì)算對稱密鑰,共計(jì)kn+k+2 次模指數(shù)運(yùn)算;文獻(xiàn)[22]將大部分指數(shù)運(yùn)算外包至2 個(gè)云服務(wù)器從而降低發(fā)送方和接收方的運(yùn)算效率,共計(jì)2.5n+2k+3 次模指數(shù)運(yùn)算;文獻(xiàn)[23]僅需要一個(gè)云服務(wù)器,共計(jì)3.25n+k+1 次模指數(shù)運(yùn)算;文獻(xiàn)[24]利用橢圓曲線加密算法進(jìn)行不經(jīng)意傳輸,其中方案1 所設(shè)計(jì)的協(xié)議需要rn+n+3k+1 次乘法運(yùn)算,方案2 通過增加接收方運(yùn)算量的方式,從而減少整個(gè)協(xié)議的計(jì)算復(fù)雜度,依然需要rn+3k次乘法運(yùn)算,其中r表示消息明文長度/映射到群G后最長明文長度。本文協(xié)議(一次接收k個(gè)數(shù)據(jù))在數(shù)據(jù)存儲(chǔ)階段需要2 次橢圓曲線乘法運(yùn)算,在不經(jīng)意傳輸階段發(fā)送方加密密文需要2n次橢圓曲線乘法運(yùn)算,計(jì)算重加密密鑰需要k次橢圓曲線乘法運(yùn)算,接收方解密時(shí)需要k次橢圓曲線乘法運(yùn)算,共計(jì)2n+2k+2 次橢圓曲線乘法運(yùn)算。
2)通信復(fù)雜度。通信復(fù)雜度通常用交互的輪數(shù)來衡量。文獻(xiàn)[11]協(xié)議需要3 輪交互,文獻(xiàn)[13]協(xié)議需要3 輪交互,文獻(xiàn)[21]協(xié)議需要2 輪交互,文獻(xiàn)[22-23]協(xié)議均需要3 輪交互,文獻(xiàn)[24]方案1 需要3 輪交互,方案2 需要2 輪交互。在本文協(xié)議中,存儲(chǔ)者與查詢者只需要2 輪交互。
通過表2 可得出:在計(jì)算復(fù)雜度上,由于橢圓曲線上的乘法運(yùn)算優(yōu)于模指數(shù)運(yùn)算,本文協(xié)議相比文獻(xiàn)[11,13]和文獻(xiàn)[21-23]在計(jì)算效率上有所提升,當(dāng)明文長度l大于2L時(shí),相比文獻(xiàn)[24]中的2 種方案,本文協(xié)議計(jì)算效率較高;在通信復(fù)雜度上,本文協(xié)議相比文獻(xiàn)[11,13]、文獻(xiàn)[22-23]和文獻(xiàn)[24]中的方案1 少1 輪,與文獻(xiàn)[21]和文獻(xiàn)[24]中的方案2的通信交互輪數(shù)相同。
應(yīng)用1目前,醫(yī)療大數(shù)據(jù)隱私保護(hù)方案能對患者的原始數(shù)據(jù)進(jìn)行保密,但并沒有保護(hù)查詢者的隱私,當(dāng)查詢者在訪問數(shù)據(jù)庫后,管理員通過獲取查詢者的訪問記錄,可推測出查詢者患有某種疾病。在區(qū)塊鏈中,所有的節(jié)點(diǎn)均有可能得知查詢者獲取的數(shù)據(jù)信息,導(dǎo)致了泄漏查詢者的個(gè)人隱私。如圖6所示,利用本文設(shè)計(jì)的區(qū)塊鏈保密查詢的不經(jīng)意傳輸協(xié)議,不僅能加密區(qū)塊鏈數(shù)據(jù)庫中的其他數(shù)據(jù),而且能保護(hù)查詢者的個(gè)人隱私。
圖6 本文協(xié)議在醫(yī)療領(lǐng)域中的應(yīng)用Fig.6 Application of the proposed protocol in the medical field
應(yīng)用2在大數(shù)據(jù)背景下,網(wǎng)上瀏覽信息或網(wǎng)購時(shí)的訪問記錄也可能暴露個(gè)人隱私。例如,網(wǎng)站下載的視頻、交易商品的數(shù)據(jù)、查閱的資料等,即使這些數(shù)據(jù)的地址加密后存儲(chǔ)在區(qū)塊鏈上,當(dāng)訪問者在獲取這些數(shù)據(jù)的下載地址后,通過分析訪問者下載的數(shù)據(jù),即可推斷出其生活軌跡、個(gè)人喜好等。如圖7 所示,利用本文設(shè)計(jì)的區(qū)塊鏈保密查詢的不經(jīng)意傳輸協(xié)議,能有效地保護(hù)訪問者的個(gè)人隱私。
圖7 本文協(xié)議在大數(shù)據(jù)領(lǐng)域中的應(yīng)用Fig.7 Application of the proposed protocol in the big data field
目前,防止隱私數(shù)據(jù)泄漏已成為區(qū)塊鏈隱私保護(hù)的研究熱點(diǎn)。對于數(shù)據(jù)的隱私保護(hù)不局限于原始數(shù)據(jù)本身,查詢者的訪問信息也需要加密,不經(jīng)意傳輸協(xié)議為解決這類問題提供了思路。本文采用區(qū)塊鏈鏈上-鏈下存儲(chǔ)思想,引入代理重加密機(jī)制,設(shè)計(jì)區(qū)塊鏈數(shù)據(jù)保密查詢的不經(jīng)意傳輸協(xié)議,保護(hù)了用戶和查詢者的隱私。分析結(jié)果表明,該協(xié)議計(jì)算效率高,占用存儲(chǔ)空間少,保證了數(shù)據(jù)的完整性、可靠性和可驗(yàn)證性,同時(shí)能有效識別惡意節(jié)點(diǎn),阻止敵手惡意行為。下一步將在區(qū)塊鏈鏈上-鏈下數(shù)據(jù)存儲(chǔ)模型下引入重加密節(jié)點(diǎn),并結(jié)合零知識證明和同態(tài)加密等技術(shù),設(shè)計(jì)能夠抵抗惡意敵手攻擊的隱私保護(hù)協(xié)議,在保護(hù)區(qū)塊鏈用戶隱私的前提下實(shí)現(xiàn)更高效安全的數(shù)據(jù)存儲(chǔ)與傳輸。