王小偉,呂友輝
(1鄭州大學(xué)體育學(xué)院信息管理中心 河南 鄭州 450052)
(2鄭州澍青醫(yī)學(xué)高等??茖W(xué)校 河南 鄭州 450064)
傳統(tǒng)的信息系統(tǒng)大都采用中心化部署,這種部署方式對(duì)于中心節(jié)點(diǎn)依賴性較強(qiáng),一旦中心節(jié)點(diǎn)出現(xiàn)故障或者遭到攻擊,將會(huì)導(dǎo)致整個(gè)系統(tǒng)癱瘓,極端情況下可能會(huì)造成數(shù)據(jù)丟失,造成巨大的損失。而且,運(yùn)動(dòng)員在遇到運(yùn)動(dòng)損傷的時(shí)候,希望能第一時(shí)間接受治療,可能會(huì)需要不同醫(yī)院的醫(yī)生共同會(huì)診,因此需要?dú)v史傷病記錄是互信的、可查的,這樣可節(jié)約診療時(shí)間,避免不必要的重復(fù)檢查及醫(yī)療費(fèi)用的額外支出。運(yùn)動(dòng)員傷病信息屬于重要的戰(zhàn)略資源,不允許被對(duì)手竊取,因此對(duì)外需要匿名,對(duì)內(nèi)則需要如實(shí)準(zhǔn)確記錄,不可篡改。這樣在運(yùn)動(dòng)員康復(fù)訓(xùn)練、備戰(zhàn)過程中才能有的放矢,進(jìn)行有針對(duì)性的訓(xùn)練與治療。如何保證傷病運(yùn)動(dòng)員診療信息可靠、可信,是迫切需要解決的問題。
區(qū)塊鏈[1]是一種分布式賬本技術(shù),每個(gè)節(jié)點(diǎn)都存儲(chǔ)一份數(shù)據(jù),具有高冗余性、去中心化、高安全性等特點(diǎn),可有效避免因中心節(jié)點(diǎn)遭受攻擊或因管理不當(dāng)而造成的大規(guī)模數(shù)據(jù)丟失或泄露等問題,十分適合用來存儲(chǔ)重要數(shù)據(jù)。徐健等[2]提出了一個(gè)基于區(qū)塊鏈技術(shù)的實(shí)時(shí)安全醫(yī)療記錄解決方案(RSMR),在數(shù)據(jù)存儲(chǔ)過程中利用星際文件系統(tǒng)(IPFS)進(jìn)行數(shù)據(jù)存儲(chǔ),并給出了詳細(xì)的智能合約方案。高夢(mèng)婕[3]根據(jù)病人匿名就醫(yī)的現(xiàn)實(shí)需求,提出了一種基于區(qū)塊鏈的醫(yī)療數(shù)據(jù)簽密方案,并給出了系統(tǒng)模型和安全模型,進(jìn)行了安全性證明和性能分析。張利華等[4]提出了一個(gè)基于聯(lián)盟鏈的去中心化的雙鏈存儲(chǔ)模型,用于存儲(chǔ)鐵路沿線監(jiān)測數(shù)據(jù)。從各類文獻(xiàn)可看出,將區(qū)塊鏈技術(shù)用于遠(yuǎn)程支援平臺(tái)具有很好的技術(shù)基礎(chǔ)。
本文嘗試構(gòu)建一個(gè)基于區(qū)塊鏈的運(yùn)動(dòng)醫(yī)療與康復(fù)遠(yuǎn)程支援平臺(tái),將運(yùn)動(dòng)員歷史診療信息存儲(chǔ)到區(qū)塊鏈平臺(tái),利用區(qū)塊鏈技術(shù)的不可逆、防篡改等特性,解決在遠(yuǎn)程診療過程中存在的互信問題及單點(diǎn)故障問題。
區(qū)塊鏈(blockchain)是一種按照時(shí)間順序排列的鏈?zhǔn)浇Y(jié)構(gòu)[5],運(yùn)用了非對(duì)稱加密、哈希函數(shù)、時(shí)間戳、共識(shí)機(jī)制、點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)等技術(shù),具有去中心化、不可篡改、可追溯、全程留痕、公開可驗(yàn)證、代碼開源等特點(diǎn)。
傳統(tǒng)分布式數(shù)據(jù)庫由中心服務(wù)器維護(hù)數(shù)據(jù),對(duì)中心服務(wù)器依賴性較強(qiáng),一旦中心服務(wù)器出現(xiàn)故障將導(dǎo)致所有服務(wù)中斷,還可能造成數(shù)據(jù)丟失。而區(qū)塊鏈中數(shù)據(jù)由所有節(jié)點(diǎn)共同維護(hù),每個(gè)節(jié)點(diǎn)都保存一份完整的數(shù)據(jù),即便某些節(jié)點(diǎn)發(fā)生故障也不會(huì)導(dǎo)致數(shù)據(jù)的丟失,所有參與節(jié)點(diǎn)以共同記賬的方式來維護(hù)數(shù)據(jù)庫。區(qū)塊鏈節(jié)點(diǎn)之間通過共識(shí)算法來保證數(shù)據(jù)的一致性[6],通過計(jì)算哈希值是否發(fā)生變化來判斷數(shù)據(jù)是否被篡改。
一個(gè)區(qū)塊由區(qū)塊頭和區(qū)塊體兩部分組成[7-8]。區(qū)塊頭中保存的信息有前一區(qū)塊哈希、版本、時(shí)間戳、難度、隨機(jī)數(shù)、merle根。區(qū)塊體中保存的是每筆交易及其哈希值構(gòu)成的merle樹,區(qū)塊之間通過將前一區(qū)塊的hash值添加至后一區(qū)塊的區(qū)塊頭中,從而形成了鏈?zhǔn)浇Y(jié)構(gòu),見圖1。
基于區(qū)塊鏈的冬季項(xiàng)目遠(yuǎn)程支援平臺(tái),主要目的是為運(yùn)動(dòng)員遠(yuǎn)程診療提供平臺(tái)支撐,當(dāng)隊(duì)醫(yī)需要場外醫(yī)生遠(yuǎn)程協(xié)助時(shí),能夠隨時(shí)開啟遠(yuǎn)程會(huì)診模式,為專家遠(yuǎn)程會(huì)診提供平臺(tái)支撐。同時(shí)為使專家團(tuán)隊(duì)能迅速了解運(yùn)動(dòng)員歷史傷病情況,需要能夠及時(shí)準(zhǔn)確地獲取到傷病運(yùn)動(dòng)員的歷史病歷記錄,以便傷病運(yùn)動(dòng)員能快速獲取診療援助。考慮到運(yùn)動(dòng)員的特殊性,診療信息需要安全、可靠、保密,計(jì)劃采用區(qū)塊鏈技術(shù)來進(jìn)行診療數(shù)據(jù)的存儲(chǔ),鏈上數(shù)據(jù)不可篡改,可信可靠。在遠(yuǎn)程診療過程中的數(shù)據(jù)不必上鏈接,只需要存儲(chǔ)在本地服務(wù)器即可,這樣可節(jié)省鏈上空間。
根據(jù)前面描述,冬季項(xiàng)目遠(yuǎn)程支援平臺(tái)主要為冬季項(xiàng)目訓(xùn)練隊(duì)伍提供遠(yuǎn)程醫(yī)療支撐,主要使用者為隊(duì)醫(yī)、運(yùn)動(dòng)員、教練員及場外醫(yī)生團(tuán)隊(duì)。業(yè)務(wù)功能劃分見圖2。
整個(gè)系統(tǒng)分為5個(gè)功能模塊:注冊(cè)/登錄模塊、運(yùn)動(dòng)員病歷管理模塊、處方跟蹤模塊、遠(yuǎn)程會(huì)議管理模塊、后臺(tái)管理模塊。
(1)注冊(cè)/登錄模塊:該模塊為不同身份用戶提供相應(yīng)入口,包括用戶注冊(cè)、登錄等功能??紤]到安全性,不允許匿名注冊(cè),所有用戶通過小程序?qū)嵜J(rèn)證,認(rèn)證后賦予相應(yīng)角色。
(2)運(yùn)動(dòng)員病歷管理模塊:該模塊為傷病運(yùn)動(dòng)員提供病歷管理。該處病歷通常由隊(duì)醫(yī)發(fā)起,對(duì)運(yùn)動(dòng)員進(jìn)行傷病診療,將診療處方及就診情況存儲(chǔ)到區(qū)塊鏈上;當(dāng)運(yùn)動(dòng)員需要場外醫(yī)生協(xié)助診療的時(shí)候,可通過授權(quán)場外醫(yī)生查看歷史病歷處方。個(gè)人信息模塊主要是提供查閱或修改患者信息功能。
(3)處方跟蹤模塊:該部分主要是隊(duì)醫(yī)根據(jù)運(yùn)動(dòng)員傷病情況開具處方,如果涉及用藥,還需要反興奮劑專員的審核,如果需要場外醫(yī)生協(xié)助,還需要發(fā)起遠(yuǎn)程會(huì)議進(jìn)行多方會(huì)診。
(4)遠(yuǎn)程支援會(huì)議管理模塊:當(dāng)隊(duì)醫(yī)需要場外醫(yī)生協(xié)助時(shí),可實(shí)時(shí)發(fā)起線上會(huì)議進(jìn)行遠(yuǎn)程會(huì)診,這部分內(nèi)容屬于過程性內(nèi)容,通常占用空間會(huì)比較大,不適合存儲(chǔ)到區(qū)塊鏈上,因此該部分內(nèi)容保存到鏈接下,當(dāng)需要查詢的時(shí)候,可以在鏈接下查詢。
(5)后臺(tái)管理模塊:主要包括用戶管理、團(tuán)隊(duì)管理、場外醫(yī)生管理等功能。
根據(jù)前面功能分析,運(yùn)動(dòng)員診療信息需要存儲(chǔ)到區(qū)塊鏈上。結(jié)合公有鏈、聯(lián)盟鏈特性,運(yùn)動(dòng)員診療信息屬于重要的戰(zhàn)略資源,不適合存儲(chǔ)在公有鏈上,因此選擇聯(lián)盟鏈,聯(lián)盟成員要有準(zhǔn)入機(jī)制。通常的做法是創(chuàng)建一個(gè)通道,邀請(qǐng)聯(lián)盟內(nèi)成員進(jìn)入該通道,信息對(duì)于聯(lián)盟內(nèi)成員是公開透明的,但對(duì)于通道外的其他成員是無法訪問的,這樣可保證通道內(nèi)是一個(gè)隔離的賬本。有時(shí)候,即便是同一個(gè)聯(lián)盟內(nèi)也不希望別人輕易獲取到傷病運(yùn)動(dòng)員的信息,因此傷病運(yùn)動(dòng)員診療信息在上鏈之前可采用非對(duì)稱加密算法,對(duì)診療信息加密后上傳。診療信息的解密,只有傷病運(yùn)動(dòng)員自身的密鑰才能解開,這樣就充分保障了傷病運(yùn)動(dòng)員的個(gè)人隱私不被泄露。遠(yuǎn)程支援平臺(tái)的邏輯結(jié)構(gòu)圖見圖3。
表示層:即前端頁面,針對(duì)不同登錄用戶,表示層通過導(dǎo)航欄引導(dǎo),幫助用戶完成相關(guān)業(yè)務(wù)操作。
業(yè)務(wù)邏輯層:涉及具體業(yè)務(wù)邏輯,包括注冊(cè)登錄管理、運(yùn)動(dòng)員病歷管理、處方跟蹤、遠(yuǎn)程診療會(huì)議管理等操作,屬于網(wǎng)站的后臺(tái)服務(wù)。
數(shù)據(jù)訪問層:主要為區(qū)塊鏈網(wǎng)絡(luò)和本地的數(shù)據(jù)庫設(shè)計(jì)數(shù)據(jù)交互接口。一方面與區(qū)塊鏈網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)交互,另一方面則通過調(diào)用 MySQL客戶端操作本地?cái)?shù)據(jù)庫。
冬季項(xiàng)目遠(yuǎn)程支援平臺(tái)基本功能實(shí)現(xiàn)跟本地平臺(tái)大部分相同,唯一不同的地方就在于診療數(shù)據(jù)是存在區(qū)塊鏈上的,需要到區(qū)塊鏈上來存取數(shù)據(jù)。本部分對(duì)系統(tǒng)主要部分進(jìn)行模塊設(shè)計(jì)。
如圖4所示,用戶在注冊(cè)時(shí),通過調(diào)用SDK執(zhí)行智能合約,獲取鏈上身份,注冊(cè)完成將得到唯一的加密地址作為用戶ID,以及用戶的公私鑰對(duì)(PK,SK),在客戶端上還將獲得一個(gè)存放個(gè)人病歷信息的文件夾UserFold,用于存放用戶在本次診療過程中產(chǎn)生的各類電子記錄EMR(Electronic medical records)。初始用戶結(jié)構(gòu)體如式(1)所示:
用戶正常登錄時(shí),通過調(diào)用智能合約,可根據(jù)ID到區(qū)塊鏈上查詢個(gè)人信息及加密的電子病歷。
病歷管理模塊涉及5個(gè)實(shí)體,即隊(duì)醫(yī)、運(yùn)動(dòng)員、教練員、區(qū)塊鏈、場外醫(yī)生。場外醫(yī)生和隊(duì)醫(yī)的角色相類似,教練和運(yùn)動(dòng)員的角色類似,他們的角色見圖5。
隊(duì)醫(yī)負(fù)責(zé)生成、發(fā)布運(yùn)動(dòng)員的診療記錄到區(qū)塊鏈,運(yùn)動(dòng)員可以從鏈上檢索電子診療記錄并授權(quán)給場外醫(yī)生查看,場外醫(yī)生可以在鏈上檢索經(jīng)授權(quán)的電子記錄并診斷,同時(shí)將本次診療記錄發(fā)布到鏈上。教練員經(jīng)過授權(quán)可查詢運(yùn)動(dòng)員的診療記錄。
隊(duì)醫(yī):相當(dāng)于醫(yī)生,收到運(yùn)動(dòng)員請(qǐng)求后,為運(yùn)動(dòng)員診斷并生成傷病診療記錄,經(jīng)加密處理后上傳到鏈上。該角色在提供診療服務(wù)時(shí)可要求患者提供歷史傷病記錄,并從區(qū)塊鏈檢索相關(guān)數(shù)據(jù)進(jìn)行驗(yàn)證。
運(yùn)動(dòng)員:即患者,是個(gè)人傷病診療信息的擁有者。在接受隊(duì)醫(yī)或場外醫(yī)生診斷后獲取傷病診療記錄的相關(guān)證明憑證,利用此憑證驗(yàn)證電子診療記錄的有效性。在更換其他醫(yī)生時(shí),患者可提供歷史電子診療記錄獲取更準(zhǔn)確、更高效的醫(yī)療服務(wù),但為了避免電子診療記錄被惡意傳播,患者不直接提供電子診療記錄,而是利用加密處理過的電子診療記錄。
教練員:具有運(yùn)動(dòng)員診療數(shù)據(jù)訪問需求,訪問時(shí)需要獲得權(quán)限。
區(qū)塊鏈:采用聯(lián)盟鏈,通過創(chuàng)建通道,形成相對(duì)隔離的聯(lián)盟賬本,聯(lián)盟內(nèi)所有節(jié)點(diǎn)共同維護(hù)賬本,運(yùn)動(dòng)員將在區(qū)塊鏈上完成匿名化就醫(yī)。
3.2.1 診療信息上鏈
圖6為診療信息上鏈過程,隊(duì)醫(yī)為受傷運(yùn)動(dòng)員診療結(jié)束后,形成電子病歷EMR,用受傷運(yùn)動(dòng)員的公鑰PK加密診療信息,加密后得到一個(gè)唯一文件HDF,加密過程用公式(2)表示:
隊(duì)醫(yī)或醫(yī)生在注冊(cè)后也將獲得自己的加密地址作為唯一ID及自己的公私鑰對(duì)(PKd,smd),對(duì)于醫(yī)生的公私鑰,主要用來簽名及驗(yàn)證身份。
隊(duì)醫(yī)在診療結(jié)束后要為本次診療服務(wù)負(fù)責(zé),因此需要隊(duì)醫(yī)用自己的私鑰smd簽名,用于身份驗(yàn)證,之后將加密后的文件HDF及EMR保存至患者文件夾UserFold,等待上傳至區(qū)塊鏈。簽名過程用公式(3)表示:
3.2.2 診療信息查詢與下載
隊(duì)醫(yī)或醫(yī)生在收到傷病運(yùn)動(dòng)員請(qǐng)求后,根據(jù)運(yùn)動(dòng)員提供ID在區(qū)塊鏈上查詢運(yùn)動(dòng)員傷病診療信息LockFile,這時(shí)隊(duì)醫(yī)/醫(yī)生可以查到運(yùn)動(dòng)員診療信息,但是無法解密,需要獲得受傷運(yùn)動(dòng)員的授權(quán)才能夠解密。在解密前,還需要驗(yàn)證醫(yī)生的簽名igd,驗(yàn)證通過后可得到原文件EMR,見圖7。
驗(yàn)證簽名過程用公式(4)表示:
解密公式為式(5):
處方跟蹤流程見圖8,隊(duì)醫(yī)在收到運(yùn)動(dòng)員請(qǐng)求后,首先給出初診結(jié)果,如果隊(duì)醫(yī)能夠處理,那么可以直接開出處方,如果需要場外醫(yī)生或?qū)<疫h(yuǎn)程協(xié)助,那么需要預(yù)約,發(fā)起在線診療會(huì)議,會(huì)議結(jié)束后,根據(jù)專家意見開出處方。如果處方中沒有藥品,那么可直接確認(rèn)處方。如果處方中含有藥品,那么還需要反興奮劑專員來確認(rèn)是否符合反興奮劑要求,如果不符合,那么需要隊(duì)醫(yī)重新開具處方;如果符合要求,則由隊(duì)醫(yī)確認(rèn)處方,流程結(jié)束。
遠(yuǎn)程會(huì)診模塊的實(shí)現(xiàn)借助第三方聲網(wǎng)接口,完成實(shí)時(shí)視頻會(huì)議功能,視頻會(huì)議系統(tǒng)支持實(shí)時(shí)通話、實(shí)時(shí)視頻,還可以發(fā)送圖片、小視頻、語音等,支持異步會(huì)議,這樣可方便因國內(nèi)外時(shí)差不同而導(dǎo)致的不便。同時(shí)為了保障視頻信息的長期存儲(chǔ)以備后查,將視頻會(huì)議過程信息拉取到本地服務(wù)器,在需要查看時(shí)可通過查看歷史記錄來進(jìn)行查閱。
后臺(tái)管理模塊主要包括用戶管理、團(tuán)隊(duì)管理、場外醫(yī)生管理等功能。用戶管理主要是系統(tǒng)用戶、小程序用戶,用戶可能存在多個(gè)角色。團(tuán)隊(duì)管理主要是運(yùn)動(dòng)隊(duì)管理,通常一支運(yùn)動(dòng)隊(duì)包含領(lǐng)隊(duì)、隊(duì)員、教練、隊(duì)醫(yī)、反興奮劑專員等。場外醫(yī)生管理:主要是當(dāng)隊(duì)醫(yī)需要場外協(xié)助時(shí),可能會(huì)需要不同醫(yī)院的醫(yī)生共同來會(huì)診,才能最終下結(jié)論,因此場外醫(yī)生管理,其實(shí)包含了醫(yī)院管理、醫(yī)生管理、科室管理。
本文設(shè)計(jì)了一個(gè)基于區(qū)塊鏈的冬季項(xiàng)目遠(yuǎn)程診療支援平臺(tái),用于解決傷病運(yùn)動(dòng)員的遠(yuǎn)程會(huì)診問題,根據(jù)業(yè)務(wù)需求設(shè)計(jì)了5個(gè)功能模塊,給出了系統(tǒng)的邏輯結(jié)構(gòu)模型,對(duì)系統(tǒng)關(guān)鍵模塊的流程進(jìn)行了詳細(xì)設(shè)計(jì)。為保障運(yùn)動(dòng)員診療信息的安全可靠可信,使用了區(qū)塊鏈技術(shù),一方面解決傳統(tǒng)的集中存儲(chǔ)帶來的單點(diǎn)故障問題,另一方面將運(yùn)動(dòng)員病歷信息存儲(chǔ)到區(qū)塊鏈上,任何人不能篡改,通過密碼技術(shù)使得只有經(jīng)過授權(quán)的教練、醫(yī)生才能夠查看特定的信息,充分保障了信息的安全可靠。同時(shí)區(qū)塊鏈技術(shù)還可解決信息的互信問題,當(dāng)需要不同醫(yī)院的醫(yī)生共同會(huì)診時(shí),需要?dú)v史傷病記錄是互信可查的,具體實(shí)現(xiàn)各項(xiàng)功能,真正為運(yùn)動(dòng)隊(duì)提供服務(wù)。