林金瑞


摘? 要:構(gòu)建一個病歷檔案區(qū)塊鏈模型,病案室節(jié)點通過實用拜占庭容錯機制達成共識、生成新區(qū)塊并將其添加到區(qū)塊鏈的尾部。醫(yī)療機構(gòu)的病案室可通過該模型將患者病歷檔案的HASH值、加密URI等基本信息組織到新區(qū)塊中并永久保存在區(qū)塊鏈上,其中HASH值可防止病歷檔案被篡改,加密URI可保證只有患者自己才能通過URI查看自己的病歷檔案。患者可通過患者節(jié)點查詢自己的病歷檔案并驗證其完整性。
關鍵詞:區(qū)塊鏈;實用拜占庭容錯;病歷檔案;密鑰
Abstract: A blockchain model of medical Archivesis constructed, and the nodes of medical archive rooms reach consensus and generate new blocks through the practical Byzantine fault tolerance mechanism. The medical archive rooms of medical institutions can organize HASH value and encrypted URI of patients' medical Archives into new blocks through this model and keep them permanently on the blockchain. HASH value can prevent medical Archives from being tampered with, and the encrypted URI can guarantee that only patients can view his medical archive through the URI. Patients can query their own medical archive through the patient node and verify its integrity.
Keywords: Blockchain; Practical Byzantine fault tolerance; Medical archive; Key
病歷檔案屬于專門檔案,是醫(yī)務人員在對患者進行問診、檢查、診斷、治療、護理等醫(yī)療活動中形成的檔案。醫(yī)療機構(gòu)病案室保存大量的紙質(zhì)病歷檔案和數(shù)字病歷檔案,患者在查詢自己的檔案時,可能存在兩個問題:一是病案室出于安全考慮,基本不允許患者通過網(wǎng)絡查詢自己的檔案;二是保存在病案室里的原始檔案有可能被篡改。借助于區(qū)塊鏈技術可以很好地解決上述兩個問題。
張超等[1]-[4]對面向醫(yī)務人員的電子病歷區(qū)塊鏈模型和系統(tǒng)進行研究,但所提出方法不完全適用于病案室的檔案管理工作;張培培等[5-6]提出基于區(qū)塊鏈的電子健康檔案管理系統(tǒng)框架,但并未對所采用的共識機制進行描述。本文擬在現(xiàn)有研究基礎上,提出一個基于實用拜占庭容錯機制的病歷檔案區(qū)塊鏈模型。
1 PBFT
區(qū)塊鏈的基本單位是區(qū)塊,在區(qū)塊鏈的末尾追加一個新區(qū)塊之前,必須在區(qū)塊鏈的各個節(jié)點之間達成共識,當有足夠數(shù)量的節(jié)點認可該區(qū)塊時,才能將其追加到區(qū)塊鏈中。可以采用PBFT(Practical Byzantine Fault Tolerance,實用拜占庭容錯)作為區(qū)塊鏈的共識機制。PBFT由Castro M等[7]于1999年提出,允許某段時間內(nèi)在具有n個節(jié)點的分布式系統(tǒng)中最多存在f個問題節(jié)點,n與f之間的關系為:n≥3f+1。
PBFT主要通過預準備、準備、提交3個階段來實現(xiàn)節(jié)點間的消息傳遞。工作過程如下:(1)客戶端向主節(jié)點發(fā)送服務請求,請求中包含客戶端希望各個節(jié)點要執(zhí)行的操作;(2)主節(jié)點收到服務請求,驗證無誤后將其轉(zhuǎn)換為預準備消息并廣播給所有的備份節(jié)點;(3)每個備份節(jié)點收到預準備消息,驗證無誤后將其轉(zhuǎn)換為準備消息并廣播給所有節(jié)點;(4)每個節(jié)點收到2f+1條準備消息并驗證無誤后,將其轉(zhuǎn)換為提交消息并廣播給所有節(jié)點;(5)每個節(jié)點收到2f+1條提交消息并驗證無誤后,執(zhí)行客戶端請求中的操作,并將操作結(jié)果反饋給客戶端;(6)客戶端收到2f+1條反饋信息并驗證無誤后,認為服務請求得到正確執(zhí)行,服務過程結(jié)束。如圖1所示。
2 病歷檔案區(qū)塊鏈模型
2.1 病歷檔案區(qū)塊鏈結(jié)構(gòu)
將病歷檔案信息組織到區(qū)塊鏈之前,必須事先確定哪些數(shù)據(jù)可以存儲到病歷檔案區(qū)塊鏈上,哪些數(shù)據(jù)應該存儲到鏈下的適當位置。區(qū)塊鏈是一個數(shù)據(jù)只進不出的鏈表,隨著入鏈數(shù)據(jù)的增多,數(shù)據(jù)規(guī)模將會越來越大,因此,不宜將患者的全部病歷檔案都存放到區(qū)塊鏈中。可采取鏈下存儲和鏈上存儲相結(jié)合的方式。鏈下存儲是指將患者的病歷檔案存放在病案室的Web服務器中,病歷檔案的URI通過患者公鑰進行加密;患者可以利用其私鑰對加密后的URI進行解密,并通過該URI訪問病歷檔案。鏈上存儲是指將病歷檔案的HASH值、病歷檔案加密URI、患者公鑰等信息與區(qū)塊鏈管理數(shù)據(jù)一起存放到區(qū)塊鏈的區(qū)塊中。鏈下Web服務器中的病歷檔案、鏈上的區(qū)塊共同構(gòu)成一個完整的病歷檔案區(qū)塊鏈。
2.2 基于PBFT的區(qū)塊生成
病案室節(jié)點可將本機構(gòu)的病歷檔案組織到區(qū)塊鏈中,涉及兩個關鍵步驟:提交交易和生成區(qū)塊。
2.1.1 提交交易。“交易”是區(qū)塊鏈理論中的核心概念。其中的“交易”是指病案室將病歷檔案信息存入?yún)^(qū)塊鏈的行為。病案室根據(jù)一定的HASH算法,為原生數(shù)字病歷檔案或數(shù)字化后的病歷檔案生成HASH,與患者公鑰、病歷檔案加密URI一起,打包成一個交易,存入交易池。交易池中暫時存放了各個病案室已提交但尚未入塊的所有交易。
2.2.2 生成區(qū)塊。生成區(qū)塊的關鍵是確定由誰來主導區(qū)塊的生成、所生成的區(qū)塊如何在所有節(jié)點之間達成共識。本文采用PBFT機制作為共識機制,每次生成新區(qū)塊之前,都按一定的算法從所有病案室節(jié)點中選擇一個節(jié)點作為主節(jié)點,其它病案室節(jié)點作為備份節(jié)點,由主節(jié)點將交易池中的所有交易打包成一個新區(qū)塊,提交給備份節(jié)點,通過PBFT的預準備、準備、提交3個階段達成共識,確認新區(qū)塊的合法性后將其添加到病歷檔案區(qū)塊鏈的尾部。
2.3 用戶管理
本文提出的病歷檔案區(qū)塊鏈是一種聯(lián)盟鏈,需要一個中心化的用戶權(quán)限管理機構(gòu)來增、刪用戶并進行權(quán)限管理,屬于半中心化的聯(lián)盟鏈。
病歷檔案區(qū)塊鏈的用戶可分為衛(wèi)生主管部門、醫(yī)療機構(gòu)病案室、患者三種類型。衛(wèi)生主管部門是病歷檔案區(qū)塊鏈運行的監(jiān)管部門,包括中央、省、市、縣四級,上級部門決定哪些下級部門可以加入病歷檔案區(qū)塊鏈并為其授予權(quán)限。各個衛(wèi)生主管部門決定哪些直接管轄的醫(yī)療機構(gòu)病案室可以加入?yún)^(qū)塊鏈并為其授予權(quán)限。醫(yī)療機構(gòu)病案室是經(jīng)過上級衛(wèi)生主管部門授權(quán)入鏈的病案室,可以為患者開設賬戶并進行授權(quán)。患者屬于普通用戶,經(jīng)過醫(yī)療機構(gòu)病案室的授權(quán)可以通過病歷檔案區(qū)塊鏈查詢自己的病歷檔案。
2.4 數(shù)據(jù)安全機制
病歷檔案記錄了患者的就醫(yī)信息,可以采用非對稱加密、數(shù)字簽名、密鑰認證等技術來保證病歷檔案區(qū)塊鏈中數(shù)據(jù)的機密性、完整性。每個用戶都需要向衛(wèi)生主管部門認可的證書頒發(fā)機構(gòu)和密鑰管理中心申請一對密鑰:公鑰和私鑰,并獲得一個數(shù)字證書,以便實現(xiàn)病歷檔案信息的非對稱加密與解密、數(shù)字簽名與驗證。
(1)區(qū)塊頭的數(shù)字簽名與驗證。病案室生成區(qū)塊時,對區(qū)塊頭中的5個字段進行HASH運算,生成區(qū)塊頭HASH;然后利用區(qū)塊生成者私鑰對其進行加密,生成區(qū)塊頭數(shù)字簽名并將其放置在區(qū)塊體中。患者利用專用客戶端獲取區(qū)塊,通過CA驗證區(qū)塊生成者身份,利用區(qū)塊生成者公鑰對區(qū)塊頭數(shù)字簽名進行解密,得到區(qū)塊頭HASH;同時對區(qū)塊頭進行HASH運算,生成新的區(qū)塊頭HASH;比較兩個區(qū)塊頭HASH,若一致則區(qū)塊頭中的數(shù)據(jù)無誤。
(2)交易的數(shù)字簽名與驗證。病案室生成區(qū)塊時,首先對圖2中的5個斜體字字段進行HASH運算,生成交易HASH,然后利用交易生成者私鑰對其進行加密,生成交易數(shù)字簽名。患者利用專用客戶端獲取區(qū)塊,首先通過CA驗證交易生成者身份,然后利用交易生成者公鑰對交易數(shù)字簽名進行解密,得到交易HASH;同時對5個斜體字字段進行HASH運算,生成新的交易HASH;比較兩個交易HASH,若一致則交易中的數(shù)據(jù)無誤。
(3)病歷檔案URI的加密、解密及病歷檔案完整性驗證。病案室通過HASH運算生成病歷檔案HASH、通過對病歷檔案的URI進行非對稱加密生成病歷檔案加密URI,并將結(jié)果存入?yún)^(qū)塊體中。患者利用專用客戶端獲取區(qū)塊,利用自己的私鑰對病歷檔案加密URI進行解密,進而通過解密后的URI獲取自己的病歷檔案,進一步對其進行HASH運算,生成新的病歷檔案HASH,并與區(qū)塊體中的病歷檔案HASH進行比較,若一致則病歷檔案完整。
參考文獻:
[1]張超,李強,陳子豪等.Medical Chain:聯(lián)盟式醫(yī)療區(qū)塊鏈系統(tǒng)[J].自動化學報,2019,45(08):1495-1510.
[2]肖奇穎.基于區(qū)塊鏈的電子病歷存儲系統(tǒng)的設計與實現(xiàn)[D].大連:大連理工大學,2019.
[3]董黛瑩,汪學明.基于區(qū)塊鏈的電子醫(yī)療記錄共享研究[J].計算機技術與發(fā)展,2019,29(05):121-125.
[4]張圣垚.基于區(qū)塊鏈的電子病歷系統(tǒng)的設計與實現(xiàn)[D].哈爾濱:哈爾濱工業(yè)大學,2018.
[5]張培培,呂震宇,趙爽.基于區(qū)塊鏈的電子健康檔案管理系統(tǒng)設計[J].電腦編程技巧與維護,2020(03):115-116.
[6]嚴夢,袁玉堂,劉智勇.基于區(qū)塊鏈技術電子健康檔案分布式存儲方案的探討[J].中國衛(wèi)生信息管理雜志,2019,16(05):623-627.
[7] Castro M, Liskov B. Practical Byzantine fault tolerance. [2020-3-10]. https://www.researchgate.net/publication/2437947_Practical_Byzantine_Fault_Tolerance.
(作者單位:河南省圖書館 來稿日期:2020-06-01)