李 莉,吳 怡,楊祉坤,陳云鵬
(東北林業(yè)大學(xué)信息與計(jì)算機(jī)工程學(xué)院,哈爾濱 150040)
隨著信息科技發(fā)展與醫(yī)療行業(yè)需求劇增,醫(yī)療數(shù)據(jù)電子化成為普遍趨勢(shì)。醫(yī)療電子病歷(Medical Electronic Record,MER)以數(shù)字化形式存儲(chǔ)著患者的診療信息,有助于提供更加便利的健康記錄存儲(chǔ)服務(wù)[1]。MER 數(shù)據(jù)共享被認(rèn)為是改善醫(yī)療服務(wù)質(zhì)量、減少醫(yī)療差錯(cuò)和降低醫(yī)療成本的一個(gè)有效方法[2],有助于醫(yī)療行業(yè)的正向發(fā)展。但是目前國內(nèi)許多醫(yī)院或醫(yī)療機(jī)構(gòu)使用傳統(tǒng)數(shù)據(jù)庫存儲(chǔ)患者信息,不同機(jī)構(gòu)之間無法直接進(jìn)行數(shù)據(jù)共享,數(shù)據(jù)互操作性較差,普遍存在信息孤島問題[1];同時(shí),患者的敏感數(shù)據(jù)統(tǒng)一存儲(chǔ)在醫(yī)院服務(wù)器中,患者對(duì)自己病歷的掌控度低,這就易產(chǎn)生存儲(chǔ)安全、隱私泄露等問題。對(duì)此,區(qū)塊鏈去中心化、可追溯、不可篡改和分布式存儲(chǔ)的特點(diǎn)能夠滿足醫(yī)療數(shù)據(jù)共享的多層要求。
基于區(qū)塊鏈的優(yōu)點(diǎn),許多研究者就區(qū)塊鏈技術(shù)在醫(yī)療場景的應(yīng)用上提出共享方案,但是由于區(qū)塊鏈自身的性能限制,目前大多數(shù)的區(qū)塊鏈系統(tǒng)不能提供高吞吐率以及高可伸縮性來滿足當(dāng)前的大數(shù)據(jù)量或大交易量的處理需求[3]。區(qū)塊鏈的“不可能三角”理論[4]表明應(yīng)用的安全、性能和去中心化很難達(dá)到三者的平衡狀態(tài),例如比特幣系統(tǒng)通過犧牲性能來維護(hù)網(wǎng)絡(luò)安全和去中心化。而在區(qū)塊鏈醫(yī)療應(yīng)用場景下,由于潛在用戶群體龐大、鏈上操作較為頻繁、數(shù)據(jù)存儲(chǔ)量較大以及對(duì)數(shù)據(jù)流轉(zhuǎn)效率有較高要求等原因,要求底層區(qū)塊鏈在不斷擴(kuò)增的用戶節(jié)點(diǎn)與數(shù)據(jù)量下,還能保證其交易速度與效率。為了提高區(qū)塊鏈吞吐量與可擴(kuò)展性,將分片(Sharding)技術(shù)引入?yún)^(qū)塊鏈系統(tǒng)進(jìn)行水平擴(kuò)容(也稱為橫向擴(kuò)展,Scale-Out),使其在保證網(wǎng)絡(luò)去中心化和安全性的情況下可有 效提高性能,如 Elastico[5]、RapidChain[6]、Omniledger[7]、Monoxide[8]、ZILLIQA[9]等系統(tǒng)就引入了分片技術(shù),由分片技術(shù)緩解了單鏈結(jié)構(gòu)下數(shù)據(jù)存儲(chǔ)與節(jié)點(diǎn)共識(shí)的壓力,并利用分片間的并行特性增大吞吐量,可擴(kuò)展性也得到了一定程度的提升,但應(yīng)用到醫(yī)療數(shù)據(jù)共享場景上的并不多見。
針對(duì)傳統(tǒng)區(qū)塊鏈不足以提供性能、效率與可用性高的基礎(chǔ)架構(gòu)的問題,本文基于分區(qū)型區(qū)塊鏈(Sharding-based Blockchain)提出MER 共享方案,方案中使用周期性哈希算法進(jìn)行網(wǎng)絡(luò)分片,同時(shí)在分片中引用改進(jìn)了數(shù)字簽名的實(shí)用拜占庭容錯(cuò)(Pratic Byzantic Fault Torent,PBFT)共識(shí)協(xié)議,以此來抵抗女巫攻擊并降低PBFT 的通信復(fù)雜度。在分片間設(shè)計(jì)了一種雙層結(jié)構(gòu),使用主鏈達(dá)到片間共識(shí),分片中的節(jié)點(diǎn)只需存儲(chǔ)當(dāng)前分片的鏈上數(shù)據(jù)。最后,在此基礎(chǔ)上提出一種基于多關(guān)鍵詞可關(guān)聯(lián)檢索的醫(yī)療數(shù)據(jù)共享方案。
在區(qū)塊鏈中使用分片技術(shù)最先由Zilliqa 團(tuán)隊(duì)[9]于2015年提出。分區(qū)型區(qū)塊鏈(Sharding-based Blockchain)主要在系統(tǒng)模型和共識(shí)層對(duì)區(qū)塊鏈進(jìn)行改造[10],將全網(wǎng)節(jié)點(diǎn)劃分到若干分片中,在每個(gè)分片中通過共識(shí)機(jī)制保持?jǐn)?shù)據(jù)一致,只驗(yàn)證處理并保存與本分片相關(guān)的區(qū)塊鏈數(shù)據(jù),相當(dāng)于一個(gè)相對(duì)獨(dú)立的小區(qū)塊鏈系統(tǒng)。各個(gè)分片之間可相互通信,所有分片中的數(shù)據(jù)可以組成一條完整的區(qū)塊鏈,即由多條物理上分區(qū)存儲(chǔ)的分區(qū)鏈組成邏輯上完整的全局鏈[10]。
分片架構(gòu)能并行處理交易,因此分區(qū)型區(qū)塊鏈的吞吐量會(huì)隨著網(wǎng)絡(luò)規(guī)模增加而線性增長。
1.1.1 分片技術(shù)
分片通常被劃分為網(wǎng)絡(luò)分片、交易分片和狀態(tài)分片。
1)網(wǎng)絡(luò)分片(network sharding)。網(wǎng)絡(luò)分片在網(wǎng)絡(luò)層將所有節(jié)點(diǎn)劃分到不同的分片中,是交易分片和狀態(tài)分片的基礎(chǔ)。
2)交易分片(transaction sharding)。交易分片將全網(wǎng)交易劃分到不同的分片中驗(yàn)證并打包,全網(wǎng)多個(gè)分片可以并行處理不同的交易,從而提升全網(wǎng)的整體性能。
3)狀態(tài)分片(state sharding)。狀態(tài)分片將完整的賬本信息分別存儲(chǔ)到各個(gè)分片中,各個(gè)節(jié)點(diǎn)不再存儲(chǔ)完整的區(qū)塊鏈狀態(tài)信息,每個(gè)分片內(nèi)各自維護(hù)部分的賬本信息。
1.1.2 共識(shí)機(jī)制
工作量證明(Proof of Work,PoW)是通過算力比拼進(jìn)行挖礦的一種共識(shí)機(jī)制。對(duì)于采用PoW 共識(shí)的含n個(gè)分片的區(qū)塊鏈來說,算力隨全網(wǎng)任務(wù)被劃分到不同分片中,單個(gè)分片只能得到原來1/n的算力保證,惡意節(jié)點(diǎn)想攻占單個(gè)分片所需的算力只需原來攻占整條區(qū)塊鏈的1/n,攻擊難度降低。因雙花攻擊導(dǎo)致的分叉概率增大,系統(tǒng)安全也大打折扣。
實(shí)用拜占庭容錯(cuò)(PBFT)要求每個(gè)區(qū)塊必須由共識(shí)組中絕大多數(shù)誠實(shí)節(jié)點(diǎn)簽署,每個(gè)誠實(shí)節(jié)點(diǎn)通過簽名確認(rèn)其已驗(yàn)證了區(qū)塊中交易的合法性和有效性。PBFT 可容忍數(shù)量小于(n-1)3 的故障節(jié)點(diǎn)或作惡節(jié)點(diǎn),節(jié)點(diǎn)之間需要進(jìn)行端到端(Peer to Peer,P2P)的共識(shí)同步,提供了交易最終性,不存在分叉問題,對(duì)雙花攻擊有較好抵御能力。由此,有多個(gè)分片項(xiàng)目如文獻(xiàn)[5-7,9],在分片內(nèi)都選擇了PBFT 共識(shí)機(jī)制。
采用PBFT 協(xié)議可以避免基于算力的惡意攻擊,但是存在面臨女巫攻擊(Sibyl Attack)的風(fēng)險(xiǎn),且在其多對(duì)多(All-to-All)的消息模式下通信復(fù)雜度極高,伴隨巨大的通信開銷。PBFT 可以利用小規(guī)模分片的優(yōu)勢(shì)發(fā)揮高效能,但是文獻(xiàn)[9]表明,每個(gè)分片不少于600 個(gè)節(jié)點(diǎn)時(shí),其至少包含1/3 惡意節(jié)點(diǎn)的概率才會(huì)降為百萬分之一。
可擴(kuò)展的去中心化信任基礎(chǔ)設(shè)施區(qū)塊鏈(Scalable decentralized Trust inFrastructure for Blockchains,SBFT)[11]基于PBFT 進(jìn)行設(shè)計(jì)上的改進(jìn),繼承其安全特性的同時(shí)提高擴(kuò)展性,吞吐量可達(dá)PBFT 的兩倍,延遲也更低。SBFT 使用比RSA 更短、更快的BLS 簽名算法,其基于橢圓曲線,有更高的實(shí)用性和安全性,支持批量驗(yàn)證簽名。
區(qū)別于多對(duì)多消息模式,SBFT 提出了一個(gè)使用收集器(Collector)線性通信模式。這種模式下不再將消息發(fā)給每一個(gè)副本節(jié)點(diǎn),而是發(fā)給收集器,再由收集器廣播給所有副本節(jié)點(diǎn),同時(shí)通過使用門限簽名可將消息長度從線性降低到常數(shù),將客戶端通信量從O(n)降低到O(1)。
基于公鑰密碼體制的多關(guān)鍵詞關(guān)聯(lián)檢索可搜索(Public key Encryption with Conjunctive field Keyword Search,PECKS)加密共享方案的概念源于文獻(xiàn)[12],其目的是在PEKS(Public key Encryption with Keyword Search)的基礎(chǔ)上引入多關(guān)鍵詞關(guān)聯(lián)檢索。在可搜索加密技術(shù)中引入非對(duì)稱密碼體制,基于雙線性對(duì)運(yùn)算,為不可信服務(wù)器的密文檢索以及多關(guān)鍵詞關(guān)聯(lián)檢索提供解決辦法。
定義1令G1和G2為兩個(gè)階數(shù)為素?cái)?shù)q的乘法循環(huán)群,定義一個(gè)雙線性映射e:G1×G1→G2,其滿足以下性質(zhì):
1)雙線性性(Bilinear):對(duì)于任意a,b∈和x,y∈G1,都有e(xa,yb)=e(x,y)ab。
2)非退化 性(Non-degenerate):存 在x,y∈G1,使 得e(x,y) ≠1;如果g是G1的生成元,那么e(g,g)是G2的生成元。
3)可計(jì)算性(Computable):對(duì)于任意x,y∈G1,存在有效算法計(jì)算e(x,y)。
對(duì)于一個(gè)(n,t)門限簽名(Threshold Signature)方案,假定存在一個(gè)公鑰,而n個(gè)簽名者每人都擁有自己的私鑰分片,只要其中至少t個(gè)簽名者對(duì)消息進(jìn)行部分簽名,其中t≤n,那么由這t個(gè)部分簽名可以得到對(duì)消息的完整簽名,并且這個(gè)完整簽名可由公鑰來驗(yàn)簽。
本文方案基于跳躍一致性Hash(Jump Consistent Hash)算法[13]實(shí)現(xiàn)分片劃分,跳躍一致性Hash 算法是一種零內(nèi)存消耗、均勻分配、高效的一致性Hash 算法[14],通過加入周期參數(shù),實(shí)現(xiàn)分片劃分的周期性,預(yù)防女巫攻擊。
該算法具有:
1)平衡性:把網(wǎng)絡(luò)節(jié)點(diǎn)均勻地分布到所有分片中。
2)單調(diào)性:當(dāng)分片的數(shù)量發(fā)生變化時(shí),只需要把一些節(jié)點(diǎn)從舊分片移動(dòng)到新分片中,不需要做其他移動(dòng)。
3)周期性:當(dāng)處于同一周期,隨分片數(shù)目的增加分片劃分保持單調(diào)性,當(dāng)周期因自適應(yīng)算法產(chǎn)生變化,則所有節(jié)點(diǎn)重新隨機(jī)劃分。
具體算法如算法1 所示。
其中,設(shè)r=random.next()是在[0,1]區(qū)間均勻分布的隨機(jī)數(shù)。當(dāng)輸入節(jié)點(diǎn)關(guān)鍵值為key,周期參數(shù)為period,分片數(shù)目為num_buckets時(shí),PeriodJumpConsistentHash(key,period,num_buckets)返回該節(jié)點(diǎn)在當(dāng)前周期內(nèi)要被劃分到的分片編號(hào)。跳躍一致性Hash 算法將傳統(tǒng)一致性Hash 算法的時(shí)間復(fù)雜度從O(n)降低到O(logn)。
2.2.1 分片內(nèi)SBFT共識(shí)協(xié)議
本文方案基于SBFT[11]實(shí)現(xiàn)片內(nèi)共識(shí)。SBFT 有兩種區(qū)塊提交模式,分別為Fast Path 和Linear-PBFT,在新的視圖轉(zhuǎn)變協(xié)議下支持兩種模式同時(shí)運(yùn)行,并無縫切換。SBFT 兩模式共識(shí)過程如圖1 所示。
圖1 SBFT共識(shí)過程Fig.1 Consensus process of SBFT
分片內(nèi)共識(shí)過程描述如下:
1)預(yù)準(zhǔn)備階段:當(dāng)醫(yī)生想上傳病歷數(shù)據(jù)或數(shù)據(jù)用戶想要進(jìn)行訪問操作時(shí),客戶端(Client)向當(dāng)值主節(jié)點(diǎn)(Primary)發(fā)起請(qǐng)求,主節(jié)點(diǎn)收集達(dá)到數(shù)量的請(qǐng)求集合后打包成區(qū)塊,并作為預(yù)準(zhǔn)備信息廣播給分片內(nèi)的其他副本節(jié)點(diǎn)(Replica)。
2)門限簽名階段:副本節(jié)點(diǎn)收到預(yù)準(zhǔn)備信息后,對(duì)其進(jìn)行檢查驗(yàn)證,若信息合法則對(duì)其哈希運(yùn)算并進(jìn)行門限簽名(σ(3f+c+1)),將簽名消息發(fā)送給當(dāng)前收集器C(CCollector)。收集器C 收集到3f+c+1 個(gè)不同的簽名消息后整合簽名,并發(fā)送整合消息給其他副本節(jié)點(diǎn)驗(yàn)證。副本節(jié)點(diǎn)收到消息后,若檢驗(yàn)通過則確認(rèn)接受,并進(jìn)行操作。
3)區(qū)塊提交階段:分片內(nèi)達(dá)成區(qū)塊提交共識(shí)后,各節(jié)點(diǎn)執(zhí)行塊內(nèi)請(qǐng)求并更新系統(tǒng)狀態(tài)與狀態(tài)摘要,對(duì)摘要進(jìn)行門限簽名(π(f+1))后發(fā)送消息給收集器E(E-Collector)。收集器E 收集到f+1 個(gè)不同的簽名消息后整合簽名,并發(fā)送整合消息給其他副本節(jié)點(diǎn)驗(yàn)證,副本節(jié)點(diǎn)檢查簽名決定是否接受;同時(shí)給每一個(gè)發(fā)起操作請(qǐng)求的客戶端發(fā)送執(zhí)行確定消息,用戶檢查消息有效則確認(rèn)操作已執(zhí)行。
其中,在當(dāng)前Fast Path 模式中收集器C 收集的簽名足夠整合τ簽名(τ(2f+c+1))但不夠整合σ簽名且等待超時(shí)時(shí),就發(fā)送準(zhǔn)備消息給所有副本節(jié)點(diǎn)進(jìn)入Linear-PBFT 模式。副本節(jié)點(diǎn)收到消息并進(jìn)行檢查,若通過則進(jìn)入階段2)向收集器C發(fā)送簽名消息(其中使用τ簽名)。
SBFT 在Fast Path 模式下可以在3f+2c+1 個(gè)副本節(jié)點(diǎn)的系統(tǒng)中容忍c個(gè)故障副本節(jié)點(diǎn),在Linear-PBFT 模式下可容忍f+c個(gè)。
2.2.2 分片間共識(shí)協(xié)議
系統(tǒng)初始只存在一個(gè)分片,隨著加入節(jié)點(diǎn)的增多,分片根據(jù)自適應(yīng)算法判斷是否需要增加分片。節(jié)點(diǎn)根據(jù)跳躍一致性Hash 算法被劃分到不同的分片中,并定期進(jìn)行節(jié)點(diǎn)的重新劃分,劃分更新的時(shí)間由自適應(yīng)算法決定。
當(dāng)分片中確定提交(committed)某個(gè)區(qū)塊后,會(huì)更新本分片狀態(tài)與總系統(tǒng)狀態(tài),系統(tǒng)中存在一條總鏈,整合各個(gè)分區(qū)的子鏈信息,分片內(nèi)節(jié)點(diǎn)只需要存儲(chǔ)當(dāng)前分片的區(qū)塊鏈數(shù)據(jù),使分區(qū)型區(qū)塊鏈在物理上多鏈、邏輯上單鏈,結(jié)構(gòu)模型如圖2 所示。
圖2 本文雙層區(qū)塊鏈結(jié)構(gòu)模型Fig.2 The proposed two-layer blockchain structure model
分片中區(qū)塊結(jié)構(gòu)同傳統(tǒng)區(qū)塊相似,同樣使用了默克爾樹(Merkle Tree)來認(rèn)證數(shù)據(jù)信息,塊頭中含有塊內(nèi)所含數(shù)據(jù)涉及的所有病人地址信息與醫(yī)生地址信息,指向默克爾樹中的哈希值,同時(shí)包含區(qū)塊在分片內(nèi)所處位置標(biāo)識(shí)。總鏈中區(qū)塊塊頭包含該區(qū)塊在系統(tǒng)區(qū)塊鏈中所處位置標(biāo)識(shí),兩標(biāo)識(shí)可互相驗(yàn)證,供周期分片時(shí)節(jié)點(diǎn)聚合片內(nèi)信息所用。
分片中committed 的區(qū)塊的塊頭被分片主節(jié)點(diǎn)上傳給主鏈,系統(tǒng)驗(yàn)證塊頭哈希、簽名的正確性,若驗(yàn)證通過則計(jì)算M_Hash=H(s_id‖s_hash‖Pre_Hash‖n‖Tmp),封裝原區(qū)塊塊頭并鏈接主鏈,同時(shí)返回該區(qū)塊在總鏈中的序號(hào)給分片,更新分片狀態(tài)。其中:s_id是分片區(qū)塊位置標(biāo)識(shí),s_hash是區(qū)塊在分片中的哈希標(biāo)識(shí),Pre_Hash是前一個(gè)區(qū)塊哈希標(biāo)識(shí),n是區(qū)塊在總鏈中的位置標(biāo)識(shí),Tmp是時(shí)間戳。分片通過位圖B記錄并更新分區(qū)狀態(tài),如B[i]=(n,M_Hash)表示分片內(nèi)第i個(gè)區(qū)塊在主鏈中的序號(hào)為n,哈希標(biāo)識(shí)為M_Hash,若存在惡意變化則很容易被檢測出來。狀態(tài)更新流程如圖3 所示。
圖3 區(qū)塊提交狀態(tài)更新流程Fig.3 Status update process of block committed
本文共享方案基于PECKS[12]構(gòu)建,適應(yīng)醫(yī)療電子病歷共享,各個(gè)醫(yī)療機(jī)構(gòu)組成聯(lián)盟鏈,共享模型如圖4所示。
圖4 本文共享模型Fig.4 The proposed sharing model
1)系統(tǒng)初始化:Setup(1k)→parameters,給定安全參數(shù)1k,系統(tǒng)生成公開參數(shù)parameters={p,g,G1,G2,e},其中G1的生成元為g,e:G1×G1→G2,G2的生成元為e(g,g),p是大素?cái)?shù)。定義哈希函數(shù)H1:{0,1}*→G1,同時(shí)設(shè)置系統(tǒng)醫(yī)療關(guān)鍵詞集Words。
2)密鑰生成:KeyGen(k) →(Rk,Pk),用戶通過醫(yī)療機(jī)構(gòu)注冊(cè),獲得聯(lián)盟鏈準(zhǔn)入許可。當(dāng)用戶第一次注冊(cè)進(jìn)入聯(lián)盟鏈,系統(tǒng)根據(jù)用戶標(biāo)識(shí)idk派發(fā)公私鑰對(duì)(Rk,Pk),其中Rk=[s1,s2],Pk=[g,Y1=s1g,Y2=s2g],s1,s2∈Zp,并將公鑰地址作為key值輸入對(duì)用戶節(jié)點(diǎn)進(jìn)行分片劃分。
3)數(shù)據(jù)共享:PECK(Pk,M,D) →(S,MEn),選擇隨機(jī)數(shù)r∈Zp,輸入用戶公鑰以及需要加密的文件M與關(guān)聯(lián)關(guān)鍵詞向量集D,生 成S=[A1,A2,…,Am,B,C],其 中Ai=e(rH(Wi),Y1),i∈[1,m],B=rY2,C=rg,Wi是在D中第i個(gè)位置的關(guān)鍵詞,H()使用哈希函數(shù)SHA256。加密生成MEn=(M)=(U,V),其中U=rPk,V=M×e(rg,H1(idk))。病人看診時(shí),由醫(yī)生生成相應(yīng)的MER 文件M→{0,1}*,并從系統(tǒng)關(guān)鍵詞集Words中選擇與MER 文件相關(guān)的醫(yī)療關(guān)鍵詞并形成向量集D=(W1,W2,…,Wm),其中若有未設(shè)關(guān)鍵詞位置可設(shè)為空。病人使用自己的公鑰對(duì)MER 文件與相關(guān)關(guān)鍵詞集進(jìn)行加密處理。最后得到文件的哈希值hm=Hash(S‖MEn),病人與醫(yī)生同時(shí)用自己的私鑰對(duì)其進(jìn)行聚合簽名(ECSchnorr 簽名算法)以便之后共識(shí)組成員檢驗(yàn),封裝后由醫(yī)生上傳至系統(tǒng)分片中。
4)陷門生 成:Trapdoor(Rk,Q) →TQ,選擇隨機(jī)數(shù)則陷門TQ=[T1,T2,I1,I2,…,It],其中查 詢Q=(I1,I2,…,It,Ω1,Ω2,…,Ωt),t是查詢Q中的關(guān)鍵詞數(shù)目,Ii∈[1,m](i∈[1,t])是關(guān)鍵詞在關(guān)鍵詞集中的位置,Ωi是要搜索的關(guān)鍵字。數(shù)據(jù)使用者希望查找病人的關(guān)鍵詞為(Ω1,Ω2,…,Ωt)的相關(guān)醫(yī)療記錄時(shí),病人授權(quán)并使用自己的私鑰生成相關(guān)陷門TQ供其檢索,獲得加密文件。其中,數(shù)據(jù)使用者指需要獲取相關(guān)數(shù)據(jù)的鏈上用戶,多為需要為病人診治的醫(yī)生或病人自己,還包括醫(yī)療保險(xiǎn)相關(guān)人員。
5)多關(guān)鍵詞關(guān)聯(lián)檢索:Test(Pk,S,TQ),系統(tǒng)檢驗(yàn)×…×AIt=e(T1,B+T2C)是否為真,若為真則返回。查找時(shí),通過分片之間的交互通信,將檢索申請(qǐng)廣播給每一個(gè)分片,多個(gè)分片可以并行查找。分片中,先根據(jù)塊頭中的病人公鑰地址進(jìn)行匹配,匹配成功則執(zhí)行關(guān)鍵詞檢索,若檢索成功且哈希驗(yàn)證正確則返回密文,用病人私鑰進(jìn)行解密。
由正確性分析可知,若=Ωi,i∈[1,t],則:
6)數(shù)據(jù)解密:De(MEn,Rk) →M,經(jīng)檢索若有密文返回,病人使用自己的私鑰進(jìn)行數(shù)據(jù)解密,計(jì)算得到明文數(shù)據(jù)M。由正確性驗(yàn)證得:
本文共享方案實(shí)現(xiàn)多關(guān)鍵詞關(guān)聯(lián)檢索密文,只有病人的私鑰才可以生成檢索陷門以及解密,病人對(duì)自己隱私數(shù)據(jù)的掌控度極大提升,同時(shí)也減少了數(shù)據(jù)泄漏的安全隱患問題。對(duì)密文進(jìn)行基于關(guān)鍵詞的檢索時(shí),多關(guān)鍵詞間可以有多種組合,檢索更有針對(duì)性,實(shí)現(xiàn)細(xì)粒度安全共享。如表1 是多種方案的功能對(duì)比。
表1 不同方案的功能對(duì)比Tab.1 Function comparison among different schemes
3.2.1 安全功效分析
1)隱密性。本文方案對(duì)病人敏感數(shù)據(jù)都進(jìn)行了加密處理。MER 文件與相關(guān)關(guān)鍵詞集都由病人密鑰進(jìn)行加密處理,惡意攻擊者無法解密獲得數(shù)據(jù)內(nèi)容,很好地保護(hù)了病人隱私。
2)數(shù)據(jù)可控性。只有病人使用私鑰才能生成搜索陷門TQ,也只有其私鑰才能通過式(2)解密檢索得到MER 密文,有效對(duì)數(shù)據(jù)進(jìn)行訪問控制。
3)數(shù)據(jù)安全性。數(shù)據(jù)共享過程中,MER 文件與關(guān)鍵詞集都是以密文形式上傳、存儲(chǔ),沒有私鑰則無法解密;而數(shù)據(jù)在上傳并達(dá)成區(qū)塊共識(shí)后就不可更改、刪除,病人與醫(yī)生共同對(duì)文件哈希hm=Hash(S‖MEn)進(jìn)行聚合簽名,可以同時(shí)使用病人與醫(yī)生的公鑰進(jìn)行驗(yàn)證,同時(shí)區(qū)塊中默克爾樹與塊頭哈希也可驗(yàn)證區(qū)塊數(shù)據(jù)的正確性與完整性。
4)不可偽造性?;趨^(qū)塊鏈可追溯、不可篡改以及哈希函數(shù)抗碰撞的特性,其檢索結(jié)果必然是可信的,用戶也可以輕易驗(yàn)證數(shù)據(jù)有效性。數(shù)據(jù)一旦被篡改或出現(xiàn)偽造數(shù)據(jù),則可通過各處哈希值檢驗(yàn)出來。
3.2.2 安全性證明
定 理1基于雙 線性映 射e:G1×G1→G2,DBDH(Decisional Bilinear Diffie-Hellman)問題是指可以在多項(xiàng)式時(shí)間內(nèi)區(qū) 分五元 組 (g,αg,βg,γg,e(g,g)αβγ)與(g,αg,βg,γg,e(g,g)μ),其中α,β,γ,μ∈Zp,g,αg,βg,γg∈G1。
定理2假設(shè)敵手A 在多項(xiàng)式時(shí)間內(nèi)能以優(yōu)勢(shì)ε贏得游戲,則證明挑戰(zhàn)者B 能夠以至少ε(emqT)的優(yōu)勢(shì)解決DBDH困難問題。
該證明基于文獻(xiàn)[12]的自適應(yīng)安全定義,假設(shè)A 最多進(jìn)行qT次門限詢問,挑戰(zhàn)者B 的目標(biāo)是在輸入(g,αg,βg,γg,X)時(shí)若X=e(g,g)αβγ,則輸出1,否則輸出0。游戲過程如下所示:
1)密鑰生成。挑戰(zhàn)者B 選擇一個(gè)隨機(jī)數(shù)s∈Zp,給敵手A 公鑰PA=[g,Y1=αg,Y2=sg],對(duì)應(yīng)的私鑰為RA=[α,s]。
2)哈希詢問。在任何時(shí)候A 可以詢問隨機(jī)H,B 維護(hù)了一個(gè)初始為空的H-list元組列表,當(dāng)A 在點(diǎn)Wi∈{0,1}*查詢H時(shí),B 的響應(yīng)如下:
5)挑戰(zhàn)。最終A 產(chǎn)生關(guān)鍵詞W和希望挑戰(zhàn)的位置z,B生成PECK 挑戰(zhàn)如下:
B 執(zhí)行上述算法來相應(yīng)H查詢以獲得如H(W)=h的h,令為H-list上的對(duì)應(yīng)元組,如果c=1,則B 失敗。
B 選擇除Wb,z外的隨機(jī)關(guān)鍵詞Wi,j,其中i∈{0,1},j∈[1,m],然后生成Di=(Wi,1,Wi,2,…,Wi,m),限制是之前的門限無 法區(qū)分D0與D1,否則重新生成。給定Wb,j,令是H-list上的對(duì)應(yīng)元組,其中b∈{0,1}。
B 回應(yīng)挑戰(zhàn)[A1,A2,…,Am,B,C]與兩個(gè)文檔D0、D1,則挑戰(zhàn)值計(jì) 算如下:若cb,j=0 則Aj=,否 則Aj=e(ab,j(γg),αg);B=s(γg),C=γg。
若X=e(g,g)αβγ,則挑戰(zhàn) 為 [e(γH(Wb,1),Y1),e(γH(Wb,2),Y1),…,e(γH(Wb,m),Y1),γY2,γg],對(duì) 于Db來說是有效的PECK。
6)更多詢問。B 像之前一樣對(duì)這些詢問做出響應(yīng),唯一的限制是沒有門限查詢可以將D0與D1區(qū)分開。
7)輸出。最后,A 輸出b′∈{0,1},表示挑戰(zhàn)是D0還是D1的加密,若b′=b,則B 輸出1,表示X=e(g,g)αβγ,否 則輸出0。
假設(shè)qT足夠大,則,此處e 為自然對(duì)數(shù)底數(shù)。又,其中事件η1表示B不會(huì)因任何A 的門限查詢而中止,事件η2表示在準(zhǔn)備對(duì)A 的挑戰(zhàn)期間B 不會(huì)中止。因此,B 可憑借優(yōu)勢(shì)解決DBDH 問題。
結(jié)論1 假設(shè)DBDH 問題是難解決的,則本文方案在語義上對(duì)于自適應(yīng)選擇的關(guān)鍵詞攻擊是安全的。
3.3.1 擴(kuò)展性分析
本文方案采用分區(qū)型區(qū)塊鏈構(gòu)造底層數(shù)據(jù)結(jié)構(gòu),將全網(wǎng)節(jié)點(diǎn)劃分為較小的共識(shí)組,每個(gè)分片間能夠并行處理事務(wù),在可擴(kuò)展性、吞吐率等性能方面得到很好的提升。同時(shí)基于跳躍一致性哈希算法作為網(wǎng)絡(luò)分片算法,實(shí)現(xiàn)輕巧、快速,內(nèi)存占用小,映射均勻,滿足一致性與均勻性[13]以及周期性。
分片間使用總鏈結(jié)構(gòu),通過哈希運(yùn)算封裝塊頭并鏈接,使各個(gè)分片只需存儲(chǔ)與本分片相關(guān)的區(qū)塊數(shù)據(jù),而不是整個(gè)區(qū)塊鏈數(shù)據(jù),實(shí)現(xiàn)物理上多鏈、邏輯上單鏈的半狀態(tài)分片,降低存儲(chǔ)壓力,提高可擴(kuò)展性,片內(nèi)SBFT 機(jī)制也實(shí)現(xiàn)共識(shí)擴(kuò)展性提高。本文方案使用C++語言,基于Crypto++庫、RELIC 密碼庫,實(shí)驗(yàn)環(huán)境配置如下:
1)CPU 為Intel Core i7-6700 CPU@3.40 GHz;
2)內(nèi)存為RAM 8 GB;
3)操作系統(tǒng)為Ubuntu 18.04 over VMware Workstation Pro 16.1.1。
如圖5 所示,在非分區(qū)方案中,由于共識(shí)機(jī)制使用了SBFT,通信效率提高,在節(jié)點(diǎn)數(shù)量控制在200~300 時(shí)能夠得到較高的吞吐量,但是在節(jié)點(diǎn)數(shù)量不斷增加的情況下,單鏈的共識(shí)效率明顯下降,吞吐量隨節(jié)點(diǎn)倍增而大幅降低;而在本文方案中,以平均200 個(gè)節(jié)點(diǎn)為一個(gè)分區(qū),隨著節(jié)點(diǎn)增多,分片隨之增加,保證片內(nèi)共識(shí)效率的情況下多個(gè)分片并行運(yùn)算,吞吐量也隨之得到顯著提高。
圖5 吞吐量對(duì)比Fig.5 Throughput comparison
3.3.2 計(jì)算代價(jià)分析
表2 為本文方案與各方案計(jì)算代價(jià)對(duì)比,其中:Te代表指數(shù)運(yùn)算時(shí)間,Tp代表雙線性配對(duì)運(yùn)算時(shí)間,Th代表哈希運(yùn)算時(shí)間。加密階段中m代表關(guān)鍵詞向量集中關(guān)鍵字個(gè)數(shù),檢索階段中t代表關(guān)聯(lián)檢索關(guān)鍵字個(gè)數(shù)。本文方案無需大量指數(shù)運(yùn)算,加密階段需要較多次的雙線性配對(duì)運(yùn)算,計(jì)算代價(jià)由關(guān)鍵詞向量集大小決定,檢索階段計(jì)算代價(jià)隨關(guān)鍵詞關(guān)聯(lián)個(gè)數(shù)變化。
表2 計(jì)算代價(jià)對(duì)比Tab.2 Comparison of calculation cost
3.3.3 數(shù)據(jù)檢索擴(kuò)展性分析
本文方案基于分片技術(shù),各分片間可以互相通信且并行運(yùn)算,在進(jìn)行數(shù)據(jù)搜索時(shí)各分片可同時(shí)進(jìn)行病人數(shù)據(jù)匹配,提高搜索效率,檢索的時(shí)間復(fù)雜度從O(n)降為O(logn)。
圖6 為在不同關(guān)鍵字檢索個(gè)數(shù)下各方案的時(shí)間開銷對(duì)比,基于本文方案,實(shí)驗(yàn)設(shè)置5 個(gè)分片,分別進(jìn)行10、50、100和200 個(gè)關(guān)鍵字的檢索測試。隨著關(guān)鍵字檢索個(gè)數(shù)的增加,各方案檢索消耗時(shí)間都有所增大,在進(jìn)行單關(guān)鍵字檢索時(shí)本文方案在該階段只需花費(fèi)一次雙線性配對(duì)運(yùn)算與兩次哈希運(yùn)算,計(jì)算開銷略高于文獻(xiàn)[16]方案,但總體偏小,因而時(shí)間成本增長較為平緩。同時(shí),5 個(gè)分片相當(dāng)于將總鏈分為區(qū)塊數(shù)據(jù)互不相交的5 個(gè)子鏈,可以同時(shí)進(jìn)行關(guān)鍵字的檢索匹配,通過并行分?jǐn)偭藱z索壓力,提高了承載能力,在關(guān)鍵字檢索方面有較好的擴(kuò)展性。
圖6 檢索時(shí)間對(duì)比Fig.6 Comparison of retrieval time
本文的醫(yī)療共享方案在引入?yún)^(qū)塊鏈的基礎(chǔ)上應(yīng)用分片技術(shù),對(duì)底層結(jié)構(gòu)進(jìn)行水平擴(kuò)容,提高可擴(kuò)展性與吞吐率以及并行處理能力,同時(shí)使用跳躍一致性哈希算法增加周期性網(wǎng)絡(luò)分片的隨機(jī)性、穩(wěn)定性與均勻性。針對(duì)傳統(tǒng)PBFT 的網(wǎng)絡(luò)寬帶高負(fù)擔(dān),分片內(nèi)使用具有擴(kuò)展性的SBFT 共識(shí)協(xié)議,并通過底層主鏈的雙層結(jié)構(gòu)在鏈接各分片數(shù)據(jù)的同時(shí)降低單分片內(nèi)節(jié)點(diǎn)的存儲(chǔ)負(fù)擔(dān)。共享方案基于公鑰密碼體制,只有病人的私鑰才可以生成搜索陷門與對(duì)密文解密,同時(shí)可以通過多個(gè)關(guān)鍵詞關(guān)聯(lián)檢索進(jìn)行更有針對(duì)性的數(shù)據(jù)搜索,達(dá)成細(xì)粒度檢索,使共享方案具有高安全度與高可控性。在并行分片中,吞吐率與檢索效率等性能明顯提高。
本文方案中,由于分片是隨著節(jié)點(diǎn)增加而產(chǎn)生的,而先產(chǎn)生的分片必然比后產(chǎn)生的分片要生成更多區(qū)塊,這就會(huì)造成區(qū)塊數(shù)據(jù)在不同分片中分配不均,從而導(dǎo)致分片負(fù)載不均的問題,這是接下來需要繼續(xù)完善的方向。在下一階段研究中,可以繼續(xù)專注于提升區(qū)塊鏈性能,同時(shí)不降低其安全性,對(duì)此考慮對(duì)拜占庭節(jié)點(diǎn)進(jìn)行監(jiān)測,使每次分片時(shí)惡意節(jié)點(diǎn)盡量均勻分布在各個(gè)分片中且不會(huì)超過分片承載力,以防止女巫攻擊;同時(shí)考慮在方案中應(yīng)用智能合約,提高事務(wù)執(zhí)行效率。