徐磊
(中國人民解放軍聯勤保障部隊第九六〇醫院, 山東 濟南 250032)
區塊鏈(Blockchain)是比特幣的底層技術,最早的用途為記錄比特幣交易的數據結構,當前對于區塊鏈技術的概念,學術界還沒有進行統一的定義,袁勇指出狹義的區塊鏈是根據時間順序將數據結構進行特定組合,并且這些數據以鏈條的方式進行鏈接,利用密碼學的方式確保醫療數據不能被任意篡改,避免偽造去中心化總賬;廣義的區塊鏈技術采用鏈式的加密結構用來驗證、存儲相應的數據,利用分布式節點共識算法來生成和更新數據,利用自動化腳本代碼對數據進行編程和操作的一種新型的去中心化基礎架構與分布式計算范式[1-4]。在《中國區塊鏈技術和應用發展白皮書(2016)》中將區塊鏈定義為一種分布式數據存儲、點對點傳輸、加密算法等計算機技術在互聯網時代的創新應用模式[5-7]。
區塊鏈具有去中心化、集體維護性、自信任性、可編程性、可驗證性和可追溯性。文獻[8—10]中提出利用區塊鏈分布式存儲技術,可以降低數據在存儲中被破壞或者被篡改的幾率。采用區塊鏈雙鏈結構形成鏈式數據結構,在一定程度上保證了農產品數據不會被惡意篡改或破壞。聯盟區塊鏈在性能、編程、隱私保護等方面更加具有優勢,被稱之為“多中心”或“部分去中心化”的區塊鏈。由于醫療健康數據量較大,對于區塊鏈交易的效率要求也在不斷提高,聯盟鏈的節點數少,單位時間內確認的交易數量多,因此,本文基于聯盟區塊鏈設計醫療健康數據安全模型,為提高醫療健康數據的安全性提供技術支撐與參考。
本文設計了基于聯盟區塊鏈的醫療健康數據安全模型,通過該安全模型分布式存儲醫療健康數據,提高醫療健康數據存儲的安全性,改變醫療健康數據易被篡改、壟斷及共享難的問題,真正實現去中心及不可更改的安全存儲目的。醫療健康數據區塊鏈保存了所有醫療數據完整的歷史記錄,涵蓋了EMR(Electronic Medical Record,計算機化的病案系統)、訪問、處方、賬單和IoT數據,這些數據將永遠跟隨單個用戶。醫療健康數據安全存儲模型包括用戶端、基礎服務平臺(醫療機構節點平臺)、聯盟區塊鏈及分布式存儲集群、監控平臺組成。
(1) 用戶端。用戶端包含多種具有不同角色的用戶,比如醫生可以根據患者曾經的治療記錄及用藥情況等開出治療處方;藥劑師可以通過終端對患者的用藥進行指導;患者可以通過訪問這些信息及時了解自身的健康狀態;管理員可以訪問這些數據信息,確認信息是否完整、可靠。
(2) 基礎服務平臺。聯盟區塊鏈是實現醫療數據安全存儲的關鍵,通過區塊鏈能夠對交易記錄進行追溯,數據不可被篡改,對醫療健康數據進行訪問時,首先在區塊鏈中存儲醫療數據的元數據,并在區塊鏈中的不同節點上調用、部署智能合約。部署好智能合約之后,基礎服務平臺根據用戶的訪問需求調用患者的醫療健康數據,產生交易記錄存儲在聯盟區塊鏈中,不同區塊鏈節點上的信息永久保存、不可更改,因此,保證了生成的患者的醫療健康數據的真實性和可靠性,同時也可以實現數據訪問的溯源。基礎服務平臺處于中間層,向上與用戶端(醫生、管理員、護士及患者本身)通信,基礎服務平臺與用戶端的通信通過業務邏輯封裝的RESTful接口實現;基礎服務平臺與分布式服務器集群之間的網關及以太坊節點通信通過調用網關接口實現,調用網關接口實現醫療健康數據的上傳,生成元數據之后調用智能合約將數據存儲在聯盟區塊鏈中。
(3) 聯盟區塊鏈及分布式存儲集群。由于聯盟區塊鏈的存儲空間有限,不能單獨完成醫療健康數據的存儲,本文中應用了分布式數據庫(DDB)存儲醫療健康數據,數據存儲時采用代理重加密的方式將一個數據塊(數據摘要、貢獻節點簽名、地址)加密哈希后存放在默克爾樹的葉子節點,利用默克爾樹的結構逐級向上哈希得到Merkle根,最后作為一個區塊放入區塊鏈中。這種存儲方式具有不可抵賴、不可改變的優勢。
(4) 監控平臺。監控平臺定期地對DDB集群、聯盟區塊鏈網絡結構及以太坊節點的相關信息,以判定醫療健康數據是否處于健康的狀態。
醫療健康數據存儲于區塊鏈及分布式存儲系統,為了提高區塊鏈對于醫療健康數據的輸入輸出效率,安全模型在應用過程中自動封裝不同節點的醫療健康數據上傳至分布式存儲系統,區塊鏈的數據存儲在不同的塊中,形成不同的數據存儲塊,區塊鏈不能直接對數據存儲塊的結構進行判別,需要對數據標識進行自定義以實現數據的快速查詢。數據標識形成之后,設置區塊鏈的訪問控制策略,訪問控制通過之后交易才能寫入區塊鏈,具體實現流程如圖1所示。

圖1 醫療健康數據存儲流程
基礎服務平臺屬于中間模塊,為用戶端提供RESTful API調用業務邏輯,向下與聯盟區塊鏈及分布式存儲集群執行數據的訪問及存儲操作,通過與聯盟區塊鏈及分布式存儲集群通信創建及查詢數據存入以太坊節點。用戶端發出醫療健康數據的相關請求,調用基礎服務平臺中的API完成醫療健康數據的訪問操作或者上傳操作。應用Node.js技術實現基礎服務平臺管理,基礎服務平臺與其他模塊通信如圖2所示。

圖2 基礎服務平臺與其他模塊通信
基礎服務平臺模塊接入到以太坊節點,使用Web3.js庫提供的Web3對象,與以太坊的通信關鍵代碼如下。

Datamanage.setProvider(web3.currentProvider);DataManage.deployed().then (function(instance){meta=instance;meta.insertMetaData(key,timestamp,bucket,url,digest,{ac-count});});
醫療健康數據的所有者為患者,醫療結構管理者上傳醫療健康數據時需要先創建智能合約,然后形成醫療健康數據的訪問控制策略acpi,采用身份驗證的形式對醫療健康數據文件進行加密,獲得加密之后的文件Fi、密文Ci,Fi、Ci上傳到分布式數據庫;分布式數據庫根據Fi計算得到唯一的Hash值Hashi,將Hashi返回給醫療機構,醫療機構調用智能合約將Hashi及相關的交易信息存儲在以太坊區塊鏈上;醫療機構在調用患者的醫療健康數據時可以驗證Hashi版權信息,防止信息被篡改,同時允許其他醫療機構對醫療健康數據進行訪問;其他醫療機構在對醫療健康數據進行訪問需要獲取Fi時,先對區塊ID發出請求獲取鏈上存儲的Hashi,根據Hashi在分布式數據庫中查找相應的內容,通過密鑰keyi對文件進行解密獲得相關的醫療健康數據信息。
醫療健康數據的訪問權限控制具體如下:設計用戶的訪問控制策略acpi=(〈Ui,seqi〉,R,P),其中,Ui為醫療健康數據所有者的患者或醫療機構集合;seqi為醫療健康數據請求訪問中的序列號;R為醫療健康數據訪問的角色集合;P為不同用戶訪問醫療健康數據的權限屬性。醫療健康數據訪問控制策略acpi可以根據不同用戶進行個性化訪問控制。用戶訪問醫療健康數據時,先發送seqi,如果滿足acpi中的用戶屬性權限P,則對請求進行描述:允許或拒絕。其中策略信息是不可更改的、可驗證及可追溯的,在訪問控制中通過智能合約對訪問控制策略進行裁決。
醫療健康數據被存儲在聯盟區塊鏈中之后,可以通過訪問申請實現對醫療健康數據的利用,數據的利用流程如下。
患者或醫療機構提出醫療健康數據利用請求、執行智能合約、發送醫療健康數據信息、讀取醫療健康數據信息,流程圖如圖3所示。

圖3 聯盟區塊鏈中醫療健康數據信息資源利用流程
智能合約是醫療健康數據安全模型的關鍵組件之一,通過該合約實現醫療健康數據訪問的業務邏輯,醫療健康數據安全模型的用戶主要有兩種身份,一是醫療機構,二是患者本人。醫療健康數據加密后存入分布式數據庫,實現文件的分布式共享存儲。患者或醫療機構(信息上傳者)和其他醫療機構之間利用智能合約產生交易,交易信息驗證之后存入區塊鏈,這樣可以確保信息的完整及不被篡改。智能合約在設計中基于 Truffle 框架開發,采用Solidity 語言進行編寫,通過智能合約可以實現分類賬事務,通過智能合約運行程序將不同事務追加到個人醫療健康數據信息中,更新分類賬的狀態,將分類賬結果返回至基礎服務平臺,最后返回至用戶。比如,患者可以通過向智能合約更新醫療健康數據信息、查詢醫療健康數據信息。
(1) 提出醫療健康數據利用請求
有權利提出醫療健康數據利用請求的用戶包含兩類:一類是外部醫療機構通過API接入;另一類是授權節點A中的醫療機構或患者本人。如果是第一類用戶的醫療機構提出信息利用請求時,先對醫療機構的身份進行驗證,制定相應的訪問控制策略seqi,如果允許則對醫療健康數據信息進行加密,形成密文Fi及對應的私鑰發送至分布式存儲數據庫。
(2) 執行智能合約
分布式存儲數據庫驗證授權節點A的信息后,生成一份智能合約,將智能合約利用設置的seqi、私鑰對Fi進行解密,解密之后利用公鑰對醫療健康數據信息進行再加密。
(3) 發送醫療健康數據信息
分布式存儲數據庫將加密之后的醫療健康數據信息文件返回至授權節點A。
(4) 讀取醫療健康數據信息
當授權節點A收到加密的醫療健康數據之后,利用自身的私鑰對數據信息進行解密之后發送至用戶端,實現醫療健康數據的訪問。
聯盟鏈由不同的以太坊節點構成,這些節點是確保醫療健康數據安全的關鍵核心組件,因此,需要對以太坊節點狀態進行監控,如果存在問題及時進行修復。分布式存儲集群(ceph集群)是醫療健康數據存儲的核心組件,也需要對分布式存儲集群的狀態信息進行監控。監控平臺的主要功能包括獲取以太坊節點信息及分布式存儲集群信息,一旦發現處于非健康狀態則向管理員發出報警信息,報警信息的發送通過郵件發送函數實現。醫療健康數據的狀態監控平臺通過librados與集群通信執行ceph命令。
為了分析醫療健康數據安全模型的應用效果,構建了一個計算機仿真平臺,該仿真平臺共運行了12臺計算機,計算機的操作系統為Linux,計算機內存為16 GB,CPU為i5-2 400,Linux系統版本是16.04。全部計算機安裝在同一個局域網中,配置區塊鏈的基礎設施。
在基于聯盟區塊鏈的醫療健康數據安全模型設計中,通過分布式存儲系統存儲醫療健康數據,封裝數據之后得到Hashi,將Hashi存入區塊鏈,每筆交易的數據大小為2 153 bit。
設計的訪問控制策略對醫療健康數據訪問過程進行模擬,分別模擬600、800、3 000、5 000個節點參與到聯盟鏈中,模擬分析結果表明,隨著聯盟鏈的節點數目的增加,數據交易效率先增加后下降,當節點數目在1 000之內,交易效率急速增長;當節點在3 000、5 000時,交易效率有所下降,如圖4所示。

圖4 區塊鏈交易效率
區塊鏈的主要安全風險為遭遇攻擊之后修改區塊數據。本文設計的醫療健康數據安全模型采用分布式的存儲系統,避免了單點攻擊,數據存儲過程中通過加密產生區塊,防篡改的能力較強。用戶只有通過訪問控制策略的驗證才能得到密鑰解密文件,醫療健康數據文件以加密的方式將文件內容生成唯一的Hash 值,保證了內容不可篡改性,醫療健康數據的安全性較強。
隨著智慧醫療的發展,區塊鏈技術的應用可以實現醫療數據的貢獻及安全存儲,利用區塊鏈技術可以防止醫療健康數據被篡改,同時也降低了數據的管理成本。本文提出了基于聯盟區塊鏈的醫療健康數據安全模型,期望通過設計為醫療健康數據的網絡安全提供幫助,設計中通過設計訪問控制策略及智能合約確保信息的安全,最后對醫療健康數據安全模型的交易效率及安全性進行驗證,結果表明,該模型的交易效率較高,安全性較強。雖然當前聯盟區塊鏈技術在醫療保健中的應用處于初級研究階段,但是該技術的應用效果較好,為醫療保健行業的發展提供一種可行的方法。