鐘 楠, 楊 波, 張麗娜,2
1. 陜西師范大學(xué)計(jì)算機(jī)科學(xué)學(xué)院, 西安 710119
2. 西安科技大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院, 西安 710600
隨著信息技術(shù)的快速發(fā)展, 電子信息技術(shù)在日常生活中的應(yīng)用越來(lái)越廣泛, 極大地方便了人們的生活.在醫(yī)療系統(tǒng)中使用的電子病歷, 相對(duì)于傳統(tǒng)紙質(zhì)病歷而言, 具有存儲(chǔ)和操作簡(jiǎn)單、易于數(shù)據(jù)共享等特點(diǎn), 被越來(lái)越多的醫(yī)療機(jī)構(gòu)采用[1]. 病歷和相關(guān)醫(yī)療信息十分重要和敏感, 還需要在醫(yī)療系統(tǒng)的參與者之間頻繁共享. 但是在這些數(shù)據(jù)的存儲(chǔ)和共享過(guò)程中仍存在很多問(wèn)題. 根據(jù)2013 年的一份報(bào)告[2], 醫(yī)療過(guò)失中最常見(jiàn)的后果是患者死亡. 醫(yī)療訴訟案例中的原告通常是已故患者的家屬[3], 醫(yī)療訴訟往往會(huì)由于患者家屬對(duì)于已故患者的病歷內(nèi)容不知情而無(wú)法順利進(jìn)行. 醫(yī)療數(shù)據(jù)作為患者診斷和治療過(guò)程的數(shù)字證據(jù)非常重要. 在醫(yī)療事故的訴訟案件中, 醫(yī)療數(shù)據(jù)可作為舉證信息, 但這些數(shù)字證據(jù)極易被刪除或者篡改. 此外, 發(fā)布和存儲(chǔ)電子病歷的第三方平臺(tái)容易受到內(nèi)部或外部攻擊, 從而暴露患者的隱私. 這些由醫(yī)療信息存儲(chǔ)中心化所引發(fā)的問(wèn)題嚴(yán)重阻礙了醫(yī)療數(shù)據(jù)的共享.
區(qū)塊鏈[4]是由P2P 網(wǎng)絡(luò)維護(hù)的分布式、不可修改的公共數(shù)字分類賬本. 共識(shí)機(jī)制和加密技術(shù)保證了區(qū)塊鏈上數(shù)據(jù)的不可篡改性. 區(qū)塊鏈中每個(gè)塊都包含指向前一個(gè)塊的哈希指針, 塊中包含時(shí)間戳和交易數(shù)據(jù). 哈希指針將這些塊鏈接在一起, 使區(qū)塊鏈具有不可篡改的特性. 區(qū)塊鏈具有去中心化的特點(diǎn), 能夠在陌生節(jié)點(diǎn)之間建立點(diǎn)對(duì)點(diǎn)的可信賬本, 形成具有唯一性和不可篡改的區(qū)塊. 因此當(dāng)共享信息存儲(chǔ)在區(qū)塊鏈中時(shí), 可以確保已發(fā)布的醫(yī)療數(shù)據(jù)信息不會(huì)丟失和篡改, 從而節(jié)省了數(shù)據(jù)驗(yàn)證的時(shí)間.
但是區(qū)塊鏈的公開(kāi)透明性也造成了存儲(chǔ)在鏈上隱私信息的泄露. 為保護(hù)醫(yī)療數(shù)據(jù)的隱私性, 許多學(xué)者提出將密碼技術(shù)應(yīng)用到醫(yī)療服務(wù)系統(tǒng)中, 以保障患者的數(shù)據(jù)隱私, 如將秘密共享算法[5]應(yīng)用于醫(yī)療電子病歷的隱私保護(hù)和數(shù)據(jù)共享, 將電子病歷進(jìn)行份額分割和角色分配, 只有得到一定數(shù)量以上的共享份額才能進(jìn)行秘密恢復(fù), 使得醫(yī)療數(shù)據(jù)可以在醫(yī)患之間安全共享. 此外, 為了解決去中心化的問(wèn)題, 已有很多研究用來(lái)實(shí)現(xiàn)基于區(qū)塊鏈的電子病歷管理系統(tǒng), 例如將代理重加密技術(shù)[6]、數(shù)據(jù)脫敏技術(shù)[7]、基于密文策略的屬性加密技術(shù)[8]等結(jié)合區(qū)塊鏈來(lái)實(shí)現(xiàn)電子病歷的隱私保護(hù)和數(shù)據(jù)共享.
群體智能是由大量自主個(gè)體在特定網(wǎng)絡(luò)組織結(jié)構(gòu)下共同努力、為了完成具有挑戰(zhàn)性的計(jì)算任務(wù)而產(chǎn)生的[9]. 眾包作為群體智能的初級(jí)階段, 主要以解決人智密集型任務(wù)為主[10]. 隨著以太坊的高速發(fā)展, 區(qū)塊鏈進(jìn)入2.0 時(shí)代, 為了促進(jìn)眾包平臺(tái)及相關(guān)應(yīng)用的去中心化水平, 各種基于區(qū)塊鏈的眾包系統(tǒng)被相繼提出. 將區(qū)塊鏈和醫(yī)療領(lǐng)域相結(jié)合是目前的研究熱點(diǎn)之一, 而在此基礎(chǔ)上, 結(jié)合群智網(wǎng)絡(luò)的相關(guān)研究還尚未提出. 本文主要將區(qū)塊鏈與群智網(wǎng)絡(luò)相結(jié)合, 研究基于區(qū)塊鏈智能合約的群智醫(yī)療網(wǎng)絡(luò)系統(tǒng)設(shè)計(jì)方案, 使其達(dá)到功能和效用的有效平衡.
眾包是一種通過(guò)公開(kāi)征集解決方案來(lái)解決問(wèn)題的分布式模型, 使互聯(lián)網(wǎng)上的開(kāi)放式協(xié)作成為可能.Zhang 等人[11]提出了一種分布式眾包系統(tǒng), 任務(wù)工人通過(guò)協(xié)同的方式完成任務(wù), 提高了任務(wù)的參與度,同時(shí)提高了整個(gè)系統(tǒng)的工作效率. Cheung 等人[12]提出了一種基于移動(dòng)眾包網(wǎng)絡(luò)的分布式任務(wù)選擇協(xié)議.這些分布式的眾包平臺(tái)只能保證任務(wù)的分發(fā)是分布式進(jìn)行, 任務(wù)的收集仍需由中心系統(tǒng)提供, 并沒(méi)有完全實(shí)現(xiàn)去中心化. Zhang 等人[13]提出的方案在任務(wù)眾包的基礎(chǔ)上通過(guò)應(yīng)用閾值秘密共享技術(shù), 使得只有滿足任務(wù)要求的工作者才能解密任務(wù)內(nèi)容, 能夠驗(yàn)證工作者的能力、抵抗貪婪工作者的攻擊. 該方案在眾包中設(shè)計(jì)缺少動(dòng)態(tài)、可撤銷的任務(wù)分配的更新. Li 等人[14]提出了一個(gè)基于區(qū)塊鏈的去中心化眾包框架, 請(qǐng)求者的任務(wù)可以由一群工人來(lái)解決, 無(wú)需依賴任何第三方可信機(jī)構(gòu), 用戶的隱私可以得到保障. 該方案需要支付一定的交易費(fèi)用, 只適用于有較大獎(jiǎng)勵(lì)的任務(wù). Lu 等人[15]提出了一種基于區(qū)塊鏈的去中心化眾包協(xié)議, 實(shí)現(xiàn)了數(shù)據(jù)與獎(jiǎng)勵(lì)之間的公平交換, 通過(guò)使用零知識(shí)證明技術(shù)證明其正確性. 該方案的缺點(diǎn)是缺少激勵(lì)機(jī)制. Hao 等人[16]提出了一種基于隱私保護(hù)興趣能力的眾包任務(wù)分配方案, 通過(guò)分別在任務(wù)內(nèi)容和任務(wù)標(biāo)簽上使用基于屬性的加密和基于代理加密的可搜索加密, 使眾包服務(wù)器能夠以細(xì)粒度的方式分配任務(wù). 該方案未將工人的聲譽(yù)值和研究模式的隱私性作為任務(wù)分配的參考. 張等人[17]提出了一種基于區(qū)塊鏈的群智網(wǎng)絡(luò)框架, 結(jié)合邊緣計(jì)算并設(shè)計(jì)了三個(gè)智能合約在區(qū)塊鏈上實(shí)現(xiàn)了任務(wù)的發(fā)布和承包, 該方案的缺點(diǎn)是未與實(shí)際應(yīng)用場(chǎng)景相結(jié)合, 缺乏擴(kuò)展性.
在醫(yī)療行業(yè), 患者病歷的訪問(wèn)對(duì)于醫(yī)療診斷至關(guān)重要, 使用區(qū)塊鏈技術(shù)的一個(gè)顯著優(yōu)勢(shì)是它可以改革傳統(tǒng)醫(yī)療數(shù)據(jù)庫(kù)的互操作性. 薛等人[18]提出了一種基于區(qū)塊鏈的醫(yī)療數(shù)據(jù)共享模型, 利用了區(qū)塊鏈、MIFS、AFS 和DDBS 等技術(shù)實(shí)現(xiàn)了醫(yī)療數(shù)據(jù)的訪問(wèn)控制和共享, 但是該方案依然將醫(yī)療數(shù)據(jù)存儲(chǔ)在中心化數(shù)據(jù)庫(kù)中, 沒(méi)有從根本上解決醫(yī)療數(shù)據(jù)存儲(chǔ)中心化的問(wèn)題. Wu 等人[19]引入數(shù)據(jù)脫敏技術(shù), 提出了一種基于區(qū)塊鏈的電子病歷安全共享模型, 但是該模型為了解決交易隱私泄露問(wèn)題, 犧牲了部分?jǐn)?shù)據(jù)的準(zhǔn)確性. Ekblaw 等人[20]提出了一種新型的分散式電子病歷管理系統(tǒng), 該系統(tǒng)首先提出了使用智能合約來(lái)實(shí)現(xiàn)權(quán)限管理的建議.
上述幾種方案存在對(duì)于待加密用戶隱私信息的處理效率低、數(shù)據(jù)準(zhǔn)確性低等問(wèn)題, 并且醫(yī)生和病人之間的關(guān)系是指定的. 賈等人[21]提出了一種改進(jìn)的基于密文策略的屬性加密模型, 提供細(xì)粒度的電子病歷訪問(wèn)控制. 周等人[22]通過(guò)運(yùn)用可信第三方的外包計(jì)算結(jié)合CP-ABE 方案實(shí)現(xiàn)隱私保護(hù)的遠(yuǎn)程醫(yī)療診斷.這兩種方案都設(shè)置了醫(yī)療系統(tǒng)的訪問(wèn)控制策略, 可以有效的對(duì)電子醫(yī)療信息進(jìn)行保密和信息共享, 但是沒(méi)有結(jié)合區(qū)塊鏈的優(yōu)勢(shì)實(shí)現(xiàn)去中心化. 趙等人[23]提出了一種新的雙區(qū)塊鏈模型, 一方面將用戶信息和交易記錄完全分開(kāi), 利用用戶鏈存儲(chǔ)用戶信息、交易鏈存儲(chǔ)交易記錄, 解決患者隱私泄露問(wèn)題, 提高患者數(shù)據(jù)的安全性; 另一方面將交易鏈數(shù)據(jù)單獨(dú)處理, 提高了醫(yī)療數(shù)據(jù)共享性. 但是此方案中采用的代理重加密方法對(duì)密文進(jìn)行加解密, 效率較低. 張等人[24]采用記錄鏈的結(jié)構(gòu)、基于患者ID 建立嚴(yán)格平衡二叉排序樹(shù),提高系統(tǒng)的查詢效率. 該方案使用兩個(gè)分散網(wǎng)絡(luò)分離鏈上信息和地址信息, 使得醫(yī)療記錄文件可以靈活存儲(chǔ). 但是該系統(tǒng)的功能比較單一, 數(shù)據(jù)共享的功能受到了限制. Xiao 等人[25]采用聯(lián)盟鏈的架構(gòu), 通過(guò)使用身份的哈希來(lái)實(shí)現(xiàn)匿名性, 通過(guò)設(shè)置不同用戶的訪問(wèn)權(quán)限對(duì)系統(tǒng)進(jìn)行管理. 但是該方案容易導(dǎo)致單點(diǎn)故障, 從而導(dǎo)致整個(gè)系統(tǒng)崩潰.
綜上所述, 現(xiàn)有的電子醫(yī)療數(shù)據(jù)共享系統(tǒng)面臨的主要問(wèn)題有:
(1) 電子病歷作為醫(yī)療診斷的重要信息, 保障其隱私性是醫(yī)療服務(wù)系統(tǒng)的基本要素. 然而區(qū)塊鏈具有天然透明性, 直接將電子病歷發(fā)布在區(qū)塊鏈上將損害患者的隱私安全, 需要展開(kāi)相關(guān)工作結(jié)合密碼學(xué)方法在區(qū)塊鏈上保護(hù)電子病歷的隱私性.
(2) 針對(duì)傳統(tǒng)醫(yī)療服務(wù)系統(tǒng)患者和醫(yī)生之間無(wú)法靈活互選的弊端, 研究基于區(qū)塊鏈的群智網(wǎng)絡(luò)方法,需要通過(guò)設(shè)計(jì)智能合約實(shí)現(xiàn)群智醫(yī)療系統(tǒng)里醫(yī)生和患者的身份注冊(cè)和任務(wù)的靈活承包.
針對(duì)上述分析結(jié)果, 本文的主要工作和貢獻(xiàn)如下:
(1) 針對(duì)當(dāng)前基于區(qū)塊鏈的電子病歷管理系統(tǒng)醫(yī)生和患者之間只能一一對(duì)應(yīng)不能互相選擇的問(wèn)題, 本文提出了一種基于區(qū)塊鏈的醫(yī)療群智網(wǎng)絡(luò)系統(tǒng), 將設(shè)計(jì)好的智能合約上傳到平臺(tái)上存儲(chǔ), 由患者和醫(yī)生填入自身的信息和任務(wù)信息, 智能合約執(zhí)行相關(guān)的交易, 由此實(shí)現(xiàn)了醫(yī)生病人之間的互選.特別的, 本方案不設(shè)置全局控制合約, 各層控制合約地位相對(duì)獨(dú)立. 降低了模塊之間的耦合性, 從而提高系統(tǒng)的可擴(kuò)展性.
(2) 針對(duì)當(dāng)前基于區(qū)塊鏈的電子病歷管理系統(tǒng)在對(duì)患者的病歷進(jìn)行隱私保護(hù)及存儲(chǔ)時(shí), 病歷意外丟失的情況, 本文將患者的病歷進(jìn)行秘密共享, 借助秘密共享技術(shù)將患者的病歷分割成n個(gè)共享份額,分別由患者自己、患者家屬以及醫(yī)院保存. 當(dāng)醫(yī)生滿足任務(wù)要求并成功承接任務(wù)時(shí), 即可從患者處獲取共享份額, 然后向患者家屬或醫(yī)院申請(qǐng)得到共享份額, 醫(yī)生得到共享份額時(shí)即可重構(gòu)秘密得到病歷信息, 解決了醫(yī)療數(shù)據(jù)的隱私保護(hù)問(wèn)題.
令GFq為q元有限域,D為發(fā)送者,P={P1,P2,··· ,Pn}為n個(gè)參與者組成的集合且q>n,z1,z2,··· ,zn為GFq上n個(gè)兩兩不同的非零公開(kāi)值. 若s ∈GFq為秘密值,r為門限值, 則(r,n)?Shamir 門限秘密分享方案包含以下兩個(gè)階段:
智能合約由密碼學(xué)家Szabo[26]于1997 年首次提出, 它的本質(zhì)是一個(gè)在安全環(huán)境中自動(dòng)執(zhí)行、無(wú)需干預(yù)的數(shù)字合約, 可通過(guò)網(wǎng)絡(luò)對(duì)等方進(jìn)行驗(yàn)證. 區(qū)塊鏈技術(shù)為智能合約提供了去中心化、不可更改和可編程的安全環(huán)境, 促進(jìn)了智能合約的實(shí)現(xiàn). 智能合約的工作流程如圖1 所示, 主要包括三個(gè)步驟. 第一步是智能合約的創(chuàng)建, 智能合約可以由區(qū)塊鏈上的多個(gè)參與方共同創(chuàng)建. 第二步是智能合約的部署, 合約通過(guò)P2P 網(wǎng)絡(luò)分發(fā)至每個(gè)節(jié)點(diǎn), 并駐留在區(qū)塊鏈上的特定地址. 第三步是智能合約的執(zhí)行, 智能合約的執(zhí)行基于“事件觸發(fā)” 機(jī)制, 在滿足特定條件時(shí)自動(dòng)執(zhí)行, 公開(kāi)透明, 不可篡改. 所有的執(zhí)行結(jié)果都被記錄為交易,不可逆且可追溯.
圖1 智能合約工作流程Figure 1 Smart contract work flow
以太坊[27]是一種支持智能合約的區(qū)塊鏈平臺(tái), 它可以在沒(méi)有欺詐、停機(jī)或任何第三方干擾的情況下運(yùn)行智能合約. 以太坊智能合約主要包含8 個(gè)要素, 如圖2 所示, 分別是: 賬戶、日志、交易、燃料、存儲(chǔ)、指令集、消息調(diào)用和代碼庫(kù). 其中, 賬戶主要分為外部賬戶和合約賬戶. 外部賬戶由密鑰控制, 可以通過(guò)部署合約來(lái)創(chuàng)建合約賬戶. 合約賬戶由智能合約的代碼控制, 合約賬戶中包含以太幣的余額以及合約的存儲(chǔ)狀態(tài); 日志的內(nèi)容是交易收據(jù)的一部分, 可以用于智能合約的存儲(chǔ), 并且?guī)椭脩艨蛻舳俗x取智能合約的返回值, 以太坊通過(guò)日志實(shí)現(xiàn)事件(events) 功能; 交易是指由外部參與者簽名后的一段數(shù)據(jù). 它代表了一條信息或者一個(gè)新創(chuàng)建的合約, 交易會(huì)被記錄至區(qū)塊鏈的區(qū)塊中; 燃料是智能合約在部署和執(zhí)行過(guò)程中需要消耗的費(fèi)用, 在以太坊上每執(zhí)行一次交易都需要支付相應(yīng)的燃料費(fèi)用; 智能合約的代碼和接口信息被存放在區(qū)塊的默克爾樹(shù)里, 通過(guò)向以太坊發(fā)送交易可以對(duì)智能合約進(jìn)行調(diào)用; 指令集中包含邏輯、算數(shù)、位和比較等操作, 它被刻意保持在一個(gè)較小的規(guī)模, 從而避免導(dǎo)致共識(shí)錯(cuò)誤的出現(xiàn).
圖2 以太坊智能合約的要素Figure 2 Elements of Ethereum smart contract
本節(jié)將描述基于區(qū)塊鏈的醫(yī)療服務(wù)系統(tǒng)群智網(wǎng)絡(luò)系統(tǒng)模型. 如圖3 所示, 模型中共有三個(gè)參與實(shí)體,分別是患者、醫(yī)生和礦工.
圖3 系統(tǒng)模型Figure 3 System model
步驟1: 首先由平臺(tái)部署USC(user smart contract)用戶智能合約和TSC(task smart contract)任務(wù)智能合約.
步驟2: 在群智網(wǎng)絡(luò)中充當(dāng)任務(wù)請(qǐng)求者的患者將身份信息上傳給平臺(tái).
步驟3: 在群智網(wǎng)絡(luò)中充當(dāng)任務(wù)工人的醫(yī)生將身份信息上傳給平臺(tái).
步驟4: 患者將任務(wù)信息上傳給平臺(tái).
步驟5: USC 和TSC 自動(dòng)執(zhí)行后經(jīng)礦工驗(yàn)證上鏈. 患者和醫(yī)生信息通過(guò)USC 的執(zhí)行被寫入?yún)^(qū)塊鏈不可更改且可驗(yàn)證, 群智任務(wù)通過(guò)TSC 的執(zhí)行被發(fā)布到區(qū)塊鏈上.
步驟6: 醫(yī)生根據(jù)自身的專業(yè)方向、擅長(zhǎng)的醫(yī)療領(lǐng)域、自身的專業(yè)等級(jí)等信息向平臺(tái)上傳任務(wù)承接請(qǐng)求.
步驟7: 平臺(tái)根據(jù)醫(yī)生上傳的任務(wù)承接請(qǐng)求向區(qū)塊鏈上匹配的TSC 發(fā)起交易承接任務(wù).
步驟8: 礦工通過(guò)挖礦生成區(qū)塊并將各類交易寫入?yún)^(qū)塊.
本節(jié)將描述系統(tǒng)中的智能合約用例及關(guān)系相關(guān)構(gòu)造, USC、TSC 的合約構(gòu)造描述如下.
USC-用戶智能合約: (Address 賬戶地址, State 當(dāng)前狀態(tài), Skill 技能, prework 上一次參與任務(wù)的地址,T信譽(yù)值, Major 專業(yè), Level 等級(jí)). 一個(gè)Usc 只對(duì)應(yīng)唯一的賬戶地址. 當(dāng)前狀態(tài)指示用戶當(dāng)前是否在進(jìn)行任務(wù). prework 記錄用戶上一次參與任務(wù)的地址形成用戶歷史任務(wù)的集合. 信譽(yù)值是系統(tǒng)中用戶可信度的評(píng)判標(biāo)準(zhǔn), 通過(guò)完成任務(wù)可以獲取信譽(yù)值, 但是如果任務(wù)失敗也會(huì)相應(yīng)的扣除信譽(yù)值作為懲罰. 專業(yè)、等級(jí)和技能是醫(yī)生作為系統(tǒng)中用戶的評(píng)判指標(biāo), 用來(lái)和Tsc 中的任務(wù)要求相匹配, 患者在注冊(cè)Usc 時(shí)可以不用填寫這些部分.
TSC-任務(wù)智能合約: (Usc 患者身份合約地址, State 任務(wù)狀態(tài), Skill 任務(wù)技能要求, Setdoctor[] 醫(yī)生地址集合, Setprework[] 醫(yī)生上一次任務(wù)地址,T醫(yī)生信譽(yù)值要求,M任務(wù)報(bào)酬, Evafun() 任務(wù)評(píng)估函數(shù), Time1 結(jié)果提交截止時(shí)間, Time2 任務(wù)截止時(shí)間, Addr 數(shù)據(jù)存儲(chǔ)地址, TaskMajor 任務(wù)所需專業(yè),TaskLevel 任務(wù)所需等級(jí)). Tsc 中存儲(chǔ)了該合約信息上傳者的Usc 地址. 任務(wù)狀態(tài)指示當(dāng)前任務(wù)的承接及完成進(jìn)度. 醫(yī)生地址集合中存儲(chǔ)承接該任務(wù)的醫(yī)生的Usc 的地址. 醫(yī)生上一次任務(wù)地址與Usc 中的prework 相對(duì)應(yīng), 記錄醫(yī)生的歷史任務(wù). 任務(wù)評(píng)估函數(shù)由提交任務(wù)信息的患者設(shè)定, 礦工使用患者提供的評(píng)估函數(shù)在不透露各項(xiàng)具體數(shù)據(jù)的條件下對(duì)結(jié)果進(jìn)行計(jì)算評(píng)估[14]. 醫(yī)生信譽(yù)值要求、任務(wù)所需專業(yè)、任務(wù)所需等級(jí)與Usc 中的用戶信譽(yù)值、用戶專業(yè)、用戶等級(jí)一一對(duì)應(yīng).
圖4 智能合約構(gòu)造Figure 4 Construction of smart contracts
本節(jié)主要描述整個(gè)系統(tǒng)的業(yè)務(wù)流程, 第一部分描述系統(tǒng)業(yè)務(wù)時(shí)序流程, 第二部分描述線下數(shù)據(jù)傳輸?shù)牧鞒?
4.3.1 線上業(yè)務(wù)流程
首先由平臺(tái)調(diào)用信息注冊(cè)算法Register() 部署USC 參與者智能合約和TSC 任務(wù)智能合約, 合約部署完成后進(jìn)入系統(tǒng)流程, 本系統(tǒng)的完整時(shí)序流程如圖5 所示.
圖5 系統(tǒng)業(yè)務(wù)時(shí)序Figure 5 Sequence of system business
(1) 步驟1–3, 患者將身份信息上傳給平臺(tái), 平臺(tái)上已部署完成的USC 參與者智能合約自動(dòng)執(zhí)行, 由礦工驗(yàn)證上鏈.
(2) 步驟4–6, 患者將任務(wù)信息上傳給平臺(tái), 平臺(tái)上已部署完成的TSC 任務(wù)智能合約自動(dòng)執(zhí)行, 由礦工驗(yàn)證上鏈.
(3) 步驟7–9, 醫(yī)生身份信息上傳給平臺(tái), 平臺(tái)上已部署完成的USC 身份智能合約自動(dòng)執(zhí)行, 由礦工驗(yàn)證上鏈.
(4) 步驟10–11, 醫(yī)生向平臺(tái)發(fā)起承接任務(wù)請(qǐng)求, 平臺(tái)遍歷區(qū)塊鏈發(fā)現(xiàn)在線群智任務(wù), TSC 自動(dòng)執(zhí)行承接任務(wù)算法Getwork(), 通過(guò)USC 中醫(yī)生的技能、信譽(yù)等相關(guān)信息與TSC 中任務(wù)相關(guān)信息的比較與匹配, 檢驗(yàn)是否醫(yī)生的相關(guān)信息符合任務(wù)要求, 如果符合任務(wù)要求, 則增加醫(yī)生的USC 地址到TSC 合約醫(yī)生集合中, 任務(wù)承接完成.
(5) 步驟12–16, 醫(yī)生經(jīng)平臺(tái)上傳診斷結(jié)果, 表示醫(yī)生工作完成, 等待礦工驗(yàn)證醫(yī)生成果, 礦工根據(jù)TSC 中的任務(wù)數(shù)據(jù)驗(yàn)證方法對(duì)數(shù)據(jù)進(jìn)行評(píng)估, 評(píng)估完成后上傳驗(yàn)證結(jié)果.
(6) 步驟17–19, 當(dāng)所有任務(wù)均完成或者到達(dá)最后截止時(shí)間, 由患者結(jié)算醫(yī)生報(bào)酬并上傳給平臺(tái), 平臺(tái)上的TSC 合約自動(dòng)執(zhí)行支付醫(yī)生報(bào)酬.
(7) 步驟20–22, 群智任務(wù)流程結(jié)束后患者通過(guò)平臺(tái)設(shè)置TSC 中任務(wù)狀態(tài)變量為關(guān)閉狀態(tài).
4.3.2 線下數(shù)據(jù)傳輸流程
為了保證電子病歷的隱私安全, 在線下進(jìn)行數(shù)據(jù)傳輸時(shí), 需要對(duì)電子病歷進(jìn)行哈希簽名和秘密共享等操作, 線下數(shù)據(jù)傳輸?shù)牧鞒倘缦?
(1) 患者的電子病歷數(shù)據(jù)MedRecorign.
(2) 患者對(duì)病歷數(shù)據(jù)的哈希值進(jìn)行簽名, 將簽名與電子病歷原始數(shù)據(jù)作為秘密共享的原始數(shù)據(jù)MedRecsecret:
(3) 患者對(duì)MedRecsecret進(jìn)行秘密共享, 分割成n個(gè)共享份額, 分別分發(fā)給醫(yī)院、患者家屬等個(gè)體進(jìn)行保存, 醫(yī)生成功承接任務(wù)后則向各方申請(qǐng)共享份額, 達(dá)到r個(gè)共享份額后恢復(fù)出MedRecsecret,對(duì)患者的電子病歷進(jìn)行診斷.
(4) 醫(yī)生完成診斷后得到診斷結(jié)果MedRecresult, 對(duì)診斷結(jié)果哈希值進(jìn)行簽名, 用患者公鑰進(jìn)行加密,得到待驗(yàn)證數(shù)據(jù)Dataverify, 發(fā)送至平臺(tái):
(5) 患者收到任務(wù)數(shù)據(jù)后, 礦工即可使用患者提供的驗(yàn)證函數(shù)進(jìn)行驗(yàn)證, 將上面兩個(gè)簽名簡(jiǎn)寫為Sign1、Sign2. 得到驗(yàn)證結(jié)果:
4.3.3 主要算法
算法1: 信息注冊(cè)算法. 本系統(tǒng)通過(guò)部署智能合約實(shí)現(xiàn)群智網(wǎng)絡(luò)中參與者的身份注冊(cè)和群智任務(wù)注冊(cè).首先由平臺(tái)部署合約交易, 醫(yī)生和患者分別向平臺(tái)上傳自身信息和任務(wù)信息, 然后平臺(tái)上的智能合約自動(dòng)執(zhí)行通過(guò)輸入的用戶信息和任務(wù)信息更新Usc 和Tsc. 信息注冊(cè)算法的流程如算法1 所示.
算法1 Register()Input: Usc_info, Tsc_info, ui, NeedNum Output: Usc, Tsc 1 for i < NeedNum do 5 2deployed Usc;3Usc →set_info(Usc_info);4if !Register (ui) then ui has not been registered;6end 7deployed Tsc;8Tsc →set_info(Tsc_info);9Tsc →init(Tsc_info);10 end 11 return Usc, Tsc;
算法2: 醫(yī)生承接任務(wù)算法. 醫(yī)生向平臺(tái)上傳承接任務(wù)請(qǐng)求, 平臺(tái)在區(qū)塊鏈上對(duì)合適的任務(wù)Tsc 發(fā)起承接任務(wù)交易. 如算法2 所示, 依次檢查醫(yī)生的專業(yè)、信譽(yù)值和等級(jí)是否符合任務(wù)要求. 如果達(dá)到要求, 則將醫(yī)生地址寫入任務(wù)合約的醫(yī)生地址集合中, 完成醫(yī)生承接任務(wù)流程.
算法2 Getwork()Input: Usc, Tsc, ui, User Trust, User Skill, NeedNum Output: Tsc 1 Mi < ?M/i;2 deployed Usc;3 Register (ui);4 if !Register (ui) then 5ui has not been registered;6 end 7 if !Check_require (Usc_major,Usc_Trust,Usc_level) then 8ui does not satisfy the condition;9 end 10 if i > NeedNum then 11Task T cannot be accepted anymore;12 end 13 Tsc.Setdoctor[i]=Usc.addr;14 Tsc.Setcount++;15 Tsc.Setprework[i]=Usc.prework;16 return Tsc;
算法3: 任務(wù)評(píng)估與結(jié)算算法. 如算法3 所示, 醫(yī)生將診斷結(jié)果上傳至指定地址, 并將當(dāng)前任務(wù)完成的時(shí)間上傳給平臺(tái)并寫入Tsc 合約. 當(dāng)任務(wù)時(shí)間截止或所有任務(wù)均完成時(shí), Tsc 合約自動(dòng)執(zhí)行支付算法結(jié)算醫(yī)生報(bào)酬并更新Tsc 合約內(nèi)容.
算法3 Task_Settle()Input: Usc, Tsc, ui, reward M, NeedNum, Time2 Output: Tsc 1 for i < NeedNum do 6 Tsc →require_verify(Usc);2Mi < ?M/i;3deployed Usc;4Register (ui);5if upload_byUsc(Usc) then 7 Tsc →upload_result(Usc, res);8 if t > Time2||check_complete() then Tsc →payment();10end 11end 12 end 13 return Tsc;9
算法4: 報(bào)酬支付算法. 若任務(wù)超出任務(wù)截止時(shí)間Time2, 但是還沒(méi)有足夠的醫(yī)生承接并完成任務(wù), 則任務(wù)失敗, 患者需要向已承接該任務(wù)的醫(yī)生的賬戶發(fā)送信譽(yù)值和金幣作為補(bǔ)償. 若承接任務(wù)的醫(yī)生提交的任務(wù)結(jié)果評(píng)估低于患者所需的結(jié)果或者沒(méi)有在規(guī)定的最后期限Time1 之前提交結(jié)果, 則會(huì)在醫(yī)生的賬戶中扣除信譽(yù)值和金幣作為懲罰. 如果醫(yī)生在最后期限Time1 之前上傳了合格的結(jié)果, 則會(huì)得到轉(zhuǎn)賬以及信譽(yù)值和金幣的獎(jiǎng)勵(lì). 報(bào)酬支付過(guò)程結(jié)束后Tsc 合約的狀態(tài)為關(guān)閉.
算法4 Payment_Task()Input: Usc, Tsc, ui, ListNum, reward_trust, reward_coin, Time1, Time2, requireResult Output: Tsc 1 for i < ListNum do 3 Task failed;2if t > Time2 then Usc.payment(Tsc, reward_trust, reward_coin);5end 6if (realResult < requireResult)||(t > Time1) then 4 7 ui failed the task;Usc.payment(Tsc, ?reward_trust, ?reward_coin);9end 10if (realResult >= requireResult)&&(t <= Time1) then 8 11Usc.payment(Tsc, reward_trust, reward_coin);12end 13close Tsc;14 end
本節(jié)對(duì)于系統(tǒng)可能面臨的安全風(fēng)險(xiǎn)如: 節(jié)點(diǎn)失效故障、虛假報(bào)告攻擊、DDoS 攻擊、惡意評(píng)判攻擊等進(jìn)行分析.
(1) 節(jié)點(diǎn)失效故障: 在基于區(qū)塊鏈的去中心化架構(gòu)中, 無(wú)明顯單點(diǎn)故障. 本文提出的基于區(qū)塊鏈的群智網(wǎng)絡(luò)系統(tǒng)無(wú)可信第三方參與, 是去中心化的. 在區(qū)塊鏈中, 參與者均為平等的實(shí)體節(jié)點(diǎn), 每個(gè)節(jié)點(diǎn)都保存了區(qū)塊鏈中全部的交易信息, 如果有部分節(jié)點(diǎn)遭遇故障無(wú)法提供服務(wù), 則不會(huì)影響整個(gè)系統(tǒng)的運(yùn)行.
(2) 虛假報(bào)告攻擊: 本系統(tǒng)通過(guò)自動(dòng)執(zhí)行預(yù)定義的智能合約來(lái)評(píng)估解決方案. 智能合約的執(zhí)行是公開(kāi)透明的, 在大多數(shù)礦工都是誠(chéng)實(shí)的假設(shè)下, 惡意請(qǐng)求者不能通過(guò)篡改智能合約的結(jié)果來(lái)發(fā)起虛假報(bào)告攻擊. 此外, 惡意請(qǐng)求者創(chuàng)建對(duì)他們有利的分叉鏈的可能性是有限的.
(3) DDos 攻擊: 本系統(tǒng)通過(guò)智能合約的自動(dòng)執(zhí)行來(lái)實(shí)現(xiàn)所有的業(yè)務(wù)流程, 通過(guò)信譽(yù)值對(duì)參與者進(jìn)行評(píng)估, 參與者完成任務(wù)后獲取信譽(yù)值, 通過(guò)提高用戶合約中的信譽(yù)值指標(biāo)來(lái)與更高信譽(yù)值要求的任務(wù)合約相匹配, 相應(yīng)的獲取更高的報(bào)酬. 參與者只能通過(guò)注冊(cè)賬號(hào)來(lái)獲取系統(tǒng)中的合法身份,想要發(fā)起DDos 攻擊的惡意參與者需要注冊(cè)大量的Usc 合約, 同時(shí)通過(guò)承接并完成系統(tǒng)中的任務(wù)來(lái)獲得信譽(yù)值, 如果只承接任務(wù), 沒(méi)有在規(guī)定的時(shí)間內(nèi)完成任務(wù)也會(huì)扣除相應(yīng)的信譽(yù)值, 每個(gè)賬號(hào)產(chǎn)生的交易費(fèi)用也比較高, 所以對(duì)于惡意參與者來(lái)說(shuō), 獲得大量信譽(yù)值較高的賬號(hào)是困難的, 發(fā)起DDos 攻擊的代價(jià)是巨大的.
(4) 參與者匿名: 為保護(hù)用戶隱私, 本系統(tǒng)允許用戶進(jìn)行匿名注冊(cè). 在系統(tǒng)中, 信譽(yù)值是參與者唯一的信任評(píng)判標(biāo)準(zhǔn), 匿名用戶的信譽(yù)值可以作為其身份合約的標(biāo)識(shí), 只要是正常注冊(cè), 并且擁有較高的信譽(yù)值的用戶都可以正常承接任務(wù), 對(duì)于信譽(yù)值較低的匿名用戶也可以通過(guò)完成信譽(yù)值等級(jí)較低任務(wù)來(lái)積累信譽(yù)值. 參與者匿名不會(huì)對(duì)系統(tǒng)的運(yùn)行產(chǎn)生影響.
(5) 惡意評(píng)判: 患者可能會(huì)為了減少對(duì)醫(yī)生報(bào)酬的支付而惡意評(píng)判醫(yī)生的診斷結(jié)果, 本系統(tǒng)設(shè)定由患者提供結(jié)果的驗(yàn)證函數(shù), 礦工或其他驗(yàn)證者可以在不知道數(shù)據(jù)的情況下驗(yàn)證結(jié)果. 任務(wù)完成時(shí),礦工或其他驗(yàn)證者評(píng)價(jià)醫(yī)生的診斷結(jié)果, 避免了患者的單方面惡意評(píng)判. 如果患者惡意評(píng)判醫(yī)生的診斷結(jié)果, 則以扣除患者的信譽(yù)值作為懲罰.
(6) 超時(shí)或拒絕支付: 本系統(tǒng)通過(guò)統(tǒng)計(jì)區(qū)塊誕生的數(shù)量進(jìn)行計(jì)時(shí), 患者必須按時(shí)向完成任務(wù)的醫(yī)生支付報(bào)酬, 否則將補(bǔ)償信譽(yù)值給醫(yī)生. 如果超時(shí)未提交任務(wù)結(jié)果, 會(huì)對(duì)承接任務(wù)的醫(yī)生扣除信譽(yù)值和金幣作為懲罰. 系統(tǒng)中醫(yī)生或患者的超時(shí)或拒絕支付都會(huì)引發(fā)Tsc 合約中的報(bào)酬支付算法, 算法自動(dòng)執(zhí)行后從相應(yīng)的賬戶中扣除信譽(yù)值和金幣. 信譽(yù)值和金幣低于一定額度以后, 用戶將無(wú)法在系統(tǒng)中正常承接和發(fā)布任務(wù).
本文基于Win 10 操作系統(tǒng)和8.00 GB RAM、Inter(R) Core(TM) i5-6200 CPU @2.40 GHZ 環(huán)境進(jìn)行了鏈上模擬仿真, 對(duì)兩個(gè)智能合約分別進(jìn)行了部署和測(cè)試. 采用瀏覽器版本的以太坊集成編譯器Remix-Ethereum IDE 作為開(kāi)發(fā)平臺(tái), 使用Solidity 開(kāi)發(fā)語(yǔ)言(0.5.16) 編寫智能合約, 采用MetaMask 作為輕量級(jí)錢包客戶端和以太坊官方提供的測(cè)試網(wǎng)絡(luò), Ropsten 作為測(cè)試環(huán)境.
本文分別測(cè)試了參與者智能合約USC 和任務(wù)智能合約TSC 在公共測(cè)試網(wǎng)絡(luò)Ropsten 中部署的Gas消耗, 并對(duì)合約中各主要函數(shù)的Gas 消耗進(jìn)行了統(tǒng)計(jì). 如圖6、圖7 所示, USC、TSC 這兩種智能合約部署的Gas 消耗分別為713 788、2434 529. 在TSC 合約中消耗的Gas 最多的函數(shù)為paymentTask, 消耗Gas 值為205 586. 表1 和表2 分別展示了USC 和TSC 兩種智能合約的部署以及各功能函數(shù)Gas 對(duì)應(yīng)的Ether 和USD 成本. 如圖8 所示, 在Ropsten 網(wǎng)絡(luò)中, 隨著參與者的不斷增加, TSC 合約初始化所需的Gas 消耗不斷增加, TSC 合約初始化函數(shù)initTSC 消耗的Gas 值與參與人數(shù)呈正相關(guān)關(guān)系, 當(dāng)參與的醫(yī)生人數(shù)為10 人時(shí), 需要消耗Gas 數(shù)量達(dá)到330 886; 當(dāng)參與的醫(yī)生人數(shù)為50 人時(shí), 需要消耗Gas 數(shù)量達(dá)到953 008. 實(shí)驗(yàn)結(jié)果表明了系統(tǒng)的實(shí)用性.
表1 合約部署的開(kāi)銷Table 1 Cost of deploying contracts
表2 功能函數(shù)的開(kāi)銷Table 2 Cost of functions
圖6 智能合約部署在Ropsten 網(wǎng)絡(luò)中的Gas 消耗Figure 6 Smart contracts deployed on Ropsten network
圖7 業(yè)務(wù)各階段主要函數(shù)的Gas 消耗Figure 7 Cost of main functions in each stage
圖8 Tsc 合約初始化在Ropsten 網(wǎng)絡(luò)中的Gas 消耗Figure 8 Cost of Tsc_init deployed on Ropsten network
傳統(tǒng)的電子病歷一般存儲(chǔ)在醫(yī)療部門的中心化數(shù)據(jù)庫(kù)或者文件庫(kù)中, 數(shù)據(jù)存儲(chǔ)和管理并不完全透明,患者的隱私數(shù)據(jù)存在被泄露, 甚至被篡改的風(fēng)險(xiǎn). 醫(yī)生和患者之間往往是預(yù)先指定的關(guān)系, 缺乏靈活性.本文利用區(qū)塊鏈和群智網(wǎng)絡(luò)提出了一種基于區(qū)塊鏈的醫(yī)療服務(wù)群智網(wǎng)絡(luò)系統(tǒng), 設(shè)計(jì)智能合約來(lái)實(shí)現(xiàn)傳統(tǒng)繁瑣的業(yè)務(wù)流程, 通過(guò)在區(qū)塊鏈上發(fā)布和承包群智任務(wù)來(lái)實(shí)現(xiàn)醫(yī)生和患者之間的靈活互選. 利用Shamir 秘密共享技術(shù)對(duì)患者的病歷進(jìn)行秘密分割, 成功承包任務(wù)的醫(yī)生獲取相應(yīng)的份額進(jìn)行秘密重構(gòu)得到患者的病歷進(jìn)行醫(yī)療診斷, 以此來(lái)保護(hù)電子病歷的隱私. 在未來(lái)的工作中, 我們將在隱私保護(hù)的基礎(chǔ)上, 聚焦基于群智網(wǎng)絡(luò)中任務(wù)的分發(fā)與匹配問(wèn)題, 對(duì)基于區(qū)塊鏈的醫(yī)療服務(wù)群智網(wǎng)絡(luò)系統(tǒng)的落地應(yīng)用做出進(jìn)一步的探索與研究.