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