劉惠文 鄧小鴻 熊偉志 拜亞萌
摘 要:區(qū)塊鏈技術(shù)在電子健康記錄安全共享上具有巨大潛力,然而,目前的解決方案存在著如存儲(chǔ)空間大和共識(shí)效率低等問題。為此,提出了一種基于區(qū)塊鏈和親友節(jié)點(diǎn)的新方案。首先,采用分布式文件系統(tǒng)將用戶完整的電子健康記錄存儲(chǔ)在線下服務(wù)器,并構(gòu)建用戶的親友節(jié)點(diǎn)集,每個(gè)用戶的數(shù)據(jù)由其親友節(jié)點(diǎn)冗余存儲(chǔ),鏈上僅存儲(chǔ)區(qū)塊頭信息,降低了存儲(chǔ)空間;其次,設(shè)計(jì)了基于多簽名技術(shù)的數(shù)據(jù)訪問機(jī)制,采用Shamir秘密共享機(jī)制將用戶的私鑰分發(fā)給其親友節(jié)點(diǎn),親友節(jié)點(diǎn)中的過半數(shù)可以利用自己的私鑰重建出用戶私鑰,解決緊急情況下的數(shù)據(jù)訪問問題;最后提出了基于信用的拜占庭容錯(cuò)共識(shí)機(jī)制,將信用值排名前10%的節(jié)點(diǎn)作為領(lǐng)導(dǎo)者節(jié)點(diǎn)集,采用隨機(jī)算法在領(lǐng)導(dǎo)者節(jié)點(diǎn)集中生成主節(jié)點(diǎn),提高了共識(shí)安全性。實(shí)驗(yàn)結(jié)果表明,所提方案所需的鏈上存儲(chǔ)空間是現(xiàn)有方案的1/7,數(shù)據(jù)訪問效率提高了15倍,同時(shí)在保證較好時(shí)延和吞吐量的情況下,具有更高的共識(shí)安全性。該方案可實(shí)現(xiàn)電子健康記錄的安全高效共享,為區(qū)塊鏈在醫(yī)療領(lǐng)域應(yīng)用提供案例。
關(guān)鍵詞:區(qū)塊鏈; 親友節(jié)點(diǎn); 電子健康記錄; 智能合約; 共識(shí)算法
中圖分類號(hào):TP311.13 文獻(xiàn)標(biāo)志碼:A?文章編號(hào):1001-3695(2024)05-006-1321-07
doi:10.19734/j.issn.1001-3695.2023.08.0380
Secure electronic health records sharing scheme based onblockchain and friend and relative nodes
Abstract:Blockchain technology has great potentiality in the secure sharing of electronic health records. However, current solutions face issues such as large storage space and low consensus efficiency. This paper proposed a novel scheme based on blockchain and friend and relative nodes. Firstly, this paper adopted a distributed file system to store users complete electronic health records on offline servers, and constructed a set of users friend and relative nodes. Each users data was stored redundantly by its friend and relative nodes, and only the blocks header information was stored on the chain, reducing sto-rage space. Then, this paper designed a data access mechanism based on multi-signature technology, using Shamir secret sharing mechanism to distribute users private keys to their relatives and friends. More than half of the relatives and friends could use their own private keys to reconstruct users private keys, solving data access problems in emergency situations. Finally, this paper proposed a credit based Byzantine fault-tolerant consensus mechanism, which used the top 10% nodes with credit values as the leader node set and utilized a random algorithm to generate the master node in the leader node set. And it improved consensus security. The experimental results show that compared with existing methods, the proposed scheme reduces the on-chain storage space by 1/7, improves data access efficiency by 15 times, and has higher consensus security while ensuring good latency and throughput. The proposed scheme can achieve secure and efficient sharing of electronic health records, providing a case for the application of blockchain in the medical field.
Key words:blockchain; friend and relative nodes; electronic health records; smart contracts; consensus algorithm
0 引言
電子健康記錄(EHR)作為臨床診斷和構(gòu)建全民健康大數(shù)據(jù)的重要基礎(chǔ),對(duì)醫(yī)學(xué)研究進(jìn)步起著重要作用。但由于缺乏標(biāo)準(zhǔn)化的數(shù)據(jù)格式、安全可靠的互操作平臺(tái),不同利益相關(guān)者之間的EHR共享仍然具有挑戰(zhàn)性[1,2]。在當(dāng)前中心化的醫(yī)療信息系統(tǒng)中,當(dāng)患者需要將自己的EHR在不同機(jī)構(gòu)間共享時(shí)非常低效,甚至患者并沒有權(quán)限操作屬于自己的健康數(shù)據(jù),由此引發(fā)的隱私泄露等風(fēng)險(xiǎn)劇增。
面對(duì)中心化系統(tǒng)暴露出來的問題,研究者提出使用區(qū)塊鏈技術(shù)來提升醫(yī)療信息系統(tǒng)的性能,包括去中心化的數(shù)據(jù)存儲(chǔ)、基于智能合約的互操作性、身份驗(yàn)證和數(shù)據(jù)完整性。此外,研究表明,基于區(qū)塊鏈的系統(tǒng)還將降低數(shù)據(jù)維護(hù)和共享成本[3]。當(dāng)然,區(qū)塊鏈無法作為一種解決現(xiàn)有中心化系統(tǒng)問題的萬能方法,因其本身也存在著如共識(shí)效率、數(shù)據(jù)存儲(chǔ)空間、智能合約漏洞等性能或安全方面的隱患,而在設(shè)計(jì)基于區(qū)塊鏈的醫(yī)療信息系統(tǒng)解決方案時(shí)必須考慮必要的安全因素[4,5]。目前,現(xiàn)有研究主要是利用Hyperledger Fabric和以太坊等平臺(tái)構(gòu)建健康數(shù)據(jù)共享系統(tǒng),使用智能合約實(shí)現(xiàn)數(shù)據(jù)的訪問控制??紤]到健康數(shù)據(jù)的存儲(chǔ)空間問題,鏈上通常是存儲(chǔ)數(shù)據(jù)的映射關(guān)系。因此當(dāng)系統(tǒng)遭受DoS攻擊和面臨通信瓶頸時(shí),基于區(qū)塊鏈的方法與傳統(tǒng)的中心化系統(tǒng)并沒有顯著區(qū)別,因?yàn)閿?shù)據(jù)存儲(chǔ)和訪問仍然是集中式的。同時(shí),鏈上的映射數(shù)據(jù)可能會(huì)使用戶面臨隱私鏈接攻擊。除此之外,現(xiàn)有研究極少數(shù)考慮在患者無法親自提供數(shù)據(jù)解密私鑰的緊急情況下,醫(yī)療機(jī)構(gòu)如何獲取患者的隱私數(shù)據(jù)而進(jìn)行及時(shí)的救助。
綜上所述,采用區(qū)塊鏈來進(jìn)行EHR安全共享具有諸多優(yōu)勢(shì),但仍然存在著一些典型的問題需要解決。例如如何降低區(qū)塊鏈系統(tǒng)的存儲(chǔ)空間問題、如何保證隱私數(shù)據(jù)的安全訪問問題、如何進(jìn)一步提高共識(shí)算法效率和解決緊急情況下的數(shù)據(jù)訪問等。針對(duì)上述問題,本文提出了一個(gè)基于聯(lián)盟鏈和親友節(jié)點(diǎn)的EHR共享方案,其中個(gè)人用戶(包含患者本人及親友)、醫(yī)療服務(wù)機(jī)構(gòu)、科研機(jī)構(gòu)和監(jiān)管部門一起組成聯(lián)盟鏈,所有用戶經(jīng)過身份驗(yàn)證才能加入到Hyperledger Fabric網(wǎng)絡(luò)中。所提系統(tǒng)使用區(qū)塊鏈進(jìn)行數(shù)據(jù)操作的權(quán)限管理,區(qū)塊鏈上只存儲(chǔ)鏈下數(shù)據(jù)的哈希引用索引,而將實(shí)際數(shù)據(jù)采用分布式文件系統(tǒng)(distributed file system,DFS)鏈下存儲(chǔ)在分布式的服務(wù)器中。本文的主要工作如下:
a)提出一種基于區(qū)塊鏈的去中心化EHR共享架構(gòu)和相關(guān)智能合約設(shè)計(jì),結(jié)合用于鏈下數(shù)據(jù)存儲(chǔ)的去中心化文件系統(tǒng),提供與現(xiàn)有集中式數(shù)據(jù)庫(kù)系統(tǒng)相當(dāng)?shù)男阅?,同時(shí)提供更好的安全性,保護(hù)系統(tǒng)免受DoS攻擊、消除單點(diǎn)故障的影響,并提高數(shù)據(jù)完整性。
b)設(shè)計(jì)一種基于親友節(jié)點(diǎn)和多簽名技術(shù)的數(shù)據(jù)授權(quán)訪問機(jī)制,每個(gè)用戶在鏈上的數(shù)據(jù)僅存儲(chǔ)在數(shù)量有限的親友節(jié)點(diǎn)集中。另外在用戶無法提供自己的私鑰時(shí),通過其親友節(jié)點(diǎn)集中過半數(shù)的節(jié)點(diǎn)共同簽名完成授權(quán)訪問,該機(jī)制在節(jié)省存儲(chǔ)空間的同時(shí)較好地解決了緊急情況下隱私數(shù)據(jù)的訪問問題。
c)設(shè)計(jì)一種基于信用的實(shí)用拜占庭共識(shí)協(xié)議(practical Byzantine fault tolerance based on credit,CPBFT),利用節(jié)點(diǎn)信用值快速挑選可信賴的主節(jié)點(diǎn),與現(xiàn)有共識(shí)協(xié)議相比,該協(xié)議在延遲、吞吐量和安全性方面具有更好的性能。
1 相關(guān)工作
Azaria等人[6]較早地提出使用區(qū)塊鏈技術(shù)來實(shí)現(xiàn)醫(yī)療健康數(shù)據(jù)的共享,在提出的共享模型MedRec中,健康數(shù)據(jù)并不上鏈存儲(chǔ),而是仍然存儲(chǔ)在數(shù)據(jù)提供者的數(shù)據(jù)庫(kù)系統(tǒng)中,區(qū)塊鏈的引入主要是提供數(shù)據(jù)訪問的智能合約,提高數(shù)據(jù)操作的可控性和互操作性。但該模型存在幾個(gè)典型問題:a)數(shù)據(jù)的安全性完全由數(shù)據(jù)持有者保證,數(shù)據(jù)被泄露和攻擊的風(fēng)險(xiǎn)較大;b)MedRec采用工作量證明(proof of work,PoW)共識(shí)算法,能量消耗大,并且具有高延遲和低吞吐量;c)沒有考慮特殊情況下數(shù)據(jù)的授權(quán)訪問問題。2019年,Daraghmi等人[7]在前人研究的基礎(chǔ)上,提出了一種基于區(qū)塊鏈的電子醫(yī)療系統(tǒng)的新架構(gòu),架構(gòu)使用了更高效的基于活動(dòng)證明(proof of activity,PoA)的共識(shí)算法,鼓勵(lì)節(jié)點(diǎn)積極提供有效醫(yī)療記錄來完成“挖礦”。另外,新的架構(gòu)使用代理重加密方案替代了數(shù)據(jù)共享時(shí)需要的對(duì)稱密鑰,并設(shè)計(jì)了新的智能合約來實(shí)現(xiàn)更加細(xì)粒度的數(shù)據(jù)訪問控制。但該方法仍然將數(shù)據(jù)存儲(chǔ)在鏈下傳統(tǒng)的中心化數(shù)據(jù)庫(kù)中,也沒有考慮緊急情況下的數(shù)據(jù)訪問。2020年,Tanwar等人[8]提出了一種基于聯(lián)盟鏈的EHR共享系統(tǒng),該系統(tǒng)能夠在患者、臨床醫(yī)生和護(hù)理提供者之間共享數(shù)據(jù)。系統(tǒng)將健康數(shù)據(jù)鏈上存儲(chǔ),并使用Raft共識(shí)協(xié)議進(jìn)一步提升共識(shí)效率。另外,首次對(duì)基于區(qū)塊鏈的醫(yī)療保健系統(tǒng)的性能評(píng)估進(jìn)行了深入研究,從延遲和吞吐量、內(nèi)存使用率、CPU和網(wǎng)絡(luò)消耗等方面進(jìn)行了性能對(duì)比。該方法的缺點(diǎn)是沒有考慮拜占庭將軍問題,鏈上數(shù)據(jù)的增長(zhǎng)會(huì)帶來性能的顯著下降。同年,Huang等人[9]提出一種基于區(qū)塊鏈的醫(yī)療數(shù)據(jù)隱私保護(hù)和安全共享方案,數(shù)據(jù)存儲(chǔ)在半可信的云服務(wù)器中,采用零知識(shí)證明實(shí)現(xiàn)在不泄露病人隱私數(shù)據(jù)的情況下滿足數(shù)據(jù)訪問需求,代理重加密技術(shù)以確保研究機(jī)構(gòu)能夠解密中間密文。該方案的缺點(diǎn)是采用的PBFT共識(shí)機(jī)制在網(wǎng)絡(luò)節(jié)點(diǎn)數(shù)較多時(shí),系統(tǒng)的性能顯著降低。
文獻(xiàn)[4]提出基于區(qū)塊鏈的電子醫(yī)療病歷可控共享模型,病歷數(shù)據(jù)實(shí)現(xiàn)鏈上和鏈下的混合存儲(chǔ),結(jié)合聚類算法改進(jìn)PBFT共識(shí)協(xié)議獲得更高效的共識(shí)效率,同時(shí)引入基于屬性的加密方法實(shí)現(xiàn)病歷數(shù)據(jù)的安全可靠共享。Deepika等人[10]提出基于區(qū)塊鏈的去中心化安全共享個(gè)人健康記錄的方法,采用加密的權(quán)益證明(proof of stake,PoS)共識(shí)算法來提高系統(tǒng)效率,并將數(shù)據(jù)加密存儲(chǔ)在代理云服務(wù)器中,鏈上存儲(chǔ)數(shù)據(jù)的存儲(chǔ)位置及哈希值。Rajesh等人[11]提出基于區(qū)塊鏈和同態(tài)加密的醫(yī)學(xué)圖像隱私保護(hù)聚合模型,為去中心化網(wǎng)絡(luò)中的醫(yī)學(xué)圖像數(shù)據(jù)共享帶來新的范式。Erikson等人[12]設(shè)計(jì)了一種基于區(qū)塊鏈的安全共享醫(yī)學(xué)圖像數(shù)據(jù)的協(xié)議,可記錄用戶訪問圖像數(shù)據(jù)的行為。Shuaib等人[13]提出了一種基于許可區(qū)塊鏈的醫(yī)療數(shù)據(jù)共享系統(tǒng),該系統(tǒng)集成了區(qū)塊鏈技術(shù)、去中心化文件系統(tǒng)和門限簽名來解決數(shù)據(jù)鏈下訪問效率和安全授權(quán)問題,其共識(shí)機(jī)制采用了伊斯坦布爾拜占庭容錯(cuò)算法(Istanbul BFT,IBFT)。為了解決區(qū)塊鏈中醫(yī)療數(shù)據(jù)的真實(shí)性來源問題,研究者們將物聯(lián)網(wǎng)技術(shù)融合到醫(yī)療區(qū)塊鏈中,Sharda等人[14]構(gòu)建了一個(gè)基于區(qū)塊鏈的醫(yī)療物聯(lián)網(wǎng)原型,使用區(qū)塊鏈技術(shù)來消除匿名數(shù)據(jù)訪問,確?;颊邤?shù)據(jù)的隱私性。Qi等人[15]創(chuàng)新地提出一個(gè)集成了深度學(xué)習(xí)、區(qū)塊鏈和IoMT技術(shù)的框架,深度學(xué)習(xí)技術(shù)可正確預(yù)測(cè)病人的壓力級(jí)別,區(qū)塊鏈中的智能合約確保安全事務(wù)和健康檢查,IoMT設(shè)備準(zhǔn)確獲取病人的多模態(tài)數(shù)據(jù)。上述方法雖然較好地解決了醫(yī)療數(shù)據(jù)共享過程中出現(xiàn)的隱私泄露和安全共享問題,但也存在著共識(shí)效率不高和缺乏緊急情況下數(shù)據(jù)授權(quán)訪問的問題。
表1對(duì)目前的研究工作做了一個(gè)簡(jiǎn)單的對(duì)比,主要從系統(tǒng)采用的區(qū)塊鏈框架、共識(shí)算法、數(shù)據(jù)存儲(chǔ)策略、去中心化訪問和數(shù)據(jù)授權(quán)訪問(緊急情況下)方面進(jìn)行比較。從表1可以看出,目前絕大部分方法選用了Hyperledger聯(lián)盟鏈架構(gòu)作為系統(tǒng)的底層框架,原因是聯(lián)盟鏈更方便對(duì)網(wǎng)絡(luò)中的節(jié)點(diǎn)進(jìn)行信任管理。采用的共識(shí)算法絕大部分采用具有容錯(cuò)功能的PBFT及其改進(jìn)算法,原因是該共識(shí)算法在節(jié)點(diǎn)數(shù)量較小時(shí)具有高的共識(shí)效率和抵抗少數(shù)節(jié)點(diǎn)作惡的能力。但是,上述方法很少考慮到緊急情況下的數(shù)據(jù)授權(quán)訪問問題,極少數(shù)方法采用門限簽名策略來實(shí)現(xiàn)。綜上所述,基于區(qū)塊鏈的EHR共享系統(tǒng)仍然有關(guān)鍵技術(shù)需要突破,如更加高效和安全的共識(shí)機(jī)制,緊急情況下患者隱私數(shù)據(jù)的授權(quán)訪問問題。
2 提出的系統(tǒng)架構(gòu)
本文提出的基于區(qū)塊鏈和親友節(jié)點(diǎn)的EHR共享方案由EHR存儲(chǔ)方案和共享方案兩個(gè)部分組成,分別如圖1、2所示??紤]到目前EHR保存的實(shí)際情況,數(shù)據(jù)可由機(jī)構(gòu)或者患者本人提出上鏈存儲(chǔ),存儲(chǔ)步驟如下:a)數(shù)據(jù)在機(jī)構(gòu)中,機(jī)構(gòu)代表患者上傳數(shù)據(jù),需獲得患者同意,得到授權(quán)后方可將擁有的數(shù)據(jù)進(jìn)行上傳,稱為機(jī)構(gòu)上鏈;b)患者本人可將自己的數(shù)據(jù)上鏈存儲(chǔ),稱為自主上鏈;c)將EHR采用數(shù)據(jù)擁有者的公鑰進(jìn)行加密,得到加密后的EHR;d)將加密后的EHR存儲(chǔ)到患者的親友節(jié)點(diǎn)中,親友節(jié)點(diǎn)的構(gòu)建將在第3章介紹;e)親友節(jié)點(diǎn)廣播加密后的EHR數(shù)據(jù);f)共識(shí)節(jié)點(diǎn)集運(yùn)行CPBFT算法挑選主節(jié)點(diǎn),主節(jié)點(diǎn)將親友節(jié)點(diǎn)廣播的數(shù)據(jù)進(jìn)行打包區(qū)塊,構(gòu)建Merkle tree;g)將Merkle root上鏈存儲(chǔ),形成區(qū)塊頭鏈,區(qū)塊頭中包含Merkle樹根、對(duì)應(yīng)的DFS地址、時(shí)間戳等信息,相比現(xiàn)有的區(qū)塊鏈,并不存儲(chǔ)區(qū)塊體信息;h)將Merkle tree存儲(chǔ)到DFS中,實(shí)現(xiàn)鏈下存儲(chǔ)。
在本文方案中,由醫(yī)院、監(jiān)管部門和科研機(jī)構(gòu)組成共識(shí)節(jié)點(diǎn),負(fù)責(zé)運(yùn)行共識(shí)算法得到主節(jié)點(diǎn)和維持鏈上數(shù)據(jù)的一致性。共識(shí)節(jié)點(diǎn)執(zhí)行如下功能:向DFS系統(tǒng)添加數(shù)據(jù),將相應(yīng)的事務(wù)信息上傳到區(qū)塊鏈,驗(yàn)證從外部用戶收到的各種交易,如權(quán)限請(qǐng)求和權(quán)限授予等。本文采用基于信用的PBFT算法CPBFT,CPBFT在PBFT算法上進(jìn)行改進(jìn),將節(jié)點(diǎn)的信用機(jī)制引入到主節(jié)點(diǎn)產(chǎn)生階段。首先,通過節(jié)點(diǎn)信用值評(píng)估機(jī)制計(jì)算節(jié)點(diǎn)的信用值,并按照信用值高低進(jìn)行排序,將信用值排名前10%的節(jié)點(diǎn)作為領(lǐng)導(dǎo)者節(jié)點(diǎn)集;其次,利用可驗(yàn)證隨機(jī)函數(shù)(verifiable random function,VRF)隨機(jī)挑選一個(gè)節(jié)點(diǎn)作為主節(jié)點(diǎn),當(dāng)發(fā)現(xiàn)主節(jié)點(diǎn)故障或作惡時(shí),可從領(lǐng)導(dǎo)者節(jié)點(diǎn)集中再次快速產(chǎn)生一個(gè)主節(jié)點(diǎn)。信用值高的節(jié)點(diǎn)具有低的作惡概率,能有效降低拜占庭節(jié)點(diǎn)對(duì)系統(tǒng)性能的影響,另外通過信用值來快速生成領(lǐng)導(dǎo)者節(jié)點(diǎn),能顯著提高共識(shí)效率。
EHR存儲(chǔ)方案能將機(jī)構(gòu)或者患者本人擁有的健康數(shù)據(jù)進(jìn)行鏈上和鏈下的結(jié)合存儲(chǔ)。健康數(shù)據(jù)被加密后存儲(chǔ)在數(shù)據(jù)擁有者的親友節(jié)點(diǎn)中,并由共識(shí)節(jié)點(diǎn)選舉出來的主節(jié)點(diǎn)完成區(qū)塊的生成工作,將生成區(qū)塊過程中形成的Merkle根進(jìn)行鏈上存儲(chǔ),將Merkle樹存儲(chǔ)在多個(gè)DFS中,鏈上和鏈下的數(shù)據(jù)映射關(guān)系和Merkle根一起形成區(qū)塊頭鏈存儲(chǔ)在鏈上所有節(jié)點(diǎn)中。
在完成電子健康記錄的存儲(chǔ)后,可按照如下步驟完成數(shù)據(jù)的共享:a)數(shù)據(jù)訪問者通過向區(qū)塊鏈系統(tǒng)提出訪問請(qǐng)求,由許可合約向數(shù)據(jù)的擁有者提出本次訪問的授權(quán);b)數(shù)據(jù)擁有者對(duì)本次訪問進(jìn)行授權(quán);c)數(shù)據(jù)訪問者通過正常訪問方式從DFS中獲取數(shù)據(jù);d)數(shù)據(jù)擁有者在緊急情況下無法實(shí)現(xiàn)授權(quán)訪問,則改為向其親友節(jié)點(diǎn)集提出授權(quán)請(qǐng)求,由親友節(jié)點(diǎn)聯(lián)合授權(quán);e)數(shù)據(jù)訪問者通過緊急訪問方式,直接從親友節(jié)點(diǎn)處訪問數(shù)據(jù)。
EHR共享方案實(shí)現(xiàn)了每一次訪問數(shù)據(jù)的權(quán)限控制功能,在正常情況下,數(shù)據(jù)訪問者請(qǐng)求訪問數(shù)據(jù),許可合約會(huì)判斷數(shù)據(jù)訪問者的權(quán)限和是否得到數(shù)據(jù)擁有者的授權(quán),如果滿足合約執(zhí)行條件則能從DFS訪問數(shù)據(jù)。在數(shù)據(jù)擁有者無法親自授權(quán)時(shí),許可合約嘗試從其親友節(jié)點(diǎn)中獲得聯(lián)合授權(quán),如果滿足合約條件則直接從親友節(jié)點(diǎn)中快速獲取數(shù)據(jù)。
為了實(shí)現(xiàn)數(shù)據(jù)的安全訪問,主要設(shè)計(jì)了注冊(cè)合約、數(shù)據(jù)合約和許可合約三種類型的智能合約。
1)注冊(cè)合約
為了保護(hù)系統(tǒng)免受惡意用戶的攻擊,要求所有用戶都在注冊(cè)合約上匿名注冊(cè)。這些數(shù)據(jù)包括用戶公鑰及其角色,如患者、醫(yī)療機(jī)構(gòu)、科研機(jī)構(gòu)和監(jiān)管機(jī)構(gòu)。主節(jié)點(diǎn)在驗(yàn)證發(fā)送到數(shù)據(jù)合約和權(quán)限合約的交易時(shí),會(huì)檢查用戶的合法性。
2)數(shù)據(jù)合約
數(shù)據(jù)合約存儲(chǔ)在一個(gè)記錄列表,用于指示用戶與其數(shù)據(jù)之間的映射。列表中的每個(gè)數(shù)據(jù)行都由數(shù)據(jù)所有者的公鑰、使用公鑰加密的對(duì)稱密鑰、數(shù)據(jù)類型和指向鏈下存儲(chǔ)的原始數(shù)據(jù)的數(shù)據(jù)哈希組成。用戶的電子健康記錄數(shù)據(jù)由主節(jié)點(diǎn),即數(shù)據(jù)提供者代表用戶上傳至DFS,同時(shí)數(shù)據(jù)合約提供了添加和修改數(shù)據(jù)的功能接口,用戶可以調(diào)用接口修改數(shù)據(jù)。
3)許可合約許可合約保存數(shù)據(jù)訪問權(quán)限的記錄,顯示用戶對(duì)數(shù)據(jù)具有的不同權(quán)限。每個(gè)訪問權(quán)限由權(quán)限授予者的公鑰(數(shù)據(jù)所有者的身份)、權(quán)限請(qǐng)求者的公鑰(數(shù)據(jù)訪問者的身份)、使用請(qǐng)求者公鑰加密的對(duì)稱密鑰(用于保證本次數(shù)據(jù)訪問的機(jī)密性)和數(shù)據(jù)的哈希四個(gè)部分組成。許可合約也提供相關(guān)的功能接口,允許系統(tǒng)中的參與者請(qǐng)求權(quán)限、授予權(quán)限和修改權(quán)限。
3 方案具體實(shí)現(xiàn)
為了更加方便地描述細(xì)節(jié),表2給出相關(guān)變量和函數(shù)的形式化描述與說明。
3.1 共享方案初始化
1)基本假設(shè)
醫(yī)院、監(jiān)管部門和科研機(jī)構(gòu)負(fù)責(zé)產(chǎn)生主節(jié)點(diǎn),它們中的單個(gè)個(gè)體可能會(huì)存在惡意行為,但選舉出的主節(jié)點(diǎn)具有高可信度,生成的區(qū)塊數(shù)據(jù)值得信賴。
a)數(shù)據(jù)擁有者:擁有自己數(shù)據(jù)的控制權(quán),想獲取其他用戶的數(shù)據(jù)。
b)數(shù)據(jù)訪問者:可能會(huì)有惡意行為,試圖破壞數(shù)據(jù)的機(jī)密性或修改、刪除其他用戶的數(shù)據(jù)。
c)DFS:分布式文件系統(tǒng)是安全的,未經(jīng)授權(quán)的用戶不能修改或刪除數(shù)據(jù)。
上述假設(shè)并不影響方案的實(shí)際應(yīng)用,共識(shí)節(jié)點(diǎn)中個(gè)別節(jié)點(diǎn)存在惡意行為本身就在PBFT共識(shí)機(jī)制的考慮范疇之內(nèi)。數(shù)據(jù)擁有者和訪問者具有潛在的非法訪問數(shù)據(jù)的動(dòng)機(jī)在任何信息系統(tǒng)中均存在,而DFS作為分布式存儲(chǔ)中的主要技術(shù)方法,在安全性上具有較好的保障。
2)初始化
a)系統(tǒng)實(shí)體身份。每個(gè)系統(tǒng)實(shí)體都生成一個(gè)公鑰-私鑰對(duì){PK, SK},公鑰用于實(shí)體在區(qū)塊鏈中進(jìn)行秘密通信,如實(shí)體A要向B發(fā)送隱秘信息時(shí),用B的公鑰進(jìn)行加密后發(fā)送。私鑰用于實(shí)體向注冊(cè)合約發(fā)送由其私人密鑰簽署的注冊(cè)交易,一般用于數(shù)字簽名。
b)親友節(jié)點(diǎn)集構(gòu)建。每個(gè)節(jié)點(diǎn)(數(shù)據(jù)擁有者)選擇大于等于三個(gè)節(jié)點(diǎn)作為自己的親友節(jié)點(diǎn)集,并將自己加密后的EHR、拆分后的私鑰發(fā)給親友節(jié)點(diǎn)。
c)智能合約部署。在區(qū)塊鏈上部署注冊(cè)合約、數(shù)據(jù)合約和許可合約三個(gè)智能合約。
d)數(shù)據(jù)表示。用戶數(shù)據(jù)在系統(tǒng)中表示為四元組{PK,HI,DT,ED}。其中:PK是數(shù)據(jù)所有者的公鑰;HI是數(shù)據(jù)的哈希;DT是數(shù)據(jù)類型;ED是數(shù)據(jù)D的加密形式。
3)親友節(jié)點(diǎn)集構(gòu)建
區(qū)塊鏈系統(tǒng)的數(shù)據(jù)存儲(chǔ)方式是讓系統(tǒng)中的所有節(jié)點(diǎn)來存儲(chǔ)區(qū)塊的信息,即讓每個(gè)節(jié)點(diǎn)存儲(chǔ)所有個(gè)體的健康數(shù)據(jù),這對(duì)于存儲(chǔ)代價(jià)和運(yùn)行效率均是挑戰(zhàn)。一個(gè)可行的方案是每個(gè)節(jié)點(diǎn)均存儲(chǔ)若干個(gè)體的數(shù)據(jù)信息,因?yàn)閺娜祟惿鐣?huì)關(guān)系網(wǎng)絡(luò)來看,每個(gè)人的社交圈涉及的個(gè)體是有限的。個(gè)體A的健康數(shù)據(jù)由A的N(N≥3)個(gè)親友節(jié)點(diǎn)和其本身存儲(chǔ),個(gè)體A的親友節(jié)點(diǎn)集如圖3所示。節(jié)點(diǎn)A的外圍是其N個(gè)親友節(jié)點(diǎn),負(fù)責(zé)存儲(chǔ)節(jié)點(diǎn)A的記錄備份,節(jié)點(diǎn)間具有p2p網(wǎng)絡(luò)中典型的對(duì)等關(guān)系。
4)基于多簽名技術(shù)的數(shù)據(jù)授權(quán)訪問方法
在本文方案中,每個(gè)個(gè)體擁有對(duì)自己健康數(shù)據(jù)的直接訪問和授權(quán)訪問的權(quán)限。當(dāng)數(shù)據(jù)訪問者(如醫(yī)療服務(wù)機(jī)構(gòu))需要訪問個(gè)體的健康數(shù)據(jù)時(shí),個(gè)體提供自己的私鑰解密后發(fā)給醫(yī)療服務(wù)機(jī)構(gòu);但是,當(dāng)個(gè)體無法提供私鑰時(shí),醫(yī)療機(jī)構(gòu)如果需要授權(quán)訪問數(shù)據(jù),可以通過個(gè)體的親友節(jié)點(diǎn)授權(quán)來完成。為了避免親友節(jié)點(diǎn)中個(gè)體擁有私鑰產(chǎn)生信息泄露的問題,醫(yī)療機(jī)構(gòu)需要獲得親友節(jié)點(diǎn)中的過半數(shù)的節(jié)點(diǎn)共同授權(quán)才能訪問。基于多簽名技術(shù)的數(shù)據(jù)授權(quán)訪問模型如圖4所示,其工作步驟如下:
a)節(jié)點(diǎn)A將自己的私鑰分成N份(圖中假設(shè)N=3,N為節(jié)點(diǎn)A親友節(jié)點(diǎn)的個(gè)數(shù)),如SK_A1、SK_A2和SK_A3;
b)節(jié)點(diǎn)A分別用N個(gè)節(jié)點(diǎn)的公鑰對(duì)劃分的私鑰進(jìn)行加密,得到EPK_1(SK_A1)、EPK_2(SK_A2)和EPK_3(SK_A3);
c)節(jié)點(diǎn)A將步驟b)的結(jié)果采用Shamir秘密共享方式[16]分別發(fā)送給N個(gè)親友節(jié)點(diǎn);
d)數(shù)據(jù)訪問者(如醫(yī)療機(jī)構(gòu))需要訪問節(jié)點(diǎn)A的健康記錄明文時(shí),在不能直接從A處獲得私鑰SK_A時(shí),通過向A的親友節(jié)點(diǎn)發(fā)出請(qǐng)求以獲得A的私鑰;
e)親友節(jié)點(diǎn)中過半數(shù)的節(jié)點(diǎn)用自己的私鑰簽名后,可以合成A的私鑰SK_A;
f)數(shù)據(jù)訪問者得到私鑰后,可以從節(jié)點(diǎn)A的任一親友節(jié)點(diǎn)中訪問其健康數(shù)據(jù)。
由于節(jié)點(diǎn)A的私鑰重建需要參與親友節(jié)點(diǎn)的私鑰簽名,可以判斷本次授權(quán)訪問是哪些節(jié)點(diǎn)參與了授權(quán)。
3.2 基于信用的PBFT共識(shí)機(jī)制
節(jié)點(diǎn)的信用值計(jì)算是CPBFT的基礎(chǔ),采用筆者前期所提的節(jié)點(diǎn)信用值計(jì)算的通用模型[17],描述如下:
Ci=F(Ti)(1)
其中:Ci代表節(jié)點(diǎn)i的信用值;F為信用值計(jì)算函數(shù),可表示為線性計(jì)算公式或神經(jīng)網(wǎng)絡(luò)訓(xùn)練函數(shù);Ti為節(jié)點(diǎn)i參與系統(tǒng)行為的特征向量。F函數(shù)如筆者之前提出的基于BP神經(jīng)網(wǎng)絡(luò)的節(jié)點(diǎn)信用值評(píng)估機(jī)制[18],可更為準(zhǔn)確地評(píng)價(jià)節(jié)點(diǎn)信用,解決線性算法無法有效對(duì)節(jié)點(diǎn)的行為特征進(jìn)行描述的問題。具體的實(shí)現(xiàn)細(xì)節(jié)可參考文獻(xiàn)[17,18],本文不再重復(fù)介紹。
PBFT算法可大致分為主節(jié)點(diǎn)選取、請(qǐng)求、預(yù)準(zhǔn)備、準(zhǔn)備和提交五個(gè)階段。CPBFT算法對(duì)主節(jié)點(diǎn)選取階段進(jìn)行改進(jìn),引入節(jié)點(diǎn)信用值和VRF挑選主節(jié)點(diǎn),具體描述如算法1所示。在主節(jié)點(diǎn)生成后,客戶端向其發(fā)送請(qǐng)求消息(請(qǐng)求階段),然后主節(jié)點(diǎn)生成預(yù)準(zhǔn)備消息并廣播給跟隨者節(jié)點(diǎn)(預(yù)準(zhǔn)備階段),跟隨節(jié)點(diǎn)將帶有自己簽名的投票消息廣播給其他節(jié)點(diǎn)(準(zhǔn)備階段),主節(jié)點(diǎn)收到來自2f+1個(gè)誠(chéng)實(shí)節(jié)點(diǎn)的反饋后,將消息打包反饋給客戶端(提交階段)。在預(yù)準(zhǔn)備階段,一旦發(fā)現(xiàn)主節(jié)點(diǎn)作惡,將作惡主節(jié)點(diǎn)從領(lǐng)導(dǎo)者節(jié)點(diǎn)集中剔除,并重新選擇主節(jié)點(diǎn)。
算法1 CPBFT中主節(jié)點(diǎn)選取算法
輸入:所有節(jié)點(diǎn)集合N={n1,n2,…,ni};節(jié)點(diǎn)私鑰SKi;公鑰PKi;隨機(jī)種子seed;抽簽閾值NUM。
輸出:主節(jié)點(diǎn)nj。
N′={n1′,n2′,…,ni′}←sort(N) //對(duì)節(jié)點(diǎn)集合進(jìn)行信用值排序
l←i×10% //前l(fā)個(gè)節(jié)點(diǎn)作為領(lǐng)導(dǎo)者節(jié)點(diǎn)集
L={n1′,n2′,…,ni′} //領(lǐng)導(dǎo)者集合
function selection(L,l,SKi,PKi,seed)
j←1
while j≤L.length do
Y←VRF_hash(SKj,seed) /*在領(lǐng)導(dǎo)者集合中使用VRF產(chǎn)生隨機(jī)數(shù)Y*/
proof←VRF_proof(SKj,seed) //生成證明
if Y>NUM && VRF_verify(PKj,seed)==true then /*驗(yàn)證抽簽結(jié)果*/
return nj //返回主節(jié)點(diǎn)
j++
end if
end while
leader←selection(L,l,SKi,PKi,seed) /*確定主節(jié)點(diǎn),準(zhǔn)備開始PBFT后續(xù)階段*/
3.3 智能合約設(shè)計(jì)
1)數(shù)據(jù)合約
EHR數(shù)據(jù)可以由兩種方式添加到共享系統(tǒng)中,一種是由主節(jié)點(diǎn)代為上傳,另一種是由數(shù)據(jù)擁有者自己上傳。
a)主節(jié)點(diǎn)上傳用戶數(shù)據(jù)。假設(shè)主節(jié)點(diǎn)m想要上傳屬于用戶u的數(shù)據(jù),m一方面要將數(shù)據(jù)加密存儲(chǔ)在DFS上,另外還要將等效事務(wù)發(fā)送到區(qū)塊鏈上。其操作時(shí)序如圖5所示,詳細(xì)操作步驟如下:
(a)加密原始數(shù)據(jù)RD,m生成對(duì)稱加密密鑰key,加密RD,得到Ekey(RD)。
(b)生成哈希索引,m為加密數(shù)據(jù)生成哈希,HI=hash(Ekey(RD))。
(c)將數(shù)據(jù)存儲(chǔ)在DFS上,發(fā)送到DFS進(jìn)行數(shù)據(jù)存儲(chǔ)的消息表示為SD=PK_u‖DT‖HI‖Ekey(RD)。
(d)得到用戶u的公鑰PK_u。
(e)m使用PK_u加密key,得到EPK_u(key);使用用戶的公鑰對(duì)對(duì)稱密鑰key進(jìn)行加密,允許用戶稍后解密并獲得密鑰。因此,只有用戶u才能訪問對(duì)稱密鑰。
(f)生成區(qū)塊鏈交易BT,BT=PK_u‖DT‖HI‖EPK_u(key)。
(g)數(shù)字簽名BT,m使用其私鑰對(duì)BT進(jìn)行簽名,如SigSK_m(BT)。
(h)分發(fā)BT和驗(yàn)證簽名。m將BT發(fā)送給其他參與共識(shí)的節(jié)點(diǎn)進(jìn)行簽名,并從N個(gè)節(jié)點(diǎn)中收集至少t個(gè)簽名,表示為SKS。
(i)發(fā)送交易到區(qū)塊鏈,發(fā)送到區(qū)塊鏈的最終交易是SigSSK(BT)‖BT。
b)數(shù)據(jù)擁有者上傳個(gè)人數(shù)據(jù)。過程與前面所述的主節(jié)點(diǎn)上傳用戶數(shù)據(jù)類似,但更為簡(jiǎn)潔,只需要用自己的私鑰進(jìn)行加密或者簽名。設(shè)用戶u上傳自己的個(gè)人數(shù)據(jù),其步驟如下:
(a)將數(shù)據(jù)上傳到DFS。該步驟與前面步驟(a)~(c)相似,不再贅述。
(b)將交易發(fā)送到區(qū)塊鏈。創(chuàng)建區(qū)塊鏈交易,區(qū)塊鏈交易的內(nèi)容為BT=PK_u‖DT‖HI。簽署并發(fā)送交易,要發(fā)送到區(qū)塊鏈的交易被簽署為SigSK_u(BT)‖BT。
2)許可合約
對(duì)于數(shù)據(jù)擁有者本身,當(dāng)交易被發(fā)送到區(qū)塊鏈時(shí),系統(tǒng)會(huì)向其發(fā)送通知。一旦用戶接收到通知,他就從數(shù)據(jù)合約中下載元數(shù)據(jù),包括哈希索引和加密的對(duì)稱密鑰key。接下來,使用用戶的私鑰對(duì)對(duì)稱密鑰進(jìn)行解密。然后,通過向附近的DFS節(jié)點(diǎn)之一發(fā)送由哈希索引組成的查詢來檢索加密數(shù)據(jù)。一旦用戶接收到加密數(shù)據(jù),就使用對(duì)稱密鑰對(duì)原始數(shù)據(jù)進(jìn)行解密。
對(duì)于其他用戶,他們可以看到誰擁有什么數(shù)據(jù)。任何對(duì)數(shù)據(jù)感興趣的人都可以通過發(fā)送請(qǐng)求訪問到許可合約,許可合約對(duì)請(qǐng)求者的身份進(jìn)行驗(yàn)證,并向數(shù)據(jù)的請(qǐng)求者發(fā)送訪問請(qǐng)求,得到其授權(quán)后可以同意本次數(shù)據(jù)訪問請(qǐng)求。請(qǐng)求訪問數(shù)據(jù)表示為SigSK_i(HI)‖HI,其中i是請(qǐng)求數(shù)據(jù)訪問的用戶。
數(shù)據(jù)所有者收到數(shù)據(jù)訪問的授權(quán)請(qǐng)求通知后,可以批準(zhǔn)或拒絕該請(qǐng)求。如果同意本次訪問,則發(fā)送一個(gè)事務(wù),該事務(wù)包括請(qǐng)求數(shù)據(jù)的HI、請(qǐng)求者的公鑰以及用請(qǐng)求者公鑰加密的解密數(shù)據(jù)用的對(duì)稱密鑰。權(quán)限授予數(shù)據(jù)表示為SigSK_j(HI,PK_i),EPK_i(key))‖{HI, PK_i,EPK_i(key)},其中i是許可請(qǐng)求者,j是批準(zhǔn)請(qǐng)求的數(shù)據(jù)所有者。一旦許可被批準(zhǔn),用戶就下載加密的密鑰并解密對(duì)稱密鑰(滿足一次一密原則)。然后可以通過使用HI從附近的DFS節(jié)點(diǎn)檢索數(shù)據(jù),并使用對(duì)稱密鑰解密數(shù)據(jù)。
4 方案安全性分析
4.1 機(jī)密性、完整性和可用性
1)機(jī)密性
在本文方案中,所有EHR在上傳到DFS之前,都由主節(jié)點(diǎn)或者用戶自己使用安全加密算法進(jìn)行加密。安全加密算法保證了EHR數(shù)據(jù)的機(jī)密性。假設(shè)某醫(yī)療機(jī)構(gòu)A想在沒得到患者D授權(quán)的情況下獲取D的數(shù)據(jù),如果A不是主節(jié)點(diǎn),從3.3節(jié)中介紹的方案可以看出,只有主節(jié)點(diǎn)或用戶自己可以訪問原始數(shù)據(jù),所以A只看到散列和加密的數(shù)據(jù)。如果A通過許可合約來申請(qǐng)?jiān)L問數(shù)據(jù),只有獲得D的私鑰才能解密數(shù)據(jù),在公私鑰密碼體制中,從公開的公鑰獲得私鑰在計(jì)算上是不可能的。從以上分析可以得出,本文方案具有高的數(shù)據(jù)機(jī)密性。
2)完整性
在本文方案中,不論是主節(jié)點(diǎn)還是用戶自己將數(shù)據(jù)添加到鏈上存儲(chǔ)時(shí)都需要加他們的數(shù)字簽名,而數(shù)字簽名的私鑰只能由他們自己保存,其他實(shí)體無法獲得,這確保了簽名驗(yàn)證的真實(shí)性和不可抵賴性。區(qū)塊鏈中的交易數(shù)據(jù)一旦通過CPBFT算法達(dá)成共識(shí)并上鏈存儲(chǔ)后,區(qū)塊的順序和交易將受到哈希鏈的保護(hù),每個(gè)區(qū)塊的哈希值是唯一的,一旦鏈下數(shù)據(jù)進(jìn)行了更改,必然會(huì)造成鏈上哈希鏈數(shù)據(jù)的不一致。假設(shè)攻擊者Alice修改了DFS中存儲(chǔ)的數(shù)據(jù)信息,那么Merkle樹的樹根值必然會(huì)發(fā)生變化,這與區(qū)塊頭鏈中存儲(chǔ)的Merkle根值不一致,此功能可確保數(shù)據(jù)的完整性。
3)可用性
在本文方案中,只有授權(quán)實(shí)體才能使用其用戶的私鑰來解密其EHR。當(dāng)用戶自己能提供私鑰時(shí),許可合約能保證本次數(shù)據(jù)訪問的正常進(jìn)行;當(dāng)用戶在緊急情況下不能提供私鑰時(shí),可以通過其親友節(jié)點(diǎn)構(gòu)造出用戶的私鑰來完成數(shù)據(jù)訪問。假設(shè)患者Bob無法提供自己的私鑰,數(shù)據(jù)訪問的許可合約會(huì)從Bob的親友節(jié)點(diǎn)中去嘗試聯(lián)合授權(quán),如果授權(quán)成功,可直接從Bob的某個(gè)親友節(jié)點(diǎn)中獲取數(shù)據(jù),此功能可確保數(shù)據(jù)的可用性。
4.2 容錯(cuò)性
a)拜占庭節(jié)點(diǎn)數(shù)。本文提出的CPBFT基于PBFT改進(jìn),在抗拜占庭節(jié)點(diǎn)數(shù)量上保持一致,假設(shè)共識(shí)節(jié)點(diǎn)的總數(shù)為3f+1,那么允許的拜占庭節(jié)點(diǎn)的最大數(shù)為f。
b)主節(jié)點(diǎn)作惡。當(dāng)出現(xiàn)主節(jié)點(diǎn)作惡行為時(shí),將會(huì)重新在領(lǐng)導(dǎo)者節(jié)點(diǎn)集中隨機(jī)再次選出一個(gè)主節(jié)點(diǎn),由于領(lǐng)導(dǎo)者節(jié)點(diǎn)集為信用值排名前10%的節(jié)點(diǎn),具有高的可靠性,一定程度上保證了系統(tǒng)的安全性。另外從領(lǐng)導(dǎo)者節(jié)點(diǎn)集中快速產(chǎn)生新的主節(jié)點(diǎn),也避免了由原始PBFT算法的視圖切換帶來的性能下降。
c)單點(diǎn)失效。本文方案采用了去中心化存儲(chǔ)系統(tǒng)結(jié)構(gòu),能有效地解決單點(diǎn)故障問題。首先,用戶在鏈上的數(shù)據(jù)會(huì)重復(fù)存儲(chǔ)在其親友節(jié)點(diǎn)中;其次,鏈下的數(shù)據(jù)存儲(chǔ)在分布式的文件系統(tǒng)DFS中,均避免了因單個(gè)節(jié)點(diǎn)失效而帶來的數(shù)據(jù)丟失問題。值得注意的是,本文方案中每個(gè)區(qū)塊數(shù)據(jù)不是由鏈上的所有節(jié)點(diǎn)存儲(chǔ),而是存儲(chǔ)在少數(shù)節(jié)點(diǎn)中,這將大大減小存儲(chǔ)壓力。
d)可追蹤性。本文方案中,所有個(gè)體通過統(tǒng)一的許可合約訪問數(shù)據(jù),并且均需要提供請(qǐng)求訪問者的私鑰,一旦發(fā)生隱私數(shù)據(jù)的泄露,都能唯一定位到曾經(jīng)訪問數(shù)據(jù)的個(gè)體。另外在緊急情況下,親友節(jié)點(diǎn)可以構(gòu)造出用戶的私鑰,該過程也需要每個(gè)親友節(jié)點(diǎn)的私鑰參加,也就是能確定哪些個(gè)體參與到了本次操作,說明本文方案具有可追蹤性。
4.3 存儲(chǔ)效率與時(shí)間效率
a)存儲(chǔ)效率。本文方案對(duì)EHR的存儲(chǔ)仍然使用的是鏈上+鏈下的方式,典型的區(qū)別在于一個(gè)用戶的EHR數(shù)據(jù)會(huì)冗余地存儲(chǔ)在其鏈上的親友節(jié)點(diǎn)中,而現(xiàn)有方法是讓所有節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù)的映射關(guān)系,并不存儲(chǔ)完整的數(shù)據(jù)。為了節(jié)省存儲(chǔ)空間,本文方法鏈上存儲(chǔ)僅僅只存儲(chǔ)區(qū)塊頭,而一般的方法是包含了區(qū)塊頭和區(qū)塊體的,在鏈上節(jié)點(diǎn)數(shù)量較大時(shí),本文方法所需的總存儲(chǔ)空間仍然占有優(yōu)勢(shì)。
b)時(shí)間效率。通常情況下,現(xiàn)有鏈上+鏈下方法在訪問數(shù)據(jù)時(shí),要先通過鏈上訪問,遍歷區(qū)塊頭,再找到區(qū)塊體,從區(qū)塊體中找到鏈下存儲(chǔ)的DFS服務(wù)器地址,最終找到數(shù)據(jù)。本文方法是先遍歷區(qū)塊頭,再找到DFS,從DFS存儲(chǔ)的區(qū)塊體中找到所需的數(shù)據(jù)??梢岳斫鉃橥ǔ7椒ㄊ菂^(qū)塊頭→區(qū)塊體→DFS,本文方法是區(qū)塊頭→DFS→區(qū)塊體,在時(shí)間效率上和現(xiàn)有方法基本一致。
5 仿真實(shí)驗(yàn)與性能評(píng)估
本文采用Hyperledger Fabric聯(lián)盟鏈框架來實(shí)現(xiàn)提出的電子健康記錄安全共享原型系統(tǒng),使用DFS來進(jìn)行去中心化的數(shù)據(jù)存儲(chǔ)。編程語言采用Python,前端展示采用Vue框架,傳統(tǒng)數(shù)據(jù)庫(kù)使用MySQL和Redis,操作系統(tǒng)采用Windows 10。在學(xué)校實(shí)驗(yàn)室環(huán)境中配置了15個(gè)區(qū)塊鏈節(jié)點(diǎn),其中醫(yī)療機(jī)構(gòu)4個(gè),科研機(jī)構(gòu)3個(gè),監(jiān)管部門1個(gè),患者及親友7個(gè)。經(jīng)實(shí)際運(yùn)行,構(gòu)建的原型系統(tǒng)能較為快捷有效地完成數(shù)據(jù)的鏈上鏈下混合存儲(chǔ),并沒有顯著增加鏈上節(jié)點(diǎn)的存儲(chǔ)空間,數(shù)據(jù)共享訪問所需的時(shí)間在可接受范圍內(nèi)。另外,為了更加方便對(duì)比本文方法的性能,在Ubuntu虛擬機(jī)上進(jìn)行一系列的仿真實(shí)驗(yàn),該虛擬機(jī)配置120 GB的內(nèi)存、16個(gè)CPU內(nèi)核,每個(gè)內(nèi)核的速度為2 GHz。為了評(píng)估本文算法的可擴(kuò)展性,實(shí)驗(yàn)中模擬了不同數(shù)量的節(jié)點(diǎn),分別為50、100、150、200、250、300、350和400。每個(gè)節(jié)點(diǎn)都運(yùn)行Hyperledger Fabric區(qū)塊鏈客戶端軟件的一個(gè)實(shí)例。本文使用Python編程實(shí)現(xiàn)了用戶客戶端應(yīng)用程序,并為每個(gè)用戶分配了公鑰和私鑰。實(shí)驗(yàn)中EHR數(shù)據(jù)采用了某醫(yī)院外科提供的100份脫敏后的EHR。
5.1 存儲(chǔ)空間
為了評(píng)估本文方法在存儲(chǔ)空間上的性能,記錄區(qū)塊鏈系統(tǒng)在寫入不同份數(shù)EHR記錄時(shí)所需的存儲(chǔ)空間,區(qū)塊鏈中的節(jié)點(diǎn)數(shù)設(shè)置為50個(gè)。實(shí)驗(yàn)中將本文方法與傳統(tǒng)鏈上+鏈下結(jié)合存儲(chǔ)的方式進(jìn)行性能對(duì)比,實(shí)驗(yàn)結(jié)果如圖6所示。從圖6中可以看出,隨著上鏈存儲(chǔ)的EHR數(shù)量越多,區(qū)塊鏈系統(tǒng)所需的存儲(chǔ)空間越大,并且傳統(tǒng)鏈上+鏈下存儲(chǔ)方法的增長(zhǎng)速度較大,而本文方法增長(zhǎng)較為平緩,在全部100份EHR記錄上鏈存儲(chǔ)時(shí),傳統(tǒng)方法所需的存儲(chǔ)空間在3.2 MB左右,而本文方法僅需0.46 MB。其原因是傳統(tǒng)鏈上+鏈下的存儲(chǔ)方式將完整的電子健康記錄存儲(chǔ)在鏈下的數(shù)據(jù)庫(kù)中,而鏈上存儲(chǔ)鏈下數(shù)據(jù)的映射關(guān)系,并且鏈上的每個(gè)節(jié)點(diǎn)都需要存儲(chǔ)完整的區(qū)塊鏈信息(含區(qū)塊頭和區(qū)塊體),雖然區(qū)塊體中不再包含具體的交易信息,而是一些數(shù)據(jù)存儲(chǔ)關(guān)系映射,但當(dāng)節(jié)點(diǎn)數(shù)增多時(shí),鏈上存儲(chǔ)壓力仍然較大。而本文方法中鏈上的每個(gè)節(jié)點(diǎn)都只需要存儲(chǔ)其親友節(jié)點(diǎn)的數(shù)據(jù)和區(qū)塊頭信息,在節(jié)點(diǎn)數(shù)較多和需存儲(chǔ)的EHR增多時(shí)具有顯著優(yōu)勢(shì)。實(shí)驗(yàn)中,親友節(jié)點(diǎn)數(shù)設(shè)置為10,雖然隨著親友節(jié)點(diǎn)數(shù)的增大,其存儲(chǔ)空間會(huì)增大,但增長(zhǎng)幅度非常小。從存儲(chǔ)空間的實(shí)驗(yàn)結(jié)果來看,本文方法可大大節(jié)省鏈上存儲(chǔ)空間,具有較好的可擴(kuò)展性。當(dāng)然本文方法需限制親友節(jié)點(diǎn)數(shù)大小,因?yàn)橛H友節(jié)點(diǎn)會(huì)冗余存儲(chǔ)完整數(shù)據(jù)。
5.2 時(shí)延
在時(shí)延的仿真實(shí)驗(yàn)中,主要對(duì)比了系統(tǒng)中數(shù)據(jù)的訪問時(shí)延和系統(tǒng)在執(zhí)行不同共識(shí)算法時(shí)的時(shí)延。數(shù)據(jù)的訪問時(shí)延對(duì)比了文獻(xiàn)[9]的云服務(wù)器存儲(chǔ)方法和本文采用的分布式文件系統(tǒng),記錄了系統(tǒng)在處理不同并發(fā)訪問次數(shù)時(shí)的耗時(shí)(所有訪問全部成功執(zhí)行所需的時(shí)間),實(shí)驗(yàn)結(jié)果如圖7所示。
從圖7可以看出,隨著系統(tǒng)中并發(fā)訪問數(shù)增多,兩種方法的數(shù)據(jù)訪問所需時(shí)延都在增大,但文獻(xiàn)[9]明顯大于本文方法,在并發(fā)訪問數(shù)達(dá)到100時(shí),文獻(xiàn)[9]所需的時(shí)延約為16 min,而本文方法僅需0.5 min左右。特別注意的是,當(dāng)并發(fā)訪問數(shù)達(dá)到60后,文獻(xiàn)[9]的訪問時(shí)延增長(zhǎng)速度明顯增大。其原因是文獻(xiàn)[9]將所有EHR都存儲(chǔ)在中心化的云服務(wù)器中,當(dāng)并發(fā)訪問數(shù)增大,云服務(wù)的處理壓力將會(huì)顯著增大,雖然目前的云服務(wù)器都有任務(wù)負(fù)載均衡的機(jī)制,但當(dāng)處理請(qǐng)求達(dá)到云服務(wù)器的處理瓶頸時(shí),系統(tǒng)的訪問時(shí)延將會(huì)受到較大影響。而本文方法將EHR數(shù)據(jù)分布式地存儲(chǔ)在不同的服務(wù)器中,當(dāng)并發(fā)訪問數(shù)增多時(shí),所需的時(shí)延雖然會(huì)增大,但分布式的服務(wù)器較大程度緩解了集中式的訪問瓶頸問題。
圖8給出了模擬不同共識(shí)算法在不同節(jié)點(diǎn)數(shù)量下達(dá)成共識(shí)所需的時(shí)延,分別比較了本文方法(CPBFT)和(PBFT)[4]、PoS[10]和IBFT[13]。從圖8中可以看出,三種基于PBFT的共識(shí)算法比PoS具有更低的時(shí)延,這是因?yàn)镻oS是基于PoW共識(shí)機(jī)制進(jìn)行改進(jìn)的,雖然不再需要消耗大量的能量去“挖礦”,在一定程度上縮短了共識(shí)達(dá)成的時(shí)間,但本質(zhì)上仍然需要“挖礦”取得代幣,通過“幣齡”來確定參與共識(shí)的節(jié)點(diǎn)。IBFT和CPBFT共識(shí)均是在PBFT基礎(chǔ)上進(jìn)行改進(jìn)的,在共識(shí)時(shí)延上具有明顯改進(jìn)。值得注意的是,本文CPBFT時(shí)延低于IBFT,這是因?yàn)榍罢咝枰~外計(jì)算參與共識(shí)節(jié)點(diǎn)的信用值,在每輪共識(shí)結(jié)束后,都要進(jìn)行節(jié)點(diǎn)信用值和領(lǐng)導(dǎo)者節(jié)點(diǎn)集的更新。當(dāng)然,CPBFT共識(shí)算法在共識(shí)流程中還有待進(jìn)一步的優(yōu)化,特別是引入節(jié)點(diǎn)信用值后,可以將算法的五階段流程進(jìn)行精簡(jiǎn),提高共識(shí)效率。
5.3 吞吐量
本文設(shè)置系統(tǒng)并發(fā)事務(wù)量為200 筆/s,吞吐量對(duì)比實(shí)驗(yàn)如圖9所示。從圖9可以看出,四種不同共識(shí)算法的吞吐量隨著參與共識(shí)節(jié)點(diǎn)的數(shù)量增多而緩慢下降,原因是在固定的交易數(shù)量下,共識(shí)所需的時(shí)延在增大。四種方法中PoS的吞吐量最低,在138~150 TPS,PBFT次之,吞吐量在235~221 TPS,IBFT和本文CPBFT的吞吐量較為接近,其中IBFT略高于CPBFT。原因在于,PoS共識(shí)需要花費(fèi)最多的時(shí)間來選取主節(jié)點(diǎn),PBFT共識(shí)在選取主節(jié)點(diǎn)上進(jìn)行了優(yōu)化,能大大加快主節(jié)點(diǎn)生成時(shí)間,CPBFT增加了節(jié)點(diǎn)信用值的計(jì)算,所需的時(shí)間略高于IBFT。
5.4 主節(jié)點(diǎn)作惡
雖然本文CPBFT在時(shí)延和吞吐量上相比IBFT不具有優(yōu)勢(shì),但在主節(jié)點(diǎn)選擇的安全性上具有更好的性能。圖10給出了四種不同的方法在不同的共識(shí)次數(shù)后,發(fā)現(xiàn)惡意節(jié)點(diǎn)作惡的概率。實(shí)驗(yàn)中限定50個(gè)共識(shí)節(jié)點(diǎn),其中從第5輪共識(shí)開始,隨機(jī)從50個(gè)節(jié)點(diǎn)中選擇10%的節(jié)點(diǎn)作惡。從圖10可以看出,所有的共識(shí)算法隨著共識(shí)次數(shù)的增大,可以逐漸發(fā)現(xiàn)惡意節(jié)點(diǎn)。其中,PoS具有非常低的惡意節(jié)點(diǎn)驅(qū)逐概率,基本沒有抗拜占庭節(jié)點(diǎn)的能力;三種類PBFT算法具有較好的抗拜占庭節(jié)點(diǎn)能力,在共識(shí)次數(shù)超過60次時(shí),可以排除70%的惡意節(jié)點(diǎn),其中本文CPBFT具有最好的性能,明顯高于PBFT和IBFT,在共識(shí)次數(shù)達(dá)到70次時(shí),能識(shí)別所有作惡節(jié)點(diǎn)。原因在于:PoS共識(shí)算法沒有考慮拜占庭容錯(cuò)問題;PBFT支持拜占庭容錯(cuò)但需要一定時(shí)間的視圖切換才能定位故障節(jié)點(diǎn);IBFT在PBFT基礎(chǔ)上改進(jìn),優(yōu)化了共識(shí)流程,能更快地發(fā)現(xiàn)故障節(jié)點(diǎn);CPBFT引入了信用機(jī)制,通過節(jié)點(diǎn)信用值能有效驅(qū)逐惡意節(jié)點(diǎn)。
6 結(jié)束語
本文提出了一種基于區(qū)塊鏈和親友節(jié)點(diǎn)的EHR安全共享方案。采用鏈上+鏈下結(jié)合存儲(chǔ)的方式確保了數(shù)據(jù)的安全性和訪問效率,鏈下采用DFS分布式文件系統(tǒng)存儲(chǔ)電子健康記錄,鏈上采用聯(lián)盟鏈存儲(chǔ)電子健康記錄的映射關(guān)系。首次提出親友節(jié)點(diǎn)集和多簽名技術(shù)的數(shù)據(jù)存儲(chǔ)和訪問方法,節(jié)點(diǎn)的EHR數(shù)據(jù)僅存儲(chǔ)在其親友節(jié)點(diǎn)中,鏈上僅存儲(chǔ)區(qū)塊頭信息,大大節(jié)省了存儲(chǔ)空間,通過多簽名技術(shù)構(gòu)造出用戶私鑰,解決了緊急情況下的授權(quán)訪問問題。另外,設(shè)計(jì)了基于信用的拜占庭容錯(cuò)算法,提升了共識(shí)效率和安全性。實(shí)驗(yàn)結(jié)果表明,本文方案相比現(xiàn)有基于區(qū)塊鏈的解決方案表現(xiàn)更好,同時(shí)提供了更好的數(shù)據(jù)安全性和訪問效率。下一步將在CPBFT基礎(chǔ)上進(jìn)行優(yōu)化,精簡(jiǎn)共識(shí)流程,并設(shè)計(jì)結(jié)構(gòu)化的拓?fù)浣Y(jié)構(gòu)來進(jìn)一步提升共識(shí)算法的效率。
參考文獻(xiàn):
[1]Valeria M, Gianvito P, Francesco G, et al. On the exploitation of the blockchain technology in the healthcare sector: a systematic review[J]. Expert Systems with Applications, 2023, 213: 118897.
[2]Kumar A, Krishnamurthi R, Nayyar A, et al. A novel smart healthcare design, simulation, and implementation using healthcare 4.0 processes[J]. IEEE Access, 2020, 8: 118433-118471.
[3]王利朋, 關(guān)志, 李青山, 等. 區(qū)塊鏈數(shù)據(jù)安全服務(wù)綜述[J]. 軟件學(xué)報(bào), 2023,34(1):1-32. (Wang Lipeng, Guan Zhi, Li Qingshan, et al. Survey on blockchain-based security services[J]. Journal of Software, 2023,34(1): 1-32.)
[4]張磊, 鄭志勇, 袁勇. 基于區(qū)塊鏈的電子醫(yī)療病歷可控共享模型[J]. 自動(dòng)化學(xué)報(bào), 2021,47(9): 2143-2153. (Zhang Lei, Zheng Zhiyong, Yuan Yong. A controllable sharing model for electronic health records based on blockchain[J]. Acta Automatica Sinica, 2021,47(9): 2143-2153.)
[5]陳友榮, 陳浩, 韓蒙, 等. 基于信用等級(jí)劃分的醫(yī)療數(shù)據(jù)安全共識(shí)算法[J]. 電子與信息學(xué)報(bào), 2022,44(1): 279-287. (Chen Yourong, Chen Hao, Han Meng, et al. Security consensus algorithm of medical data based on credit rating[J]. Journal of Electronics & Information Technology, 2022,44(1): 279-287.)
[6]Azaria A, Ekblaw A, Vieira T, et al. MedRec: using blockchain for medical data access and permission management[C]//Proc of the 2nd International Conference on Open and Big Data. Piscataway, NJ: IEEE Press, 2016: 25-30.
[7]Daraghmi E, Daraghmi Y, Yuan S. Medchain: a design of blockchain-based system for medical records access and permissions management[J]. IEEE Access, 2019,7: 164595-164613.
[8]Tanwar S, Parekh K, Evans R. Blockchain-based electronic healthcare record system for healthcare 4.0 applications[J] . Journal of Information Security and Applications, 2020,50: 102407.
[9]Huang Haiping, Zhu Peng, Xiao Fu, et al. A blockchain-based scheme for privacy-preserving and secure sharing of medical data[J]. Compu-ters & Security, 2020, 99:102010.
[10]Deepika K M, Sanjay H A, Mohan M M K. Blockchain-based decentralized security using crypto-proof of stake for securing sensitive personal health care records[J]. Advances in Engineering Software, 2022,173: 103235.
[11]Rajesh K, Jay K, Abdullah A K, et al. Blockchain and homomorphic encryption based privacy-preserving model aggregation for medical images[J]. Computerized Medical Imaging and Graphics, 2022,102: 102139.
[12]Erikson J A, Alyson J S, Rodolfo I M, et al. A blockchain-based protocol for tracking user access to shared medical imaging[J]. Future Generation Computer Systems, 2022,134: 348-360.
[13]Shuaib K, Abdella J, Sallabi F, et al. Secure decentralized electro-nic health records sharing system based on blockchains[J]. Journal of King Saud University-Computer and Information Sciences, 2022,34(8): 5045-5058.
[14]Sharda T, Namrata D, Harsh D. A real time secured medical management system based on blockchain and Internet of Things[J]. Measurement: Sensors, 2023, 25: 100630.
[15]Qi Pian, Chiaro D, Giampaolo F, et al. A blockchain-based secure Internet of medical things framework for stress detection[J]. Information Sciences, 2023, 628: 377-390.
[16]Priyanka S, Balasubramanian R. Reversible data hiding based on Shamirs secret sharing for color images over cloud[J]. Information Sciences, 2018,422: 77-97.
[17]劉惠文, 謝才炳, 鄧小鴻. 基于信用的區(qū)塊鏈共識(shí)算法對(duì)比研究[J]. 計(jì)算機(jī)應(yīng)用研究, 2023,40(2): 321-327. (Liu Huiwen, Xie Caibing, Deng Xiaohong. Comparative research on blockchain consensus algorithm based on credit[J]. Application Research of Computers, 2023,40(2): 321-327.)
[18]Deng Xiaohong, Li Kangting, Wang Zhiqiang, et al. A novel consensus algorithm based on segmented DAG and BP neural network for consortium blockchain[J]. Security and Communication Networks, 2022, 2022: 1060765.