史愛武,付科巽,魏銀珍,韓 超
(1.武漢紡織大學 計算機與人工智能學院,湖北 武漢 430200;2.黃岡師范學院 計算機學院,湖北 黃岡 438000)
隨著信息化時代的來臨,數據的價值愈發凸顯,大數據技術也廣泛應用于各行各業,如銀行、醫療保健等。隨著技術的不斷進步,醫療保健大數據正呈指數級增長。醫療保健系統以電子健康記錄的形式進行數字轉換,這不僅得益于醫療保健領域分析技術的進步,還在于其允許醫學專業人員在一個新的頻譜中提取醫療數據。醫療數據包括患者的醫療記錄、醫院記錄、醫療實驗室測試報告,以及從物聯網設備中收集到的大量數據。與此同時,大數據安全問題也隨之而來[1]。《健康保險可攜性和責任法案》相關數據顯示,2018 年共有1 300 多萬條醫療侵犯記錄,是2017 年的兩倍[2]。其主要原因在于:現在的醫療機構將數據上傳至本地數據庫或者可信的云服務器中,需要大量的內存計算,對醫療保健中心設置而言很不理想,并且在基于云的系統中,云服務的網絡節點在一定程度上被視為核心,而一旦云服務器崩潰或成為黑客攻擊目標,所有用戶都可能會受到影響。對于患者而言,如果患者在不同的地區從一家醫院轉到另一家醫院,其電子病歷往往不能共享,如果醫療報告和醫療圖像丟失,只能重新進行打印,導致治療滯后[3-6]。
針對上述問題,一些學者進行了相關研究。Shitole等[7]提出用ECC 算法實現只有加密數據在用戶和發布者之間共享的方案,然而這僅僅解決了數據安全問題,之后的數據計算和內存消耗問題并沒有得到解決。Li 等[8]提出建立一個以患者為中心的系統管理醫療保健數據,并通過ABE 方法編碼EHR 信息以改進安全特性,但該方法會導致大量冗余的EHR 信息存儲在云存儲中。
本文利用區塊鏈技術提出一種基于智能合同的架構以提高醫療保健大數據的安全性和隱私性,并在其中加入IPFS 以彌補區塊鏈在數據存儲方面的不足。該方案允許用戶通過3 個核心組件存儲、共享和訪問醫療保健數據:分布式應用程序、智能合同和星際文件系統[9]。分布式應用程序作為前端部分,為用戶提供界面;智能合約作為整個網絡的控制器用以支持該方案的關鍵特性[10];IPFS 數據庫作為后端,提供分布式數據庫功能以存儲醫療文件數據并確保其安全性。它存儲注冊用戶上傳的文件,并返回文件哈希。注冊過程結束后,用戶可以利用這些服務上傳、下載和檢索醫療數據并檢查數據完整性。
密碼學[13]和分布式計算[14]的發展引入了一種名為區塊鏈的現代計算機技術。區塊鏈是一個通過P2P 網絡復制和交換數據的分布式賬本,最初是由中本聰提出,他創建了比特幣(一種直接交易的數字貨幣而無需第三方)并開發了這種節點網絡的模式,以維護一個分散和安全的數據庫[15-16]。顧名思義,區塊鏈是一個有序的塊列表,通過引用前一個塊的Hash,每個塊都通過哈希序列與前一個塊的綁定加以區分。唯一的異常是第一個塊為起源塊,它沒有前一個塊的哈希值。區塊鏈是加密貨幣的主要支柱,被視為技術突破和財務進步,即在一個分散的設置中需要一個值得信任的賬本,而實體之間沒有信任。區塊鏈網絡中有一系列的過程和加密機制,它們應用于共享網絡,以保護由身份驗證塊組成的分布式數據庫中的數據存儲,信任因素也是區塊鏈技術的一個核心特征,通過區塊鏈,加密的開源代碼被用于管理信任。在區塊鏈網絡中,數據被提供給礦工,礦工通過解決一個數學公式和達成共識來驗證它,作為回報,礦工們也得到了一些獎勵。區塊鏈確保系統功能的3個關鍵原則是:塊和哈希、挖掘、共識[17-18]。
星際文件系統(InterPlanetary File System,IPFS)是一組子協議,它組成了一個點對點的分布式文件系統,該系統使用DHT(分布式散列表)跟蹤所有數據,包括誰擁有什么數據。此外,它還提供了一種在分散的環境中進行文件共享的新方法。IPFS 使用哈希表存儲數據包,并通過Kademlia(P2P 重疊網絡傳輸協議)找出哪些節點包含哪些數據。佩塔·梅蒙科夫和大衛·馬齊耶爾于2002 年創建了Kademlia,作為去中心化點對點計算機網絡的DHT。在IPFS 中可以保存哈希,之后雙方可以使用哈希檢索數據。當數據準備好添加到IPFS 網絡時,這些數據將被分解成許多小比特。每一塊都有其獨特的hash 識別它。之后,這些塊將在網絡上分散到最接近對等ID 的節點上。當用戶請求一個塊時,DHT 用于移動到存在散列的節點,在檢查所有現有的塊后,主對象簡單地將所有塊[19]連接起來。并且,DHT 的分布式部分意味著完整的表在多個地方被共享。基于DHT 的分布式系統是完全連接的系統,在位于不同位置的參與者之間沒有實質性差異。因此,每個人都可以訪問最新的哈希表。
基于區塊鏈與IPFS 的醫療數據共享模型系統架構如圖1所示。

Fig.1 Overall system architecture圖1 系統整體架構
主要分為以下4 層:數據層、網絡層、共識層和應用層。
(1)數據層。數據層是最底層,它在移動到網絡層之前先管理數據。以太坊網絡為用戶生成公鑰,數字簽名方案確保用戶真實性。所有事務和數據流都以散列鏈或事務鏈的形式編譯。訪問控制使用用戶憑據進行管理,只有授權用戶才能上傳醫療保健大數據。用戶可以要求檢查文檔的完整性,并最終確保其安全性。在將醫療保健數據存儲在IPFS 上之前,運用高級加密標準(AES)算法對其進行編碼。
(2)網絡層。網絡層負責建立數據層和應用層之間的連接。它包含一個用于通信的P2P 網絡和智能合約,可作為該方案的后端。在擬議的方案中有各種用戶,如醫院的管理員和醫生,他們被授權在網絡上開展工作。醫院的管理員上傳數據后,只有醫院的授權成員才能查看這些數據。管理員可以與另一家醫院共享來自醫療大數據,以便其他醫院的工作人員在需要時查看數據。智能合約作為一個控制器,為各種用戶提供服務,并管理未經授權的用戶。
(3)共識層。就像在區塊鏈網絡中一樣,每個節點可能在不同的時間接收必要的數據,需要一個共識機制確定哪個節點應該在區塊鏈中添加新的塊。該方案建立在以太坊區塊鏈網絡之上,該網絡使用PoW 方法管理所有活動。
(4)應用程序層。應用程序層是為最終用戶和醫生提供服務的最頂級的層。這一層可以幫助所有用戶與區塊鏈網絡進行通信,并存儲和查看數據。管理員可以注冊用戶,授權用戶可以Excel 格式上傳醫療大數據,并能夠查看上傳的數據。其他網絡的對等點可以使用分布式散列表(DHT)從任何節點要求一個文件或數據。
如圖2 所示,將該模型分為4 個部分:醫院、管理員、智能合同、IPFS 存儲。所有這些實體都被連接起來,形成了一個P2P 區塊鏈網絡。它們的角色如下:①醫院:數據的擁有者,將數據在IPFS 中進行上傳與下載;②管理員:主要為用戶提供電子認證服務,核實醫院的身份信息;③智能合約:負責對用戶數據進行加密與上傳,并校驗用戶;④IPFS 存儲:主要對加密數據進行存儲,并將每個文件的hash歸于hash序列返回給用戶,用于定位文檔。
系統模型實現步驟如下:
(1)用戶向管理員發起用戶注冊請求,并將醫院名稱、電子郵件ID 以及醫院證書傳遞給管理員,管理員收到后對信息進行核實,核實通過后,管理員發起密鑰生成請求,以太坊架構將為注冊用戶生成公鑰和私鑰。之后,區塊鏈網絡執行智能合約的注冊功能,生成憑據,并將這些憑據與管理員共享。
(2)用戶可以使用注冊時輸入的詳細信息登錄到應用程序中并訪問服務。成功登錄后,用戶即可上傳、下載和共享醫療數據。要上載醫療保健數據,用戶將使用應用程序門戶上可用的適當選項將醫療數據文件發送到區塊鏈網絡。
(3)區塊鏈網絡執行相應的智能合約功能,使用AES算法和為用戶生成的公鑰對醫療數據進行加密,并將數據上傳至IPFS 的存儲節點中。在IPFS 上成功存儲醫療數據后,智能合約將執行返回唯一的文件哈希給用戶。用戶可以利用文件哈希值進行數據訪問與數據檢索。
(4)用戶與區塊鏈網絡中其他用戶共享數據。首先用戶通過向管理員發送請求獲得注冊用戶的詳細信息,作為回應,管理員從區塊鏈網絡中獲取注冊用戶列表;然后,管理員將注冊用戶列表發送給用戶以共享醫療保健數據,用戶可以利用服務與各自用戶共享數據。
本文智能合約使用了很多不同的符號,具體由以下3種算法組成。
算法1以太坊數字簽名與驗證(其中,公鑰為Pkey,私鑰為Prkey)

首先用以太坊框架為用戶生成公鑰和私鑰,一是使用SHA256 和橢圓曲線數字簽名算法(ECDSA)[7]生成用戶的私有—公鑰對,其中Pkey 和Prkey 分別表示用戶的公鑰和私鑰,然后利用‘0x’加上hash 的后40 位數生成以太坊地址;二是將以太坊地址和用于上傳的文件hash 用生成的私鑰進行數字簽名,用消息和簽名推導出用戶的公鑰。再通過公鑰、簽名、文件的哈希值計算出一個叫“r”的值,這個r是簽名的一部分,校驗簽名就是拿計算出來的r和簽名中攜帶的r進行對比,如果一致則校驗通過。
算法2醫院注冊

輸入管理員地址和醫院詳細信息。首先智能合約會檢查醫院的信息是否已經存在,如果存在則返回false 并打印信息,然后智能合約將檢查管理員的有效性,即該程序的調用者是否為有效的管理員,如果不是則返回false 并打印。否則,將地址進行映射,并在智能合約中添加醫院信息。
算法3文件上傳


首先檢查該功能是否由授權的醫院或管理員調用,如果不是則返回false,然后對醫院上傳文件使用AES 算法進行加密,并在加密完成后生成一個文件hash,之后將這個hash 進行查重,確定是唯一后,數據將被上傳到IPFS 存儲網絡上,而返回的哈希將被存儲在智能合約上。
醫療數據上傳流程如圖2所示。

Fig.2 Flow of uploading medical data圖2 醫療數據上傳流程
本文將區塊鏈技術與IPFS 相結合,系統所產生的數據由智能合約加密完成后上傳至IPFS 存儲節點中,并將返回的數據地址保存在區塊鏈網絡上。由于采用分布式管理,在數據文件與數據地址上都存有多個備份,對于硬件故障以及文件損壞都具備一定的防護。
對于外部而言,如果遭受黑客與惡意用戶攻擊,由于在區塊鏈網絡中各節點維護的數據相同,當一定量的節點被攻擊時,其余節點也能快速從本地數據庫中補充到被攻擊的節點數據庫中。IPFS 則可以將數據分割成大小相同的數據碎片并備份到系統中,因而也能在一定程度上阻礙外部攻擊。
對于內部而言,由于區塊鏈其特有的共識機制[8],如果接收到非法數據,節點會進行自動清理。
主要從以下4方面進行系統性能分析:
(1)擴展性。擴展性是指對高性能、低成本和可維護性等諸多因素的綜合考量和平衡,側重于系統的水平伸縮。由于區塊鏈上的數據規模和數據量日益增長,該應用程序采用鏈外存儲模型,用于存儲醫療大數據的IPFS,解決了可伸縮性問題。并且,由于系統中IPFS 以分散的方式利用由分布式網絡存儲的加密哈希,因而在解決可擴展性問題時,不會破壞系統安全性。
(2)安全性。安全性是指不將有用信息泄漏給非授權用戶的一種特性,可以通過信息加密、身份認證、訪問控制、安全通信協議等技術實現。在該系統中,為了確保存儲在區塊鏈網絡上的醫療信息不受第三方的訪問,通過智能合約的加密方法確保數據機密性。該加密方法會將數據在上傳區塊鏈網絡之前進行加密,通過使用Aes 加密技術,將信息以加密形式保存。
(3)完整性。完整性是指信息在傳輸、交換、存儲和處理過程中,保持信息不被破壞或修改、不丟失和信息未經授權不能改變的特性。該系統利用區塊鏈不可篡改的特性確保了數據完整性。用戶可以利用文件保存之后返回的hash 對數據完整性進行驗證,并利用Merkle 根概念檢查數據完整性。管理員負責在區塊鏈網絡上傳過程中維護數據的原始數據,通過獲取存儲的Merkle 根,重新計算請求數據的哈希并執行驗證。如果兩個哈希都匹配,則保持數據完整性;否則,將告知用戶數據不完整。
系統使用計算機4GBRAM,Intel(R)核心(TM)2DuoCPUE8400@3.00GHz 處理,采用Windows10 操作系統,系統架構是根據以太坊框架實現,使用Solodity 語言進行開發,在實驗中使用Ganache 工具為建立區塊鏈網絡、部署智能合同和執行評估性能參數測試提供環境。通過不同端口之間的連接模擬真實區塊鏈中各不同節點,并添加一定的隨機延時,以模擬現實網絡中的波動。Remix 開源工具用來編寫和執行智能合同,后端采用Node Js 提供以太坊和IPFS 存儲之間的連接,MetaMask 用以接到以太坊網絡,讓用戶創建新的發送和簽名并連接到應用程序中事務的以太坊地址。
在實驗中,開啟多個節點后開始進行文件上傳與下載,然后進行醫療數據共享系統性能與安全性測試。
在區塊鏈網絡中,由于用戶注冊都需要上傳真實性的數據和證書,并由管理員進行驗證,因而在全網節點中不存在惡意節點的情況下,對文件大小與文件上傳下載的耗時進行實驗,測試結果如圖3—圖6所示。

Fig.3 Average latency under high concurrency圖3 高并發量下的平均延遲

Fig.4 Relationship between file size and processing time圖4 文件大小與處理時間的關系

Fig.5 Throughput of file upload requests圖5 文件上載請求的吞吐量

Fig.6 File upload processing time of different nodes圖6 不同節點數文件上載處理耗時
如圖3 所示,測試范圍從并發量100 到并發量500,每次疊加100 并發量進行測試。為了保證數據真實性,對每組數據進行5 次重復測試。可以看出,系統并發量在達到500時最高量為12ms。
如圖4 所示,IPFS 在存儲數據前,會先對文件進行分片,再存儲。由于節點數量的增加,其CDN 加速性能越優,因而將文件大小從200kb 開始每次疊加200kb 文件大小進行測試。可以看出,文件的處理時間沒有隨文件增大而隨之呈線性增長,而是增長逐漸放慢并最終比之前耗時更低。
如圖5 所示,測試范圍從并發量100 到并發量1 000 每次疊加100 進行測試。可以看出,系統中文件上載請求的吞吐量穩定在600~800區間。
如圖6 所示,將節點數由20 遞增到100,隨著節點數的增多,數據傳輸效率有一定提升。
綜上可以看出,本文提出的基于區塊鏈與IPFS 的數據共享系統是一個低時延、高吞吐量的系統,在數據傳輸方面比傳統方案更好,能夠滿足大環境的需求。
針對傳統數據庫存儲和云存儲系統的不足,結合基于區塊鏈技術的電子醫療數據共享最新相關研究[20],本文設計出一個區塊鏈與IPFS 相結合的醫療數據共享系統,以確保大規模醫療數據的安全性和隱私性。目前,我國醫療數據系統取得了長足發展,但它對單點故障、數據共享和隱私問題仍然存在一定不足,這些問題可以通過區塊鏈加以解決。本文方案不僅能夠實現醫療大數據的安全上傳和共享,而且提供了一種訪問控制機制,以確保只有經過身份驗證的用戶才能訪問醫療大數據。同時,使用鏈外存儲IPFS 安全地存儲醫療大數據,讓用戶能夠很容易地驗證和檢索自己醫療文件的完整性。未來,這種新的存儲模式還可以應用于醫療財務繳費,為患者就診和醫院財務管理提供服務支持。