邵輝
摘要:文章設計并實現(xiàn)了一種基于區(qū)塊鏈的共享病歷系統(tǒng),通過醫(yī)院、病人、醫(yī)生三種用戶類型進行使用,有效促進了共享病歷的發(fā)展,改變了當前病歷信息不標準、不規(guī)范、內(nèi)容少的問題。電子共享病歷能全面客觀地描述病情,更好地促進醫(yī)療事業(yè)的發(fā)展,而區(qū)塊鏈技術(shù)也有力保障了病人的隱私問題。
關(guān)鍵詞:區(qū)塊鏈;共享病歷;共識協(xié)議;智能合約;加密
中圖分類號:TP301.6 ? ? ?文獻標識碼:A
文章編號:1009-3044(2022)13-0063-02
醫(yī)療衛(wèi)生領域的改革雖然一直在進行,但是效果有限,看病難最大的一個原因是各級醫(yī)院間的信息不暢通[1],特別是醫(yī)療數(shù)據(jù)只在醫(yī)院內(nèi)部流轉(zhuǎn)和共享[2],導致診治醫(yī)生不能看到病人完整的歷史就診記錄,無法實施精準施治。為破解這個難題,文章提出共享病歷的構(gòu)想,建設以共享病歷為基礎的區(qū)域衛(wèi)生信息平臺[3],促進各級醫(yī)療衛(wèi)生機構(gòu)之間數(shù)據(jù)共享。當病歷實現(xiàn)共享后,病人就沒有必要做同樣的化驗和檢驗,在不同的醫(yī)院也可以采用同一版病歷。醫(yī)生在得到病人授權(quán)后,就可以直接調(diào)取病人病歷,查看其所有的看病情況。
但是如何構(gòu)建數(shù)據(jù)共享機制來指導共享病歷的建設是目前的一大問題[4],各個醫(yī)院參與意愿很低,而且病人的隱私也容易被不法分子竊取,傳統(tǒng)的技術(shù)很難滿足這兩點要求。但區(qū)塊鏈技術(shù)出現(xiàn)后,它的特性決定了能有效破解安全、共享兩大難題。
區(qū)塊鏈利用塊鏈式數(shù)據(jù)結(jié)構(gòu)來驗證與存儲數(shù)據(jù),它是一種去中心化和防篡改的分布式網(wǎng)絡數(shù)據(jù)庫,還具備很多新型計算機技術(shù)應用模式,包括加密機制、共識算法、分布式數(shù)據(jù)存儲、點對點傳輸?shù)?。共享病歷采用區(qū)塊鏈技術(shù),首先因為區(qū)塊鏈擁有時間戳,這樣保存在鏈上的數(shù)據(jù)都會帶有時間標識,更因為在每次交易時采用密碼學方法使區(qū)塊和鄰近的兩個區(qū)塊均有聯(lián)系,因此任何一次交易均可追溯,所以可以保證病歷記錄可追溯;其次可以保證病歷數(shù)據(jù)不被篡改,因為區(qū)塊鏈利用分布式節(jié)點共識算法來生成和更新數(shù)據(jù),存儲的數(shù)據(jù)都是不可篡改的日志類型數(shù)據(jù);最后可以保證病歷數(shù)據(jù)的安全性,因為區(qū)塊鏈利用密碼學的技術(shù),保證數(shù)據(jù)傳輸和訪問的安全。
1系統(tǒng)架構(gòu)
基于區(qū)塊鏈的共享病歷系統(tǒng)采用區(qū)塊鏈網(wǎng)絡Hyperledger Fabric,該網(wǎng)絡串聯(lián)起各個醫(yī)院等機構(gòu)組成聯(lián)盟。醫(yī)院聯(lián)盟提供數(shù)據(jù)共享的基礎設施,可以實現(xiàn)多個醫(yī)院組織間共享電子病歷。每一條醫(yī)療鏈完整的區(qū)塊鏈服務均存放于每家醫(yī)院,利用此鏈可以完成醫(yī)療數(shù)據(jù)的查詢、驗證等服務。另外還建立一臺訪問服務器用以提供對外訪問服務,此訪問服務器保存的內(nèi)容有:醫(yī)療服務的服務器地址、醫(yī)療信息的文件權(quán)限信息。當存儲地址變更時,只需修改訪問服務器。系統(tǒng)建立在一個分散的網(wǎng)絡上[5],連接所有的醫(yī)療大型機構(gòu),如圖1所示。
2 系統(tǒng)關(guān)鍵問題
本系統(tǒng)有三個關(guān)鍵問題,分別是加密算法、智能合約和共識算法。
2.1 區(qū)塊鏈的加密算法
當前采用基于屬性基加密的方案有兩種:采用密文策略的屬性基加密[6]和采用密鑰策略的屬性基加密[7]。在現(xiàn)代密碼體制下,密碼系統(tǒng)的安全性更多地取決于密鑰的保密性。一般不聯(lián)網(wǎng)訪問的私鑰存儲為冷錢包,聯(lián)網(wǎng)訪問的為熱錢包。冷錢包避免了黑客盜取私鑰的風險,比熱錢包更安全,但是熱錢包可以隨時交易。本系統(tǒng)為實現(xiàn)安全的病歷數(shù)據(jù)共享,采用KP-ABE算法來生成公私鑰對,用公鑰對病歷進行加密。
在KP-ABE算法里一個訪問控制對應一個密鑰、一個屬性集合對應一個密文,只有當屬性集合中的屬性可以滿足此訪問結(jié)構(gòu)時才能進行解密。也就是說利用相關(guān)的屬性對密文加密后保存于服務器,然后讓用戶利用授予的特定的訪問結(jié)構(gòu)來訪問相應的消息。
2.2 區(qū)塊鏈的智能合約
區(qū)塊鏈系統(tǒng)使用智能合約來管理對病歷的授權(quán),除非得到用戶授權(quán),否則他人查看到的只是加密后的數(shù)據(jù)。區(qū)塊鏈的智能合約[8]是一種具有狀態(tài)的、由事件觸發(fā)的協(xié)議,它能夠自行進行驗證并能自動執(zhí)行。
在Fabric架構(gòu)中智能合約也稱為鏈碼,包括:系統(tǒng)鏈碼、用戶鏈碼。通常用GO語言或者JAVA語言來實現(xiàn)鏈碼所要求的接口代碼;鏈碼對不同的運算操作會分別設置不同的函數(shù),并且對其進行一定的邏輯判斷;鏈碼與其他數(shù)據(jù)庫中的所有數(shù)據(jù)之間能夠?qū)崿F(xiàn)交互是基于運算方法getstate()和putstate();通常將鏈碼在背書節(jié)點上安裝,定義好背書策略再于某通道進行實例化后才能運行鏈碼;鏈碼作為訪問賬本的基本方法,在一個安全的背書節(jié)點創(chuàng)建和管理的沙盒內(nèi)運行,這樣可以將背書節(jié)點隔離于鏈碼的運行環(huán)境。
2.3 區(qū)塊鏈的共識算法
共識算法使一組節(jié)點能夠基于特殊節(jié)點列表形成共識。區(qū)塊鏈數(shù)據(jù)的一致性是利用共識協(xié)議來保證,共識算法不同則適用情況也不同。常用的共識算法包括權(quán)益證明算法、工作量證明算法、股份授權(quán)證明算法和PBFT算法。實用拜占庭容錯算法是首個解決拜占庭將軍問題的方案,在Hyperledger Fabric中應用十分廣泛。PBFT算法使用較少的預選定將軍數(shù),即參與投票節(jié)點的身份是事先知道的,因此運行非常高效,交易的確認時間只需幾秒鐘。
PBFT算法有三個重要階段:預準備、準備和確認。預準備階段和準備階段要確定同一個view里每個副本節(jié)點均認可的序列,然后按照序列執(zhí)行;準備階段和確認階段則確保已經(jīng)達到確認狀態(tài)的請求在發(fā)生view change后仍然在新的view里維持原序列。
算法具體做法如下:
1)客戶端發(fā)起請求后,系統(tǒng)輪流選舉出主節(jié)點,初始化時發(fā)出View-new消息,同步所有節(jié)點的數(shù)據(jù)。
2)用戶將請求轉(zhuǎn)發(fā)給主節(jié)點并由其驗證通過后再進行廣播,發(fā)起預準備消息給所有的下一個節(jié)點并且保存。
3)所有的下節(jié)點收到預準備消息后進行校驗,防止造假或者篡改。
4)下節(jié)點驗證正確之后永久寫入,再廣播預準備消息并一起進入預準備階段。
5)根據(jù)所有節(jié)點統(tǒng)計的結(jié)果,當超過2f個節(jié)點后,大部分節(jié)點均已持久化,則進入確認階段。
6)把確認消息進行廣播并統(tǒng)計收到的確認消息的數(shù)量,當超過2f節(jié)點后,則寫入數(shù)據(jù)。利用狀態(tài)機更新,然后將最后一次請求返回給用戶端。
7)當用戶端統(tǒng)計消息超過f個節(jié)點后,則交易已被確認成功。如果超時則向所有的非主節(jié)點廣播。
PBFT共識遵循核心成員的“51%權(quán)利”,它的初始特殊節(jié)點列表要接納一個新成員,必須由51%的會員投票通過;PBFT算法具備權(quán)限分級能力,性能更高,耗能更低;PBFT算法是采用“許可投票、少數(shù)服從多數(shù)”來選舉領導者并進行記賬的共識機制,它使用拜占庭容錯機制,而且每輪記賬都會由全網(wǎng)節(jié)點共同選舉領導者,允許20%的節(jié)點作惡,也就是說容錯率為20%,如果區(qū)塊鏈上總的節(jié)點數(shù)是n個,則可以容忍(n-1)/5個節(jié)點出現(xiàn)拜占庭錯誤。
因為醫(yī)療系統(tǒng)是一個相對安全、穩(wěn)定的環(huán)境,而且實用拜占庭容錯算法在吞吐量以及交易確認時間方面有著巨大的優(yōu)勢,因此本系統(tǒng)使用PBFT共識機制來使系統(tǒng)快速達成共識,每個區(qū)塊鏈服務器都會保存一份病歷鏈的完整副本。
3 系統(tǒng)實現(xiàn)
系統(tǒng)設計如圖2所示:
系統(tǒng)分為前端和后端。前端的邏輯業(yè)務層為各種用戶可以訪問的頁面提供支持。前端系統(tǒng)包含三類用戶:病人、醫(yī)生、醫(yī)院管理人員,區(qū)塊鏈中的賬本數(shù)據(jù)都是由這三類用戶來操作。例如病人、醫(yī)生和醫(yī)院管理人員的登錄界面如圖3所示:
前端系統(tǒng)包括以下主要功能模塊:身份認證模塊用來確認登錄賬號是否正確,并根據(jù)賬號角色來分配相應的操作權(quán)限。無論是具有管理權(quán)限的賬號還是只能瀏覽查看的賬號,身份認證模塊均可以記錄所有用戶的操作行為到日志文件作為存證,病人也可以授權(quán)給醫(yī)生是否可以查看自己病歷,如圖4所示;查詢模塊用來根據(jù)用戶所輸入的查詢指令在區(qū)塊鏈數(shù)據(jù)庫中獲取相應的信息,例如病人想查看自己的病歷,則查詢模塊根據(jù)病人的指令要求,顯示相應的病歷信息;加密模塊用非對稱加密的方式來將區(qū)塊鏈數(shù)據(jù)庫的病歷信息進行加密,進一步防止病歷信息的泄露;處理模塊用來將電子病歷信息保存到區(qū)塊鏈型數(shù)據(jù)庫中。
后端為與Fabric交互的數(shù)據(jù)信息操作層,后端系統(tǒng)主要包括共識機制模塊、區(qū)塊鏈驗證模塊和交易執(zhí)行與存儲模塊。
4結(jié)束語
本文基于區(qū)塊鏈設計并實現(xiàn)了共享病歷系統(tǒng),此系統(tǒng)設計了符合醫(yī)院需求的業(yè)務設計,并通過編寫和部署智能合約到區(qū)塊鏈上來實現(xiàn),最后利用VUE框架和JAVA語言完成了前端頁面實現(xiàn)。本系統(tǒng)的實現(xiàn)會促進共享病歷的發(fā)展,有效改變當前病歷信息不標準、不規(guī)范、內(nèi)容少的問題。電子共享病歷將能更全面客觀地描述病情,促進醫(yī)療事業(yè)的發(fā)展,而區(qū)塊鏈技術(shù)也有力保障了病人的隱私問題。
參考文獻:
[1] 高敏,葉晰,蔣靜,等.電子病歷信息安全共享關(guān)鍵技術(shù)[J].計算機系統(tǒng)應用,2012,21(12):12-16.
[2] 尤麗玨.區(qū)域性電子病歷信息共享的探索和研究[J].中國醫(yī)療設備,2009,24(2):84-85.
[3] 馬錫坤,楊國斌,于京杰.國內(nèi)電子病歷發(fā)展與應用現(xiàn)狀分析[J].計算機應用與軟件,2015,32(1):10-12,38.
[4] 林娟娟,陳小嫦.構(gòu)建醫(yī)療聯(lián)合體的關(guān)鍵問題分析及其對策建議[J].南京醫(yī)科大學學報(社會科學版),2014,14(2):104-108.
[5] 張辰,馬素剛,李宥謀,等.基于區(qū)塊鏈的醫(yī)療系統(tǒng)[J].現(xiàn)代電子技術(shù),2021,44(4):133-137.
[6] Bethencourt J, Sahai A, Waters B. Ciphertext-policy attribute-based encryption[C]//Berkeley,CA,USA:2007 IEEE Symposium on Security and Privacy.IEEE,2007:321-334.
[7] 周正強,陳玉玲,李濤,等.基于聯(lián)盟鏈的醫(yī)療數(shù)據(jù)安全共享方案[J].應用科學學報,2021,39(1):123-134.
[8] Szabo N.Smart contracts: building blocks for digital markets[EB/OL].[2020-08-26]. https://www.fon.hum.uva.nl/rob/Courses/InformationInSpeech/CDROM/Literature/LOTwinterschool20 06/szabo.best.vwh.net/smart_contracts_2.html.
【通聯(lián)編輯:張薇】