錢(qián)正浩 王珺 羅金喜
摘? 要: 文章利用區(qū)塊鏈技術(shù)的安全、可信任、去中心化、不可篡改等特性,提出了一種基于Hyperledger的醫(yī)療保險(xiǎn)與電子醫(yī)療事務(wù)聯(lián)動(dòng)系統(tǒng)。通過(guò)對(duì)Hyperledger關(guān)鍵技術(shù)的深入分析和研究,明確其技術(shù)原理與技術(shù)特性,并結(jié)合聯(lián)動(dòng)系統(tǒng)各使用方的實(shí)際需求,對(duì)系統(tǒng)進(jìn)行了詳細(xì)設(shè)計(jì)。實(shí)際搭建的聯(lián)動(dòng)系統(tǒng)經(jīng)相關(guān)功能測(cè)試,驗(yàn)證了整體方案的可行性與有效性。
關(guān)鍵詞: 區(qū)塊鏈; 聯(lián)動(dòng)系統(tǒng); 醫(yī)療保險(xiǎn); 不可篡改
中圖分類(lèi)號(hào):TP311? ? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A? ? ?文章編號(hào):1006-8228(2021)12-55-05
Abstract: This paper proposes a Hyperledger based linkage system for medical insurance and electronic medical affairs by using the features of blockchain technology, such as security, trustworthiness, decentralization, and non-tamper ability, etc. The technical principle and technical characteristics are clarified by in-depth analyzing and researching the Hyperledger key technologies, and the detailed design of the system is carried on by combining with the actual needs of all the parties using the linkage system. The linkage system actually built has passed the relevant function tests, which verifies the feasibility and effectiveness of the overall scheme.
Keywords: blockchain; linkage? systems; health insurance; non-tamper
0 引言
近年來(lái),保險(xiǎn)行業(yè)乘著互聯(lián)網(wǎng)的東風(fēng)發(fā)展迅速,但由于互聯(lián)網(wǎng)天生的缺陷,欺詐、騙保等問(wèn)題屢見(jiàn)不鮮。區(qū)塊鏈技術(shù)的出現(xiàn)有助于解決這些問(wèn)題,助力保險(xiǎn)行業(yè)發(fā)展。
保險(xiǎn)公司客戶數(shù)量龐大,收集甄別客戶信息需要花費(fèi)大量的時(shí)間,且目前保險(xiǎn)數(shù)據(jù)采用中心化數(shù)據(jù)庫(kù)的存儲(chǔ)方式,存在嚴(yán)重安全隱患。保險(xiǎn)公司在工作環(huán)節(jié)需要獲取客戶身份、醫(yī)療健康等敏感信息,這些信息一旦泄露,會(huì)給客戶和保險(xiǎn)公司帶來(lái)嚴(yán)重后果。
區(qū)塊鏈技術(shù)以其安全、可信任、自動(dòng)化、可追溯等特點(diǎn)將成為保險(xiǎn)行業(yè)創(chuàng)新的新動(dòng)力。保險(xiǎn)公司可以在審查和驗(yàn)證后將用戶信息寫(xiě)入?yún)^(qū)塊鏈,購(gòu)買(mǎi)不同保險(xiǎn)時(shí),在區(qū)塊鏈上查詢即可,這將大大縮短投保時(shí)間。同時(shí)保險(xiǎn)公司可以與醫(yī)院展開(kāi)合作,經(jīng)過(guò)授權(quán)的醫(yī)院或醫(yī)生把病人醫(yī)療信息寫(xiě)入?yún)^(qū)塊鏈,這可以有效預(yù)防帶病投保,虛假賠案等欺詐行為的發(fā)生;與不同的保險(xiǎn)公司合作,將用戶保單信息上鏈也可有效避免投保人重復(fù)購(gòu)買(mǎi)不同公司相同險(xiǎn)種保險(xiǎn)的問(wèn)題。區(qū)塊鏈技術(shù)還可以實(shí)現(xiàn)自動(dòng)理賠,將理賠條件編寫(xiě)在區(qū)塊鏈的智能合約中,一旦達(dá)到預(yù)定出險(xiǎn)條件,即可快速理賠。
為了解決上述保險(xiǎn)行業(yè)面臨的問(wèn)題,本文提出了一種基于區(qū)塊鏈的醫(yī)療保險(xiǎn)與電子醫(yī)療聯(lián)動(dòng)系統(tǒng)設(shè)計(jì)方案。
1 區(qū)塊鏈技術(shù)的介紹與選擇
區(qū)塊鏈[1]技術(shù)就是將加密數(shù)據(jù)組成區(qū)塊,然后按照時(shí)間順序排序(上鏈)生成不可修改的記錄。區(qū)塊鏈按照準(zhǔn)入機(jī)制的不同可以分為:公有鏈、私有鏈和聯(lián)盟鏈三類(lèi)。公有鏈如比特幣[2]或以太坊[3],任何人都可以自由加入它們,通過(guò)“挖礦”這一行為爭(zhēng)奪記賬權(quán)。聯(lián)盟鏈如Hyperledger Fabric[4],沒(méi)有“挖礦”這一行為,記賬人事先指定,所有記賬人共同決定區(qū)塊的生成。私有鏈僅對(duì)單獨(dú)的個(gè)人或組織開(kāi)放,對(duì)于本文應(yīng)用場(chǎng)景無(wú)太大參考價(jià)值。下面將目前應(yīng)用最廣的三種區(qū)塊鏈進(jìn)行比較,結(jié)果如表1所示。
與Hyperledger Fabric相比,比特幣和以太坊都只有一個(gè)賬本,所有的記錄都在這一個(gè)賬本里面。這導(dǎo)致這個(gè)賬本非常臃腫,在遇到本文設(shè)想的業(yè)務(wù)場(chǎng)景時(shí)會(huì)帶來(lái)隱患。而Fabric采用多賬本的設(shè)計(jì)方式,杜絕了這樣的問(wèn)題。在Fabric中有一個(gè)被稱為channel的概念,一個(gè)channel中包含若干成員,這些成員共享賬本數(shù)據(jù)并共同維護(hù)賬本。一個(gè)channel中可以包含多個(gè)成員,一個(gè)成員也可以在權(quán)限允許的情況下加入多個(gè)channel。并且因?yàn)椴捎肞oW算法,為了保證數(shù)據(jù)的安全性和完整性,比特幣和以太坊處理交易的效率遠(yuǎn)遠(yuǎn)不及Hyperledger Fabric,無(wú)法滿足大數(shù)據(jù)量的業(yè)務(wù)要求。
本文設(shè)計(jì)的醫(yī)療保險(xiǎn)與電子醫(yī)療事務(wù)聯(lián)動(dòng)系統(tǒng),意在將保險(xiǎn)公司方的醫(yī)療保險(xiǎn)信息與醫(yī)院方的病人病歷信息聯(lián)合存儲(chǔ),系統(tǒng)中各醫(yī)院與保險(xiǎn)公司相對(duì)固定,相互信任,無(wú)需面對(duì)整個(gè)公共網(wǎng)絡(luò),且二者業(yè)務(wù)對(duì)工作效率的要求較高,比特幣和以太坊的吞吐量(Transactions Per Second)無(wú)法滿足業(yè)務(wù)需求,保險(xiǎn)公司方發(fā)布新的保險(xiǎn)要求區(qū)塊鏈方面具備靈活的智能合約系統(tǒng)。此外,因?yàn)镠yperledger Fabric中channel的概念,不同的保險(xiǎn)公司只需存儲(chǔ)自身與醫(yī)院相關(guān)的交易,緩解了數(shù)據(jù)存儲(chǔ)的壓力。綜上所述,本文利用Hyperledger 的特性,對(duì)醫(yī)療保險(xiǎn)與電子醫(yī)療事務(wù)聯(lián)動(dòng)系統(tǒng)進(jìn)行設(shè)計(jì)與實(shí)現(xiàn)。
2 系統(tǒng)框架設(shè)計(jì)
2.1 系統(tǒng)模型設(shè)計(jì)
基于Hyperledger的事務(wù)聯(lián)動(dòng)系統(tǒng)模型如圖1所示。系統(tǒng)主要涉及醫(yī)院、保險(xiǎn)公司和用戶三方。各醫(yī)院和保險(xiǎn)公司在實(shí)際的區(qū)塊鏈網(wǎng)絡(luò)中有自己的組織(0rg),每個(gè)組織可以設(shè)置自己的節(jié)點(diǎn)(Peer)。節(jié)點(diǎn)負(fù)責(zé)對(duì)各自的相關(guān)信息進(jìn)行錄入。醫(yī)院的工作人員負(fù)責(zé)將用戶的病歷信息[5]錄入系統(tǒng),保險(xiǎn)公司的工作人員負(fù)責(zé)將用戶的保單信息錄入系統(tǒng),錄入的信息在智能合約判斷合法后,通過(guò)區(qū)塊鏈節(jié)點(diǎn)上鏈,各個(gè)區(qū)塊鏈節(jié)點(diǎn)同步信息,生成區(qū)塊,形成共識(shí)的區(qū)塊鏈數(shù)據(jù)。醫(yī)院的工作人員還可以在用戶繳費(fèi)時(shí),輸入應(yīng)繳費(fèi)用和所患病種,智能合約通過(guò)鏈上已存的用戶保單數(shù)據(jù),判斷出用戶的實(shí)際應(yīng)繳費(fèi)用返還給醫(yī)院工作人員。保險(xiǎn)公司的工作人員同樣可以在用戶的病歷信息上鏈之后,通過(guò)智能合約獲知用戶是否具有購(gòu)買(mǎi)保險(xiǎn)的資格,而不再需要用戶提供健康告知。這使得用戶的病歷信息更加安全可靠,保險(xiǎn)購(gòu)買(mǎi)更加便捷,用戶看病理賠經(jīng)由智能合約完成,更為簡(jiǎn)便。
2.2 系統(tǒng)軟件架構(gòu)
根據(jù)上文構(gòu)建的系統(tǒng)模型進(jìn)行該系統(tǒng)的軟件架構(gòu)設(shè)計(jì),分為基礎(chǔ)層、數(shù)據(jù)層和應(yīng)用層?;A(chǔ)層是Fabric區(qū)塊鏈的基礎(chǔ)架構(gòu);數(shù)據(jù)層包括存儲(chǔ)數(shù)據(jù)、共識(shí)機(jī)制、智能合約、鏈碼等,同時(shí)還提供權(quán)限管理等功能;應(yīng)用層主要進(jìn)行功能的編寫(xiě)和調(diào)用,包括病歷信息錄入、保單信息錄入、用戶信息查詢、應(yīng)繳費(fèi)用查詢等操作。醫(yī)療保險(xiǎn)與電子醫(yī)療事務(wù)聯(lián)動(dòng)系統(tǒng)軟件架構(gòu)圖如圖2所示。
3 系統(tǒng)模塊設(shè)計(jì)
3.1 Hyperledger Fabric基本組成及技術(shù)原理
Fabric由五個(gè)核心模塊:Peer(主節(jié)點(diǎn)模塊、負(fù)責(zé)存儲(chǔ)區(qū)塊鏈數(shù)據(jù),運(yùn)行維護(hù)鏈碼)、Orderer(交易打包、排序模塊)、Cryptogen(組織和證書(shū)生成模塊)、Configtxgen(區(qū)塊和交易生成模塊)和Configtxlator(區(qū)塊和交易解析模塊)組成。其中Peer模塊和Orderer模塊的架構(gòu)如圖3所示。一個(gè)組織內(nèi)有四個(gè)Peer服務(wù)器節(jié)點(diǎn),這四個(gè)Peer服務(wù)器節(jié)點(diǎn)并不是四個(gè)Peer程序進(jìn)程,而是表示一個(gè)組織內(nèi)的四個(gè)角色。作為一個(gè)完整的組織,必須具備這四個(gè)角色(可以由一個(gè)Peer節(jié)點(diǎn)擔(dān)任)。這四個(gè)節(jié)點(diǎn)中Commit節(jié)點(diǎn)主要負(fù)責(zé)維護(hù)區(qū)塊鏈的賬本結(jié)構(gòu),Endorse節(jié)點(diǎn)主要負(fù)責(zé)對(duì)交易進(jìn)行檢驗(yàn),Leader節(jié)點(diǎn)負(fù)責(zé)代表組織從Orderer節(jié)點(diǎn)中獲取區(qū)塊信息,Anchor節(jié)點(diǎn)負(fù)責(zé)代表組織和其他組織進(jìn)行信息交換。
如圖3所示,Orderer模塊負(fù)責(zé)對(duì)不同客戶端發(fā)送的交易進(jìn)行排序和打包,其工作原理如下。
● 客戶端向Orderer模塊發(fā)送交易。
● Orderer節(jié)點(diǎn)對(duì)交易進(jìn)行檢查,如果符合條件,則將交易發(fā)送到排序隊(duì)列(Kafka)。
● Orderer節(jié)點(diǎn)從消息隊(duì)列中取出交易并進(jìn)行打包。打包之后會(huì)將相關(guān)的消息存儲(chǔ)到本地存儲(chǔ)中。
● Orderer節(jié)點(diǎn)根據(jù)客戶端的代碼請(qǐng)求,將區(qū)塊鏈發(fā)送給客戶端。
3.2 聯(lián)動(dòng)系統(tǒng)設(shè)計(jì)
對(duì)于聯(lián)動(dòng)系統(tǒng)的設(shè)計(jì)分為三部分:網(wǎng)絡(luò)模塊設(shè)計(jì)、智能合約模塊設(shè)計(jì)和接口模塊設(shè)計(jì)。網(wǎng)絡(luò)模塊設(shè)計(jì)主要建立聯(lián)動(dòng)系統(tǒng)的區(qū)塊鏈內(nèi)部邏輯,聯(lián)動(dòng)系統(tǒng)的區(qū)塊鏈內(nèi)部邏輯結(jié)構(gòu)如圖4所示。
整個(gè)聯(lián)動(dòng)系統(tǒng)中的參與方分為醫(yī)院方和保險(xiǎn)公司方,醫(yī)院方設(shè)為hp_org1,因?yàn)楸kU(xiǎn)公司數(shù)量眾多,所以暫設(shè)為is_org1和is_org2,每個(gè)組織中設(shè)置三個(gè)節(jié)點(diǎn)來(lái)模擬實(shí)際工作中的情況,對(duì)用戶數(shù)據(jù)進(jìn)行錄入、修改等操作。
因?yàn)閷?shí)際用戶病歷信息較為復(fù)雜,所以在智能合約模塊的設(shè)計(jì)中,暫選取了兩種較為常見(jiàn)的重大疾病,共需要記錄用戶的六項(xiàng)信息,并確定了智能合約的名稱以及對(duì)應(yīng)功能,對(duì)智能合約實(shí)現(xiàn)功能進(jìn)行設(shè)計(jì),主要設(shè)計(jì)以下幾個(gè)功能。
⑴ createUser():該功能需要傳入共二個(gè)參數(shù),第一個(gè)參數(shù)為用戶的身份證號(hào),第二個(gè)參數(shù)為用戶的姓名。
⑵ queryUser():該功能實(shí)現(xiàn)對(duì)用戶信息的查詢,需要傳入一個(gè)參數(shù),參數(shù)為用戶身份證號(hào),查詢結(jié)果返回用戶的病歷信息和保單信息。
⑶ queryUserMrd():該功能實(shí)現(xiàn)對(duì)用戶病歷信息的查詢,需要傳入一個(gè)參數(shù),參數(shù)為用戶身份證號(hào),查詢結(jié)果返回用戶的病歷信息。
⑷ queryUserPd():該功能實(shí)現(xiàn)對(duì)用戶保單信息的查詢,需要傳入一個(gè)參數(shù),參數(shù)為用戶身份證號(hào),查詢結(jié)果返回用戶的保單信息。
⑸ changeUserMrInfo():該功能實(shí)現(xiàn)對(duì)用戶病歷信息的修改,需要傳入三個(gè)參數(shù),第一個(gè)參數(shù)為用戶身份證號(hào),第二個(gè)參數(shù)為用戶心血管病史,第三個(gè)參數(shù)為用戶腫瘤病史。
⑹ changeUserIsInfo():該功能實(shí)現(xiàn)對(duì)用戶保單信息的修改,需要傳入四個(gè)參數(shù),第一個(gè)參數(shù)為用戶身份證號(hào),第二個(gè)參數(shù)為用戶保險(xiǎn)名稱,第三個(gè)參數(shù)為保險(xiǎn)開(kāi)始時(shí)間,第四個(gè)參數(shù)為保險(xiǎn)結(jié)束時(shí)間。
⑺ cmiClaims():該功能實(shí)現(xiàn)綜合醫(yī)療險(xiǎn)理賠功能,需要傳入三個(gè)參數(shù),第一個(gè)參數(shù)為用戶身份證號(hào),第二個(gè)參數(shù)為用戶需要繳納的費(fèi)用,第三個(gè)參數(shù)為用戶所患疾病類(lèi)型如腫瘤、心血管等。該功能會(huì)返回用戶理賠后需要繳納的費(fèi)用。
接口模塊設(shè)計(jì)主要通過(guò)Fabric-Go-SDK進(jìn)行實(shí)現(xiàn),主要分為query.go腳本與invoke.go腳本。query.go腳本主要調(diào)用queryUser_mrd()和queryUser_pd()還有queryUser()三種功能;invoke.go腳本主要調(diào)用createUser()、changeUserMrInfo()、changeUserIsInfo()、cmiClaims()四種功能。
4 系統(tǒng)實(shí)現(xiàn)與測(cè)試
4.1 系統(tǒng)實(shí)現(xiàn)
基于Hyperledger Fabric的醫(yī)療保險(xiǎn)與電子醫(yī)療事務(wù)聯(lián)動(dòng)系統(tǒng)搭建的硬件環(huán)境采用Ubuntu虛擬機(jī)完成,利用Docker容器模擬多機(jī)環(huán)境進(jìn)行封裝,具體性能如表2所示。
系統(tǒng)搭建的軟件環(huán)境如表3所示。環(huán)境搭建完成后,利用Hyperledger Fabric提供的5個(gè)核心模塊對(duì)醫(yī)療保險(xiǎn)與電子醫(yī)療事務(wù)聯(lián)動(dòng)系統(tǒng)進(jìn)行實(shí)際搭建。
4.2 原型系統(tǒng)測(cè)試
基于Hyperledger Fabric的醫(yī)療保險(xiǎn)與電子醫(yī)療事務(wù)聯(lián)動(dòng)系統(tǒng)搭建完成后,以User1為例,對(duì)相關(guān)功能進(jìn)行測(cè)試。
⑴ createUser():創(chuàng)建User1,并寫(xiě)入U(xiǎn)ser1的姓名,其余信息置空,結(jié)果如圖5所示。
⑵ queryUser():對(duì)User1進(jìn)行查詢,結(jié)果如圖6所示,可以看出User1已經(jīng)被創(chuàng)建,且姓名已顯示。
⑶ changeUserIsInfo():對(duì)User1中的保單信息進(jìn)行寫(xiě)入,并進(jìn)行queryUserPd()操作,結(jié)果如圖7所示,可以看出User1的相關(guān)信息已經(jīng)改變,病歷信息不再為空。
⑷ cmiClaims():對(duì)User1進(jìn)行出院自動(dòng)理賠輸出應(yīng)付醫(yī)藥費(fèi)(這里假設(shè)張三因腫瘤方面疾病需繳納20000元),并進(jìn)行queryUserMrd()操作查詢其理賠后的病歷信息,結(jié)果如圖8、圖9所示,可以看出因?yàn)闄z測(cè)到User1在保險(xiǎn)有效期內(nèi),所以無(wú)需繳納醫(yī)藥費(fèi),且在理賠過(guò)后病歷信息已錄入。
⑸ changeUserMrInfo():對(duì)User1中的病歷信息進(jìn)行寫(xiě)入(假設(shè)張三在2008-02-03,有過(guò)心血管疾?。⒃俅芜M(jìn)行queryUserMrd()操作,結(jié)果如圖10所示,可以看出User1的相關(guān)信息已經(jīng)改變。
5 結(jié)束語(yǔ)
本文研究了一種基于Hyperledger Fabric區(qū)塊鏈的醫(yī)療保險(xiǎn)與電子醫(yī)療事務(wù)聯(lián)動(dòng)系統(tǒng),分析了目前保險(xiǎn)行業(yè)存在的痛點(diǎn);對(duì)目前主流的三種區(qū)塊鏈系統(tǒng)進(jìn)行了比較篩選,選定Hyperledger Fabric聯(lián)盟鏈作為平臺(tái)構(gòu)建事務(wù)聯(lián)動(dòng)系統(tǒng)并進(jìn)行了實(shí)際搭建;搭建完成后對(duì)醫(yī)療保險(xiǎn)與電子醫(yī)療事務(wù)聯(lián)動(dòng)系統(tǒng)中的相關(guān)功能進(jìn)行了模擬測(cè)試。
從測(cè)試結(jié)果看,本文提出的基于HyperledgerFabric區(qū)塊鏈的醫(yī)療保險(xiǎn)與電子醫(yī)療聯(lián)動(dòng)系統(tǒng)基本滿足當(dāng)前保險(xiǎn)行業(yè)對(duì)聯(lián)動(dòng)系統(tǒng)的需求,解決了保險(xiǎn)業(yè)現(xiàn)存的帶病投保、虛假配案等風(fēng)險(xiǎn)問(wèn)題,保證了用戶信息的安全性、真實(shí)性、有效性以及不可篡改性。
參考文獻(xiàn)(References):
[1] 邵奇峰,金澈清,張召,錢(qián)衛(wèi)寧,周傲英.區(qū)塊鏈技術(shù):架構(gòu)及進(jìn)展[J].計(jì)算機(jī)學(xué)報(bào),2018.41(5):969-988
[2] Nakamoto S. Bitcoin: A Peer-to-Peer Electronic Cash System[J]. consulted,2008.
[3] Wood G. Ethereum: a secure decentralised generalised transaction ledger,2014.
[4] Androulaki E,? Manevich Y,? Muralidharan S, et al.Hyperledger fabric: a distributed operating system for permissioned blockchains[C]//the Thirteenth EuroSys Conference,2018.
[5] 薛騰飛,傅群超,王樅,王新宴.基于區(qū)塊鏈的醫(yī)療數(shù)據(jù)共享模型研究[J].自動(dòng)化學(xué)報(bào),2017.43(9):1555-1562