徐磊
(中國人民解放軍聯(lián)勤保障部隊第九六〇醫(yī)院, 山東 濟(jì)南 250032)
區(qū)塊鏈(Blockchain)是比特幣的底層技術(shù),最早的用途為記錄比特幣交易的數(shù)據(jù)結(jié)構(gòu),當(dāng)前對于區(qū)塊鏈技術(shù)的概念,學(xué)術(shù)界還沒有進(jìn)行統(tǒng)一的定義,袁勇指出狹義的區(qū)塊鏈?zhǔn)歉鶕?jù)時間順序?qū)?shù)據(jù)結(jié)構(gòu)進(jìn)行特定組合,并且這些數(shù)據(jù)以鏈條的方式進(jìn)行鏈接,利用密碼學(xué)的方式確保醫(yī)療數(shù)據(jù)不能被任意篡改,避免偽造去中心化總賬;廣義的區(qū)塊鏈技術(shù)采用鏈?zhǔn)降募用芙Y(jié)構(gòu)用來驗證、存儲相應(yīng)的數(shù)據(jù),利用分布式節(jié)點共識算法來生成和更新數(shù)據(jù),利用自動化腳本代碼對數(shù)據(jù)進(jìn)行編程和操作的一種新型的去中心化基礎(chǔ)架構(gòu)與分布式計算范式[1-4]。在《中國區(qū)塊鏈技術(shù)和應(yīng)用發(fā)展白皮書(2016)》中將區(qū)塊鏈定義為一種分布式數(shù)據(jù)存儲、點對點傳輸、加密算法等計算機(jī)技術(shù)在互聯(lián)網(wǎng)時代的創(chuàng)新應(yīng)用模式[5-7]。
區(qū)塊鏈具有去中心化、集體維護(hù)性、自信任性、可編程性、可驗證性和可追溯性。文獻(xiàn)[8—10]中提出利用區(qū)塊鏈分布式存儲技術(shù),可以降低數(shù)據(jù)在存儲中被破壞或者被篡改的幾率。采用區(qū)塊鏈雙鏈結(jié)構(gòu)形成鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu),在一定程度上保證了農(nóng)產(chǎn)品數(shù)據(jù)不會被惡意篡改或破壞。聯(lián)盟區(qū)塊鏈在性能、編程、隱私保護(hù)等方面更加具有優(yōu)勢,被稱之為“多中心”或“部分去中心化”的區(qū)塊鏈。由于醫(yī)療健康數(shù)據(jù)量較大,對于區(qū)塊鏈交易的效率要求也在不斷提高,聯(lián)盟鏈的節(jié)點數(shù)少,單位時間內(nèi)確認(rèn)的交易數(shù)量多,因此,本文基于聯(lián)盟區(qū)塊鏈設(shè)計醫(yī)療健康數(shù)據(jù)安全模型,為提高醫(yī)療健康數(shù)據(jù)的安全性提供技術(shù)支撐與參考。
本文設(shè)計了基于聯(lián)盟區(qū)塊鏈的醫(yī)療健康數(shù)據(jù)安全模型,通過該安全模型分布式存儲醫(yī)療健康數(shù)據(jù),提高醫(yī)療健康數(shù)據(jù)存儲的安全性,改變醫(yī)療健康數(shù)據(jù)易被篡改、壟斷及共享難的問題,真正實現(xiàn)去中心及不可更改的安全存儲目的。醫(yī)療健康數(shù)據(jù)區(qū)塊鏈保存了所有醫(yī)療數(shù)據(jù)完整的歷史記錄,涵蓋了EMR(Electronic Medical Record,計算機(jī)化的病案系統(tǒng))、訪問、處方、賬單和IoT數(shù)據(jù),這些數(shù)據(jù)將永遠(yuǎn)跟隨單個用戶。醫(yī)療健康數(shù)據(jù)安全存儲模型包括用戶端、基礎(chǔ)服務(wù)平臺(醫(yī)療機(jī)構(gòu)節(jié)點平臺)、聯(lián)盟區(qū)塊鏈及分布式存儲集群、監(jiān)控平臺組成。
(1) 用戶端。用戶端包含多種具有不同角色的用戶,比如醫(yī)生可以根據(jù)患者曾經(jīng)的治療記錄及用藥情況等開出治療處方;藥劑師可以通過終端對患者的用藥進(jìn)行指導(dǎo);患者可以通過訪問這些信息及時了解自身的健康狀態(tài);管理員可以訪問這些數(shù)據(jù)信息,確認(rèn)信息是否完整、可靠。
(2) 基礎(chǔ)服務(wù)平臺。聯(lián)盟區(qū)塊鏈?zhǔn)菍崿F(xiàn)醫(yī)療數(shù)據(jù)安全存儲的關(guān)鍵,通過區(qū)塊鏈能夠?qū)灰子涗涍M(jìn)行追溯,數(shù)據(jù)不可被篡改,對醫(yī)療健康數(shù)據(jù)進(jìn)行訪問時,首先在區(qū)塊鏈中存儲醫(yī)療數(shù)據(jù)的元數(shù)據(jù),并在區(qū)塊鏈中的不同節(jié)點上調(diào)用、部署智能合約。部署好智能合約之后,基礎(chǔ)服務(wù)平臺根據(jù)用戶的訪問需求調(diào)用患者的醫(yī)療健康數(shù)據(jù),產(chǎn)生交易記錄存儲在聯(lián)盟區(qū)塊鏈中,不同區(qū)塊鏈節(jié)點上的信息永久保存、不可更改,因此,保證了生成的患者的醫(yī)療健康數(shù)據(jù)的真實性和可靠性,同時也可以實現(xiàn)數(shù)據(jù)訪問的溯源?;A(chǔ)服務(wù)平臺處于中間層,向上與用戶端(醫(yī)生、管理員、護(hù)士及患者本身)通信,基礎(chǔ)服務(wù)平臺與用戶端的通信通過業(yè)務(wù)邏輯封裝的RESTful接口實現(xiàn);基礎(chǔ)服務(wù)平臺與分布式服務(wù)器集群之間的網(wǎng)關(guān)及以太坊節(jié)點通信通過調(diào)用網(wǎng)關(guān)接口實現(xiàn),調(diào)用網(wǎng)關(guān)接口實現(xiàn)醫(yī)療健康數(shù)據(jù)的上傳,生成元數(shù)據(jù)之后調(diào)用智能合約將數(shù)據(jù)存儲在聯(lián)盟區(qū)塊鏈中。
(3) 聯(lián)盟區(qū)塊鏈及分布式存儲集群。由于聯(lián)盟區(qū)塊鏈的存儲空間有限,不能單獨完成醫(yī)療健康數(shù)據(jù)的存儲,本文中應(yīng)用了分布式數(shù)據(jù)庫(DDB)存儲醫(yī)療健康數(shù)據(jù),數(shù)據(jù)存儲時采用代理重加密的方式將一個數(shù)據(jù)塊(數(shù)據(jù)摘要、貢獻(xiàn)節(jié)點簽名、地址)加密哈希后存放在默克爾樹的葉子節(jié)點,利用默克爾樹的結(jié)構(gòu)逐級向上哈希得到Merkle根,最后作為一個區(qū)塊放入?yún)^(qū)塊鏈中。這種存儲方式具有不可抵賴、不可改變的優(yōu)勢。
(4) 監(jiān)控平臺。監(jiān)控平臺定期地對DDB集群、聯(lián)盟區(qū)塊鏈網(wǎng)絡(luò)結(jié)構(gòu)及以太坊節(jié)點的相關(guān)信息,以判定醫(yī)療健康數(shù)據(jù)是否處于健康的狀態(tài)。
醫(yī)療健康數(shù)據(jù)存儲于區(qū)塊鏈及分布式存儲系統(tǒng),為了提高區(qū)塊鏈對于醫(yī)療健康數(shù)據(jù)的輸入輸出效率,安全模型在應(yīng)用過程中自動封裝不同節(jié)點的醫(yī)療健康數(shù)據(jù)上傳至分布式存儲系統(tǒng),區(qū)塊鏈的數(shù)據(jù)存儲在不同的塊中,形成不同的數(shù)據(jù)存儲塊,區(qū)塊鏈不能直接對數(shù)據(jù)存儲塊的結(jié)構(gòu)進(jìn)行判別,需要對數(shù)據(jù)標(biāo)識進(jìn)行自定義以實現(xiàn)數(shù)據(jù)的快速查詢。數(shù)據(jù)標(biāo)識形成之后,設(shè)置區(qū)塊鏈的訪問控制策略,訪問控制通過之后交易才能寫入?yún)^(qū)塊鏈,具體實現(xiàn)流程如圖1所示。
圖1 醫(yī)療健康數(shù)據(jù)存儲流程
基礎(chǔ)服務(wù)平臺屬于中間模塊,為用戶端提供RESTful API調(diào)用業(yè)務(wù)邏輯,向下與聯(lián)盟區(qū)塊鏈及分布式存儲集群執(zhí)行數(shù)據(jù)的訪問及存儲操作,通過與聯(lián)盟區(qū)塊鏈及分布式存儲集群通信創(chuàng)建及查詢數(shù)據(jù)存入以太坊節(jié)點。用戶端發(fā)出醫(yī)療健康數(shù)據(jù)的相關(guān)請求,調(diào)用基礎(chǔ)服務(wù)平臺中的API完成醫(yī)療健康數(shù)據(jù)的訪問操作或者上傳操作。應(yīng)用Node.js技術(shù)實現(xiàn)基礎(chǔ)服務(wù)平臺管理,基礎(chǔ)服務(wù)平臺與其他模塊通信如圖2所示。
圖2 基礎(chǔ)服務(wù)平臺與其他模塊通信
基礎(chǔ)服務(wù)平臺模塊接入到以太坊節(jié)點,使用Web3.js庫提供的Web3對象,與以太坊的通信關(guān)鍵代碼如下。
Datamanage.setProvider(web3.currentProvider);DataManage.deployed().then (function(instance){meta=instance;meta.insertMetaData(key,timestamp,bucket,url,digest,{ac-count});});
醫(yī)療健康數(shù)據(jù)的所有者為患者,醫(yī)療結(jié)構(gòu)管理者上傳醫(yī)療健康數(shù)據(jù)時需要先創(chuàng)建智能合約,然后形成醫(yī)療健康數(shù)據(jù)的訪問控制策略acpi,采用身份驗證的形式對醫(yī)療健康數(shù)據(jù)文件進(jìn)行加密,獲得加密之后的文件Fi、密文Ci,F(xiàn)i、Ci上傳到分布式數(shù)據(jù)庫;分布式數(shù)據(jù)庫根據(jù)Fi計算得到唯一的Hash值Hashi,將Hashi返回給醫(yī)療機(jī)構(gòu),醫(yī)療機(jī)構(gòu)調(diào)用智能合約將Hashi及相關(guān)的交易信息存儲在以太坊區(qū)塊鏈上;醫(yī)療機(jī)構(gòu)在調(diào)用患者的醫(yī)療健康數(shù)據(jù)時可以驗證Hashi版權(quán)信息,防止信息被篡改,同時允許其他醫(yī)療機(jī)構(gòu)對醫(yī)療健康數(shù)據(jù)進(jìn)行訪問;其他醫(yī)療機(jī)構(gòu)在對醫(yī)療健康數(shù)據(jù)進(jìn)行訪問需要獲取Fi時,先對區(qū)塊ID發(fā)出請求獲取鏈上存儲的Hashi,根據(jù)Hashi在分布式數(shù)據(jù)庫中查找相應(yīng)的內(nèi)容,通過密鑰keyi對文件進(jìn)行解密獲得相關(guān)的醫(yī)療健康數(shù)據(jù)信息。
醫(yī)療健康數(shù)據(jù)的訪問權(quán)限控制具體如下:設(shè)計用戶的訪問控制策略acpi=(〈Ui,seqi〉,R,P),其中,Ui為醫(yī)療健康數(shù)據(jù)所有者的患者或醫(yī)療機(jī)構(gòu)集合;seqi為醫(yī)療健康數(shù)據(jù)請求訪問中的序列號;R為醫(yī)療健康數(shù)據(jù)訪問的角色集合;P為不同用戶訪問醫(yī)療健康數(shù)據(jù)的權(quán)限屬性。醫(yī)療健康數(shù)據(jù)訪問控制策略acpi可以根據(jù)不同用戶進(jìn)行個性化訪問控制。用戶訪問醫(yī)療健康數(shù)據(jù)時,先發(fā)送seqi,如果滿足acpi中的用戶屬性權(quán)限P,則對請求進(jìn)行描述:允許或拒絕。其中策略信息是不可更改的、可驗證及可追溯的,在訪問控制中通過智能合約對訪問控制策略進(jìn)行裁決。
醫(yī)療健康數(shù)據(jù)被存儲在聯(lián)盟區(qū)塊鏈中之后,可以通過訪問申請實現(xiàn)對醫(yī)療健康數(shù)據(jù)的利用,數(shù)據(jù)的利用流程如下。
患者或醫(yī)療機(jī)構(gòu)提出醫(yī)療健康數(shù)據(jù)利用請求、執(zhí)行智能合約、發(fā)送醫(yī)療健康數(shù)據(jù)信息、讀取醫(yī)療健康數(shù)據(jù)信息,流程圖如圖3所示。
圖3 聯(lián)盟區(qū)塊鏈中醫(yī)療健康數(shù)據(jù)信息資源利用流程
智能合約是醫(yī)療健康數(shù)據(jù)安全模型的關(guān)鍵組件之一,通過該合約實現(xiàn)醫(yī)療健康數(shù)據(jù)訪問的業(yè)務(wù)邏輯,醫(yī)療健康數(shù)據(jù)安全模型的用戶主要有兩種身份,一是醫(yī)療機(jī)構(gòu),二是患者本人。醫(yī)療健康數(shù)據(jù)加密后存入分布式數(shù)據(jù)庫,實現(xiàn)文件的分布式共享存儲?;颊呋蜥t(yī)療機(jī)構(gòu)(信息上傳者)和其他醫(yī)療機(jī)構(gòu)之間利用智能合約產(chǎn)生交易,交易信息驗證之后存入?yún)^(qū)塊鏈,這樣可以確保信息的完整及不被篡改。智能合約在設(shè)計中基于 Truffle 框架開發(fā),采用Solidity 語言進(jìn)行編寫,通過智能合約可以實現(xiàn)分類賬事務(wù),通過智能合約運行程序?qū)⒉煌聞?wù)追加到個人醫(yī)療健康數(shù)據(jù)信息中,更新分類賬的狀態(tài),將分類賬結(jié)果返回至基礎(chǔ)服務(wù)平臺,最后返回至用戶。比如,患者可以通過向智能合約更新醫(yī)療健康數(shù)據(jù)信息、查詢醫(yī)療健康數(shù)據(jù)信息。
(1) 提出醫(yī)療健康數(shù)據(jù)利用請求
有權(quán)利提出醫(yī)療健康數(shù)據(jù)利用請求的用戶包含兩類:一類是外部醫(yī)療機(jī)構(gòu)通過API接入;另一類是授權(quán)節(jié)點A中的醫(yī)療機(jī)構(gòu)或患者本人。如果是第一類用戶的醫(yī)療機(jī)構(gòu)提出信息利用請求時,先對醫(yī)療機(jī)構(gòu)的身份進(jìn)行驗證,制定相應(yīng)的訪問控制策略seqi,如果允許則對醫(yī)療健康數(shù)據(jù)信息進(jìn)行加密,形成密文Fi及對應(yīng)的私鑰發(fā)送至分布式存儲數(shù)據(jù)庫。
(2) 執(zhí)行智能合約
分布式存儲數(shù)據(jù)庫驗證授權(quán)節(jié)點A的信息后,生成一份智能合約,將智能合約利用設(shè)置的seqi、私鑰對Fi進(jìn)行解密,解密之后利用公鑰對醫(yī)療健康數(shù)據(jù)信息進(jìn)行再加密。
(3) 發(fā)送醫(yī)療健康數(shù)據(jù)信息
分布式存儲數(shù)據(jù)庫將加密之后的醫(yī)療健康數(shù)據(jù)信息文件返回至授權(quán)節(jié)點A。
(4) 讀取醫(yī)療健康數(shù)據(jù)信息
當(dāng)授權(quán)節(jié)點A收到加密的醫(yī)療健康數(shù)據(jù)之后,利用自身的私鑰對數(shù)據(jù)信息進(jìn)行解密之后發(fā)送至用戶端,實現(xiàn)醫(yī)療健康數(shù)據(jù)的訪問。
聯(lián)盟鏈由不同的以太坊節(jié)點構(gòu)成,這些節(jié)點是確保醫(yī)療健康數(shù)據(jù)安全的關(guān)鍵核心組件,因此,需要對以太坊節(jié)點狀態(tài)進(jìn)行監(jiān)控,如果存在問題及時進(jìn)行修復(fù)。分布式存儲集群(ceph集群)是醫(yī)療健康數(shù)據(jù)存儲的核心組件,也需要對分布式存儲集群的狀態(tài)信息進(jìn)行監(jiān)控。監(jiān)控平臺的主要功能包括獲取以太坊節(jié)點信息及分布式存儲集群信息,一旦發(fā)現(xiàn)處于非健康狀態(tài)則向管理員發(fā)出報警信息,報警信息的發(fā)送通過郵件發(fā)送函數(shù)實現(xiàn)。醫(yī)療健康數(shù)據(jù)的狀態(tài)監(jiān)控平臺通過librados與集群通信執(zhí)行ceph命令。
為了分析醫(yī)療健康數(shù)據(jù)安全模型的應(yīng)用效果,構(gòu)建了一個計算機(jī)仿真平臺,該仿真平臺共運行了12臺計算機(jī),計算機(jī)的操作系統(tǒng)為Linux,計算機(jī)內(nèi)存為16 GB,CPU為i5-2 400,Linux系統(tǒng)版本是16.04。全部計算機(jī)安裝在同一個局域網(wǎng)中,配置區(qū)塊鏈的基礎(chǔ)設(shè)施。
在基于聯(lián)盟區(qū)塊鏈的醫(yī)療健康數(shù)據(jù)安全模型設(shè)計中,通過分布式存儲系統(tǒng)存儲醫(yī)療健康數(shù)據(jù),封裝數(shù)據(jù)之后得到Hashi,將Hashi存入?yún)^(qū)塊鏈,每筆交易的數(shù)據(jù)大小為2 153 bit。
設(shè)計的訪問控制策略對醫(yī)療健康數(shù)據(jù)訪問過程進(jìn)行模擬,分別模擬600、800、3 000、5 000個節(jié)點參與到聯(lián)盟鏈中,模擬分析結(jié)果表明,隨著聯(lián)盟鏈的節(jié)點數(shù)目的增加,數(shù)據(jù)交易效率先增加后下降,當(dāng)節(jié)點數(shù)目在1 000之內(nèi),交易效率急速增長;當(dāng)節(jié)點在3 000、5 000時,交易效率有所下降,如圖4所示。
圖4 區(qū)塊鏈交易效率
區(qū)塊鏈的主要安全風(fēng)險為遭遇攻擊之后修改區(qū)塊數(shù)據(jù)。本文設(shè)計的醫(yī)療健康數(shù)據(jù)安全模型采用分布式的存儲系統(tǒng),避免了單點攻擊,數(shù)據(jù)存儲過程中通過加密產(chǎn)生區(qū)塊,防篡改的能力較強(qiáng)。用戶只有通過訪問控制策略的驗證才能得到密鑰解密文件,醫(yī)療健康數(shù)據(jù)文件以加密的方式將文件內(nèi)容生成唯一的Hash 值,保證了內(nèi)容不可篡改性,醫(yī)療健康數(shù)據(jù)的安全性較強(qiáng)。
隨著智慧醫(yī)療的發(fā)展,區(qū)塊鏈技術(shù)的應(yīng)用可以實現(xiàn)醫(yī)療數(shù)據(jù)的貢獻(xiàn)及安全存儲,利用區(qū)塊鏈技術(shù)可以防止醫(yī)療健康數(shù)據(jù)被篡改,同時也降低了數(shù)據(jù)的管理成本。本文提出了基于聯(lián)盟區(qū)塊鏈的醫(yī)療健康數(shù)據(jù)安全模型,期望通過設(shè)計為醫(yī)療健康數(shù)據(jù)的網(wǎng)絡(luò)安全提供幫助,設(shè)計中通過設(shè)計訪問控制策略及智能合約確保信息的安全,最后對醫(yī)療健康數(shù)據(jù)安全模型的交易效率及安全性進(jìn)行驗證,結(jié)果表明,該模型的交易效率較高,安全性較強(qiáng)。雖然當(dāng)前聯(lián)盟區(qū)塊鏈技術(shù)在醫(yī)療保健中的應(yīng)用處于初級研究階段,但是該技術(shù)的應(yīng)用效果較好,為醫(yī)療保健行業(yè)的發(fā)展提供一種可行的方法。