基于区块链的医疗服务群智网络系统*
2022-07-13张丽娜
钟 楠, 杨 波, 张丽娜,2
1. 陕西师范大学计算机科学学院, 西安 710119
2. 西安科技大学计算机科学与技术学院, 西安 710600
1 引言
随着信息技术的快速发展, 电子信息技术在日常生活中的应用越来越广泛, 极大地方便了人们的生活.在医疗系统中使用的电子病历, 相对于传统纸质病历而言, 具有存储和操作简单、易于数据共享等特点, 被越来越多的医疗机构采用[1]. 病历和相关医疗信息十分重要和敏感, 还需要在医疗系统的参与者之间频繁共享. 但是在这些数据的存储和共享过程中仍存在很多问题. 根据2013 年的一份报告[2], 医疗过失中最常见的后果是患者死亡. 医疗诉讼案例中的原告通常是已故患者的家属[3], 医疗诉讼往往会由于患者家属对于已故患者的病历内容不知情而无法顺利进行. 医疗数据作为患者诊断和治疗过程的数字证据非常重要. 在医疗事故的诉讼案件中, 医疗数据可作为举证信息, 但这些数字证据极易被删除或者篡改. 此外, 发布和存储电子病历的第三方平台容易受到内部或外部攻击, 从而暴露患者的隐私. 这些由医疗信息存储中心化所引发的问题严重阻碍了医疗数据的共享.
区块链[4]是由P2P 网络维护的分布式、不可修改的公共数字分类账本. 共识机制和加密技术保证了区块链上数据的不可篡改性. 区块链中每个块都包含指向前一个块的哈希指针, 块中包含时间戳和交易数据. 哈希指针将这些块链接在一起, 使区块链具有不可篡改的特性. 区块链具有去中心化的特点, 能够在陌生节点之间建立点对点的可信账本, 形成具有唯一性和不可篡改的区块. 因此当共享信息存储在区块链中时, 可以确保已发布的医疗数据信息不会丢失和篡改, 从而节省了数据验证的时间.
但是区块链的公开透明性也造成了存储在链上隐私信息的泄露. 为保护医疗数据的隐私性, 许多学者提出将密码技术应用到医疗服务系统中, 以保障患者的数据隐私, 如将秘密共享算法[5]应用于医疗电子病历的隐私保护和数据共享, 将电子病历进行份额分割和角色分配, 只有得到一定数量以上的共享份额才能进行秘密恢复, 使得医疗数据可以在医患之间安全共享. 此外, 为了解决去中心化的问题, 已有很多研究用来实现基于区块链的电子病历管理系统, 例如将代理重加密技术[6]、数据脱敏技术[7]、基于密文策略的属性加密技术[8]等结合区块链来实现电子病历的隐私保护和数据共享.
群体智能是由大量自主个体在特定网络组织结构下共同努力、为了完成具有挑战性的计算任务而产生的[9]. 众包作为群体智能的初级阶段, 主要以解决人智密集型任务为主[10]. 随着以太坊的高速发展, 区块链进入2.0 时代, 为了促进众包平台及相关应用的去中心化水平, 各种基于区块链的众包系统被相继提出. 将区块链和医疗领域相结合是目前的研究热点之一, 而在此基础上, 结合群智网络的相关研究还尚未提出. 本文主要将区块链与群智网络相结合, 研究基于区块链智能合约的群智医疗网络系统设计方案, 使其达到功能和效用的有效平衡.
2 相关工作
众包是一种通过公开征集解决方案来解决问题的分布式模型, 使互联网上的开放式协作成为可能.Zhang 等人[11]提出了一种分布式众包系统, 任务工人通过协同的方式完成任务, 提高了任务的参与度,同时提高了整个系统的工作效率. Cheung 等人[12]提出了一种基于移动众包网络的分布式任务选择协议.这些分布式的众包平台只能保证任务的分发是分布式进行, 任务的收集仍需由中心系统提供, 并没有完全实现去中心化. Zhang 等人[13]提出的方案在任务众包的基础上通过应用阈值秘密共享技术, 使得只有满足任务要求的工作者才能解密任务内容, 能够验证工作者的能力、抵抗贪婪工作者的攻击. 该方案在众包中设计缺少动态、可撤销的任务分配的更新. Li 等人[14]提出了一个基于区块链的去中心化众包框架, 请求者的任务可以由一群工人来解决, 无需依赖任何第三方可信机构, 用户的隐私可以得到保障. 该方案需要支付一定的交易费用, 只适用于有较大奖励的任务. Lu 等人[15]提出了一种基于区块链的去中心化众包协议, 实现了数据与奖励之间的公平交换, 通过使用零知识证明技术证明其正确性. 该方案的缺点是缺少激励机制. Hao 等人[16]提出了一种基于隐私保护兴趣能力的众包任务分配方案, 通过分别在任务内容和任务标签上使用基于属性的加密和基于代理加密的可搜索加密, 使众包服务器能够以细粒度的方式分配任务. 该方案未将工人的声誉值和研究模式的隐私性作为任务分配的参考. 张等人[17]提出了一种基于区块链的群智网络框架, 结合边缘计算并设计了三个智能合约在区块链上实现了任务的发布和承包, 该方案的缺点是未与实际应用场景相结合, 缺乏扩展性.
在医疗行业, 患者病历的访问对于医疗诊断至关重要, 使用区块链技术的一个显著优势是它可以改革传统医疗数据库的互操作性. 薛等人[18]提出了一种基于区块链的医疗数据共享模型, 利用了区块链、MIFS、AFS 和DDBS 等技术实现了医疗数据的访问控制和共享, 但是该方案依然将医疗数据存储在中心化数据库中, 没有从根本上解决医疗数据存储中心化的问题. Wu 等人[19]引入数据脱敏技术, 提出了一种基于区块链的电子病历安全共享模型, 但是该模型为了解决交易隐私泄露问题, 牺牲了部分数据的准确性. Ekblaw 等人[20]提出了一种新型的分散式电子病历管理系统, 该系统首先提出了使用智能合约来实现权限管理的建议.
上述几种方案存在对于待加密用户隐私信息的处理效率低、数据准确性低等问题, 并且医生和病人之间的关系是指定的. 贾等人[21]提出了一种改进的基于密文策略的属性加密模型, 提供细粒度的电子病历访问控制. 周等人[22]通过运用可信第三方的外包计算结合CP-ABE 方案实现隐私保护的远程医疗诊断.这两种方案都设置了医疗系统的访问控制策略, 可以有效的对电子医疗信息进行保密和信息共享, 但是没有结合区块链的优势实现去中心化. 赵等人[23]提出了一种新的双区块链模型, 一方面将用户信息和交易记录完全分开, 利用用户链存储用户信息、交易链存储交易记录, 解决患者隐私泄露问题, 提高患者数据的安全性; 另一方面将交易链数据单独处理, 提高了医疗数据共享性. 但是此方案中采用的代理重加密方法对密文进行加解密, 效率较低. 张等人[24]采用记录链的结构、基于患者ID 建立严格平衡二叉排序树,提高系统的查询效率. 该方案使用两个分散网络分离链上信息和地址信息, 使得医疗记录文件可以灵活存储. 但是该系统的功能比较单一, 数据共享的功能受到了限制. Xiao 等人[25]采用联盟链的架构, 通过使用身份的哈希来实现匿名性, 通过设置不同用户的访问权限对系统进行管理. 但是该方案容易导致单点故障, 从而导致整个系统崩溃.
综上所述, 现有的电子医疗数据共享系统面临的主要问题有:
(1) 电子病历作为医疗诊断的重要信息, 保障其隐私性是医疗服务系统的基本要素. 然而区块链具有天然透明性, 直接将电子病历发布在区块链上将损害患者的隐私安全, 需要展开相关工作结合密码学方法在区块链上保护电子病历的隐私性.
(2) 针对传统医疗服务系统患者和医生之间无法灵活互选的弊端, 研究基于区块链的群智网络方法,需要通过设计智能合约实现群智医疗系统里医生和患者的身份注册和任务的灵活承包.
针对上述分析结果, 本文的主要工作和贡献如下:
(1) 针对当前基于区块链的电子病历管理系统医生和患者之间只能一一对应不能互相选择的问题, 本文提出了一种基于区块链的医疗群智网络系统, 将设计好的智能合约上传到平台上存储, 由患者和医生填入自身的信息和任务信息, 智能合约执行相关的交易, 由此实现了医生病人之间的互选.特别的, 本方案不设置全局控制合约, 各层控制合约地位相对独立. 降低了模块之间的耦合性, 从而提高系统的可扩展性.
(2) 针对当前基于区块链的电子病历管理系统在对患者的病历进行隐私保护及存储时, 病历意外丢失的情况, 本文将患者的病历进行秘密共享, 借助秘密共享技术将患者的病历分割成n个共享份额,分别由患者自己、患者家属以及医院保存. 当医生满足任务要求并成功承接任务时, 即可从患者处获取共享份额, 然后向患者家属或医院申请得到共享份额, 医生得到共享份额时即可重构秘密得到病历信息, 解决了医疗数据的隐私保护问题.
3 预备知识
3.1 Shamir 门限秘密分享方案
令GFq为q元有限域,D为发送者,P={P1,P2,··· ,Pn}为n个参与者组成的集合且q>n,z1,z2,··· ,zn为GFq上n个两两不同的非零公开值. 若s ∈GFq为秘密值,r为门限值, 则(r,n)−Shamir 门限秘密分享方案包含以下两个阶段:
3.2 智能合约
智能合约由密码学家Szabo[26]于1997 年首次提出, 它的本质是一个在安全环境中自动执行、无需干预的数字合约, 可通过网络对等方进行验证. 区块链技术为智能合约提供了去中心化、不可更改和可编程的安全环境, 促进了智能合约的实现. 智能合约的工作流程如图1 所示, 主要包括三个步骤. 第一步是智能合约的创建, 智能合约可以由区块链上的多个参与方共同创建. 第二步是智能合约的部署, 合约通过P2P 网络分发至每个节点, 并驻留在区块链上的特定地址. 第三步是智能合约的执行, 智能合约的执行基于“事件触发” 机制, 在满足特定条件时自动执行, 公开透明, 不可篡改. 所有的执行结果都被记录为交易,不可逆且可追溯.
图1 智能合约工作流程Figure 1 Smart contract work flow
以太坊[27]是一种支持智能合约的区块链平台, 它可以在没有欺诈、停机或任何第三方干扰的情况下运行智能合约. 以太坊智能合约主要包含8 个要素, 如图2 所示, 分别是: 账户、日志、交易、燃料、存储、指令集、消息调用和代码库. 其中, 账户主要分为外部账户和合约账户. 外部账户由密钥控制, 可以通过部署合约来创建合约账户. 合约账户由智能合约的代码控制, 合约账户中包含以太币的余额以及合约的存储状态; 日志的内容是交易收据的一部分, 可以用于智能合约的存储, 并且帮助用户客户端读取智能合约的返回值, 以太坊通过日志实现事件(events) 功能; 交易是指由外部参与者签名后的一段数据. 它代表了一条信息或者一个新创建的合约, 交易会被记录至区块链的区块中; 燃料是智能合约在部署和执行过程中需要消耗的费用, 在以太坊上每执行一次交易都需要支付相应的燃料费用; 智能合约的代码和接口信息被存放在区块的默克尔树里, 通过向以太坊发送交易可以对智能合约进行调用; 指令集中包含逻辑、算数、位和比较等操作, 它被刻意保持在一个较小的规模, 从而避免导致共识错误的出现.
图2 以太坊智能合约的要素Figure 2 Elements of Ethereum smart contract
4 方案构造
4.1 系统构造
本节将描述基于区块链的医疗服务系统群智网络系统模型. 如图3 所示, 模型中共有三个参与实体,分别是患者、医生和矿工.
图3 系统模型Figure 3 System model
步骤1: 首先由平台部署USC(user smart contract)用户智能合约和TSC(task smart contract)任务智能合约.
步骤2: 在群智网络中充当任务请求者的患者将身份信息上传给平台.
步骤3: 在群智网络中充当任务工人的医生将身份信息上传给平台.
步骤4: 患者将任务信息上传给平台.
步骤5: USC 和TSC 自动执行后经矿工验证上链. 患者和医生信息通过USC 的执行被写入区块链不可更改且可验证, 群智任务通过TSC 的执行被发布到区块链上.
步骤6: 医生根据自身的专业方向、擅长的医疗领域、自身的专业等级等信息向平台上传任务承接请求.
步骤7: 平台根据医生上传的任务承接请求向区块链上匹配的TSC 发起交易承接任务.
步骤8: 矿工通过挖矿生成区块并将各类交易写入区块.
4.2 智能合约构造
本节将描述系统中的智能合约用例及关系相关构造, USC、TSC 的合约构造描述如下.
USC-用户智能合约: (Address 账户地址, State 当前状态, Skill 技能, prework 上一次参与任务的地址,T信誉值, Major 专业, Level 等级). 一个Usc 只对应唯一的账户地址. 当前状态指示用户当前是否在进行任务. prework 记录用户上一次参与任务的地址形成用户历史任务的集合. 信誉值是系统中用户可信度的评判标准, 通过完成任务可以获取信誉值, 但是如果任务失败也会相应的扣除信誉值作为惩罚. 专业、等级和技能是医生作为系统中用户的评判指标, 用来和Tsc 中的任务要求相匹配, 患者在注册Usc 时可以不用填写这些部分.
TSC-任务智能合约: (Usc 患者身份合约地址, State 任务状态, Skill 任务技能要求, Setdoctor[] 医生地址集合, Setprework[] 医生上一次任务地址,T医生信誉值要求,M任务报酬, Evafun() 任务评估函数, Time1 结果提交截止时间, Time2 任务截止时间, Addr 数据存储地址, TaskMajor 任务所需专业,TaskLevel 任务所需等级). Tsc 中存储了该合约信息上传者的Usc 地址. 任务状态指示当前任务的承接及完成进度. 医生地址集合中存储承接该任务的医生的Usc 的地址. 医生上一次任务地址与Usc 中的prework 相对应, 记录医生的历史任务. 任务评估函数由提交任务信息的患者设定, 矿工使用患者提供的评估函数在不透露各项具体数据的条件下对结果进行计算评估[14]. 医生信誉值要求、任务所需专业、任务所需等级与Usc 中的用户信誉值、用户专业、用户等级一一对应.
图4 智能合约构造Figure 4 Construction of smart contracts
4.3 系统流程
本节主要描述整个系统的业务流程, 第一部分描述系统业务时序流程, 第二部分描述线下数据传输的流程.
4.3.1 线上业务流程
首先由平台调用信息注册算法Register() 部署USC 参与者智能合约和TSC 任务智能合约, 合约部署完成后进入系统流程, 本系统的完整时序流程如图5 所示.
图5 系统业务时序Figure 5 Sequence of system business
(1) 步骤1–3, 患者将身份信息上传给平台, 平台上已部署完成的USC 参与者智能合约自动执行, 由矿工验证上链.
(2) 步骤4–6, 患者将任务信息上传给平台, 平台上已部署完成的TSC 任务智能合约自动执行, 由矿工验证上链.
(3) 步骤7–9, 医生身份信息上传给平台, 平台上已部署完成的USC 身份智能合约自动执行, 由矿工验证上链.
(4) 步骤10–11, 医生向平台发起承接任务请求, 平台遍历区块链发现在线群智任务, TSC 自动执行承接任务算法Getwork(), 通过USC 中医生的技能、信誉等相关信息与TSC 中任务相关信息的比较与匹配, 检验是否医生的相关信息符合任务要求, 如果符合任务要求, 则增加医生的USC 地址到TSC 合约医生集合中, 任务承接完成.
(5) 步骤12–16, 医生经平台上传诊断结果, 表示医生工作完成, 等待矿工验证医生成果, 矿工根据TSC 中的任务数据验证方法对数据进行评估, 评估完成后上传验证结果.
(6) 步骤17–19, 当所有任务均完成或者到达最后截止时间, 由患者结算医生报酬并上传给平台, 平台上的TSC 合约自动执行支付医生报酬.
(7) 步骤20–22, 群智任务流程结束后患者通过平台设置TSC 中任务状态变量为关闭状态.
4.3.2 线下数据传输流程
为了保证电子病历的隐私安全, 在线下进行数据传输时, 需要对电子病历进行哈希签名和秘密共享等操作, 线下数据传输的流程如下:
(1) 患者的电子病历数据MedRecorign.
(2) 患者对病历数据的哈希值进行签名, 将签名与电子病历原始数据作为秘密共享的原始数据MedRecsecret:
(3) 患者对MedRecsecret进行秘密共享, 分割成n个共享份额, 分别分发给医院、患者家属等个体进行保存, 医生成功承接任务后则向各方申请共享份额, 达到r个共享份额后恢复出MedRecsecret,对患者的电子病历进行诊断.
(4) 医生完成诊断后得到诊断结果MedRecresult, 对诊断结果哈希值进行签名, 用患者公钥进行加密,得到待验证数据Dataverify, 发送至平台:
(5) 患者收到任务数据后, 矿工即可使用患者提供的验证函数进行验证, 将上面两个签名简写为Sign1、Sign2. 得到验证结果:
4.3.3 主要算法
算法1: 信息注册算法. 本系统通过部署智能合约实现群智网络中参与者的身份注册和群智任务注册.首先由平台部署合约交易, 医生和患者分别向平台上传自身信息和任务信息, 然后平台上的智能合约自动执行通过输入的用户信息和任务信息更新Usc 和Tsc. 信息注册算法的流程如算法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: 医生承接任务算法. 医生向平台上传承接任务请求, 平台在区块链上对合适的任务Tsc 发起承接任务交易. 如算法2 所示, 依次检查医生的专业、信誉值和等级是否符合任务要求. 如果达到要求, 则将医生地址写入任务合约的医生地址集合中, 完成医生承接任务流程.
算法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: 任务评估与结算算法. 如算法3 所示, 医生将诊断结果上传至指定地址, 并将当前任务完成的时间上传给平台并写入Tsc 合约. 当任务时间截止或所有任务均完成时, Tsc 合约自动执行支付算法结算医生报酬并更新Tsc 合约内容.
算法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: 报酬支付算法. 若任务超出任务截止时间Time2, 但是还没有足够的医生承接并完成任务, 则任务失败, 患者需要向已承接该任务的医生的账户发送信誉值和金币作为补偿. 若承接任务的医生提交的任务结果评估低于患者所需的结果或者没有在规定的最后期限Time1 之前提交结果, 则会在医生的账户中扣除信誉值和金币作为惩罚. 如果医生在最后期限Time1 之前上传了合格的结果, 则会得到转账以及信誉值和金币的奖励. 报酬支付过程结束后Tsc 合约的状态为关闭.
算法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
5 实验分析
5.1 安全性分析
本节对于系统可能面临的安全风险如: 节点失效故障、虚假报告攻击、DDoS 攻击、恶意评判攻击等进行分析.
(1) 节点失效故障: 在基于区块链的去中心化架构中, 无明显单点故障. 本文提出的基于区块链的群智网络系统无可信第三方参与, 是去中心化的. 在区块链中, 参与者均为平等的实体节点, 每个节点都保存了区块链中全部的交易信息, 如果有部分节点遭遇故障无法提供服务, 则不会影响整个系统的运行.
(2) 虚假报告攻击: 本系统通过自动执行预定义的智能合约来评估解决方案. 智能合约的执行是公开透明的, 在大多数矿工都是诚实的假设下, 恶意请求者不能通过篡改智能合约的结果来发起虚假报告攻击. 此外, 恶意请求者创建对他们有利的分叉链的可能性是有限的.
(3) DDos 攻击: 本系统通过智能合约的自动执行来实现所有的业务流程, 通过信誉值对参与者进行评估, 参与者完成任务后获取信誉值, 通过提高用户合约中的信誉值指标来与更高信誉值要求的任务合约相匹配, 相应的获取更高的报酬. 参与者只能通过注册账号来获取系统中的合法身份,想要发起DDos 攻击的恶意参与者需要注册大量的Usc 合约, 同时通过承接并完成系统中的任务来获得信誉值, 如果只承接任务, 没有在规定的时间内完成任务也会扣除相应的信誉值, 每个账号产生的交易费用也比较高, 所以对于恶意参与者来说, 获得大量信誉值较高的账号是困难的, 发起DDos 攻击的代价是巨大的.
(4) 参与者匿名: 为保护用户隐私, 本系统允许用户进行匿名注册. 在系统中, 信誉值是参与者唯一的信任评判标准, 匿名用户的信誉值可以作为其身份合约的标识, 只要是正常注册, 并且拥有较高的信誉值的用户都可以正常承接任务, 对于信誉值较低的匿名用户也可以通过完成信誉值等级较低任务来积累信誉值. 参与者匿名不会对系统的运行产生影响.
(5) 恶意评判: 患者可能会为了减少对医生报酬的支付而恶意评判医生的诊断结果, 本系统设定由患者提供结果的验证函数, 矿工或其他验证者可以在不知道数据的情况下验证结果. 任务完成时,矿工或其他验证者评价医生的诊断结果, 避免了患者的单方面恶意评判. 如果患者恶意评判医生的诊断结果, 则以扣除患者的信誉值作为惩罚.
(6) 超时或拒绝支付: 本系统通过统计区块诞生的数量进行计时, 患者必须按时向完成任务的医生支付报酬, 否则将补偿信誉值给医生. 如果超时未提交任务结果, 会对承接任务的医生扣除信誉值和金币作为惩罚. 系统中医生或患者的超时或拒绝支付都会引发Tsc 合约中的报酬支付算法, 算法自动执行后从相应的账户中扣除信誉值和金币. 信誉值和金币低于一定额度以后, 用户将无法在系统中正常承接和发布任务.
5.2 效率分析
本文基于Win 10 操作系统和8.00 GB RAM、Inter(R) Core(TM) i5-6200 CPU @2.40 GHZ 环境进行了链上模拟仿真, 对两个智能合约分别进行了部署和测试. 采用浏览器版本的以太坊集成编译器Remix-Ethereum IDE 作为开发平台, 使用Solidity 开发语言(0.5.16) 编写智能合约, 采用MetaMask 作为轻量级钱包客户端和以太坊官方提供的测试网络, Ropsten 作为测试环境.
本文分别测试了参与者智能合约USC 和任务智能合约TSC 在公共测试网络Ropsten 中部署的Gas消耗, 并对合约中各主要函数的Gas 消耗进行了统计. 如图6、图7 所示, USC、TSC 这两种智能合约部署的Gas 消耗分别为713 788、2434 529. 在TSC 合约中消耗的Gas 最多的函数为paymentTask, 消耗Gas 值为205 586. 表1 和表2 分别展示了USC 和TSC 两种智能合约的部署以及各功能函数Gas 对应的Ether 和USD 成本. 如图8 所示, 在Ropsten 网络中, 随着参与者的不断增加, TSC 合约初始化所需的Gas 消耗不断增加, TSC 合约初始化函数initTSC 消耗的Gas 值与参与人数呈正相关关系, 当参与的医生人数为10 人时, 需要消耗Gas 数量达到330 886; 当参与的医生人数为50 人时, 需要消耗Gas 数量达到953 008. 实验结果表明了系统的实用性.
表1 合约部署的开销Table 1 Cost of deploying contracts
表2 功能函数的开销Table 2 Cost of functions
图6 智能合约部署在Ropsten 网络中的Gas 消耗Figure 6 Smart contracts deployed on Ropsten network
图7 业务各阶段主要函数的Gas 消耗Figure 7 Cost of main functions in each stage
图8 Tsc 合约初始化在Ropsten 网络中的Gas 消耗Figure 8 Cost of Tsc_init deployed on Ropsten network
6 总结
传统的电子病历一般存储在医疗部门的中心化数据库或者文件库中, 数据存储和管理并不完全透明,患者的隐私数据存在被泄露, 甚至被篡改的风险. 医生和患者之间往往是预先指定的关系, 缺乏灵活性.本文利用区块链和群智网络提出了一种基于区块链的医疗服务群智网络系统, 设计智能合约来实现传统繁琐的业务流程, 通过在区块链上发布和承包群智任务来实现医生和患者之间的灵活互选. 利用Shamir 秘密共享技术对患者的病历进行秘密分割, 成功承包任务的医生获取相应的份额进行秘密重构得到患者的病历进行医疗诊断, 以此来保护电子病历的隐私. 在未来的工作中, 我们将在隐私保护的基础上, 聚焦基于群智网络中任务的分发与匹配问题, 对基于区块链的医疗服务群智网络系统的落地应用做出进一步的探索与研究.