翟社平,白喜芳,童 彤
1(西安邮电大学 计算机学院,西安 710121) 2(西安邮电大学 陕西省网络数据分析与智能处理重点实验室,西安 710121)
在医疗信息化建设进程中,电子病历(Electronic Medical Record,EMR)早已代替传统纸质数据成为数据记录的主力,患者诊断、治疗信息存储电子化使得医疗数据管理更加便捷,电子病历的使用也随着患者数量的增加而日益突出[1].然而,在智慧医疗快速发展的同时也不可避免的带来一些问题:各医疗机构数据记录存储系统在共享过程中极易出现患者个人隐私敏感信息泄露,对患者健康数据造成损害甚至引发医患矛盾[2].因此,如何保证共享过程中的数据安全成为公共健康和智慧医疗领域的研究热点.
区块链是一个由不完全信任的多方共同交换、存储和记录交易的分布式系统,融合多种加密机制,具有数据不可篡改、可追溯等特性[3].区块链从去中心化程度分为公有链、私有链和联盟链,公有链不需要准入许可机制,所有节点都可加入,私有链是一种完全由中心节点管理控制的区块链.而联盟链介于两者之间,只允许特定网络节点访问,节点数量有限且易达成共识,相比于其它两种,联盟链更适合多方协作的场景,因此广泛应用于多主体参与、部分去中心化的场合[4].
作为区块链技术的核心,共识算法保证了区块链系统的数据一致性,各节点均持有一份完整数据副本以实现去中心环境下数据的高度统一,而各类共识算法的优劣直接影响区块链系统的性能[5].相较于其他共识算法,由Castro和Liskov提出的实用拜占庭容错算法(Practical Byzantine Fault Tolerance,PBFT)[6]不需要消耗大量算力资源,且共识速度快、效率高,因此,基于PBFT共识算法的不同改进方案被提出以适应更多应用场景下的性能需求[7].为了实现大规模网络中低时延、高吞吐量和安全性目标,文献[8]提出一种改进的RBFT共识机制,将网络进行分片,组内外采用不同方法进行共识,但未考虑联盟链中隐私隔离性差的问题.文献[9]基于特征信任模型提出一种优化的实用拜占庭容错算法(Practical Byzantine Fault Tolerance consensus algorithm based on Eigen Trust model,T-PBFT),采用交易方式评估节点信任度选取适合的节点组成共识组.文献[10]使用阈值签名技术将PBFT的广播通信模式优化成线性通信模式,由主节点负责整个通信过程,为实现快速响应的特性,利用并行流水和线性视图转换等方法,提高整个系统的共识效率.文献[11]提出一种投票奖惩方案及其相应的信用评估方案—拜占庭容错协议(consensus protocol-credit-delegated Byzantine Fault Tolerance,CDBFT),通过筛除异常节点来增加可靠节点的参与度,提高系统的效率和灵活性.文献[12]针对PBFT不能完全应用于大规模物联网生态系统和区块链中,提出一种基于PBFT的可扩展多层共识机制,通过节点分层分组,限制组内通信,从而将通信复杂度降到最小值.虽然PBFT共识算法具有一定优势,但在大规模网络下所有共识节点两两通信,共同参与三阶段共识过程保证链上数据安全,导致整个系统通信开销不断增加.
属性加密(Attribute-Based Encryption,ABE)是一种将用户属性作为公钥应用的加密算法,可以对区块链隐私数据进行保护,同时对加密后的数据提供细粒度访问控制.根据密钥和密文与属性和访问结构的对应关系,属性加密可分为密钥策略(Key-Policy ABE,KP-ABE)[13]加密和密文策略(Ciphertext Policy ABE,CP-ABE)[14]加密两种.KP-ABE加密中的密文依赖于一组属性,而用户私钥依赖于访问结构.与KP-ABE不同的是,CP-ABE加密中用户私钥依赖于任意属性数量,编码器采用特定访问策略对消息进行加密,当且仅当用户属性满足访问策略时才能对其解密.因此,利用CP-ABE对电子病历数据加密,在实现细粒度访问的同时防止患者隐私信息泄露.在现有大多数CP-ABE方案[15,16]中,数据拥有者一般选择将加密数据交由云服务器这些中间实体,在实现便捷访问控制的同时降低系统各方面的成本.文献[17]基于区块链技术,提出一种利用两类属性加密提高即时访问撤销权以实现细粒度访问控制,增强网络传输效率的数据存储方案.文献[18]针对目前可搜索加密技术忽略用户细粒度搜索权限问题,借助云辅助将属性加密和可搜索加密结合对数据进行处理,实现安全访问,但第三方用户缺少访问权限.为了判断出被滥用的私钥来源,文献[19]提供了一个快速并能保障数据安全的追踪式属性加密方法,密文通过预加密技术迅速产生时属性也将结合过滤器隐藏在匿名访问结构中,以此保护用户密钥安全.
由于区块链网络中各节点都持有一份完整数据副本,适用于医疗机构间的数据共享.文献[20]考虑到病历数据在不同医院间共享困难、患者对病历信息掌握不全面等问题,基于链上、链下混合存储的方式,实现了一个病人可控管理的医疗数据共享模型,但未考虑在大规模网络节点下随机选取主节点带来的系统开销问题.文献[21]在以太坊中搭建分布式隐私保护框架,利用智能合约对电子医疗记录进行访问控制和操作,但该方案不支持以太坊中的快速交易.为了验证可穿戴传感器生成的数据,文献[22]对于医疗物联网中的数据分配问题,将区块链加入其中,通过卫生当局选择最佳药物收集算法实现最佳验证概率下的预算限制.
因此,针对各医疗机构在数据共享时出现患者隐私泄露以及通信开销较大的问题,本文提出一种基于区块链的电子病历共享模型,主要贡献有以下3点:
1)将CP-ABE和可搜索加密技术相结合,由患者自主制定访问策略,对用户属性进行限制,只有满足患者设置的访问策略的第三方数据用户有权对数据进行搜索,在保护患者隐私信息的同时实现细粒度访问控制.
2)采用改进的PBFT共识算法,将参与共识过程的节点进行聚类划分,在医疗机构实现数据共享这种大规模网络中,减少节点间的通信次数和通信量,提高整个区块链系统的效率.
3)从安全性和算法性能等方面对所提模型进行分析验证,结果表明,攻击者对密文破解难度增大的同时系统整体通信量也在降低,实现各医疗机构对电子病历的安全共享.
设G1和G2为两个乘法循环群,其阶均是素数p,如果e:G1×G1→G2是一个双线性映射关系,则其具有以下性质.
双线性:∀a,b∈Zq,∀g,h∈G1,均有e(ga,hb)=e(g,h)ab成立.
非退化性:∃g∈G1,使e(g,g)≠1.
可计算性:∀g,h∈G1,存在有效算法计算e(g,h).
符号定义表见表1.
表1 符号定义表Table 1 Symbol definition table
PBFT共识算法因其优势在联盟链中广泛应用,它将系统复杂度由指数级降为多项式级,解决了效率和拜占庭将军问题,然而,PBFT只有在至少2/3的网络节点是诚实的情况下才能抵抗拜占庭错误,即达成共识的前提是失效节点不超过总节点数的三分之一.PBFT中的共识节点主要包括主节点和副节点两类,其共识过程分为3阶段,需要多次进行全网广播,具体流程如图1,描述如下:
图1 PBFT共识算法流程Fig.1 PBFT consensus algorithm process
1)预准备阶段:客户端发送交易请求到负责候选块生成的主节点,由主节点广播消息至其他副节点;
2)准备阶段:副节点接收到主节点的消息后验证其真实性,通过验证后并广播一条准备消息发送至其他节点;
3)确认阶段:当接收到来自不同节点的验证消息(超过总数的三分之二)时,各节点生成确认消息进行全网广播,从而达成共识,随后网络中所有节点对客户端发送共识结果.
可以看出PBFT三阶段共识过程均需要两两节点进行通信,在大规模网络集群下实现数据一致性的同时如何降低节点间的通信次数,从而实现快速共识、高效率的目标成为研究该算法的热点.
本文通过设计基于区块链的电子病历共享模型,旨在达到以下安全目标.
数据安全与共享:针对电子病历在共享过程中易出现隐私泄露等问题,本文提出的模型旨在实现各医院间数据共享的同时也能保证共享数据的安全.利用区块链加密算法保证数据安全,共识算法实现数据共享的同时验证每笔交易的合法性.私有链安全一致性通过对医生上传的交易单进行验证,而联盟链安全一致性通过判断用户的关键词索引和属性集合是否符合患者生成的访问策略,同时将这些具有上层监督作用的政府权威机构(权威节点)加入联盟链对医院进行监督,通过构建两条区块链来增强数据的安全性.
隐私保护:电子病历中存储着患者大量隐私敏感信息,因此保护病历数据的安全性和隐私性十分重要.本文设计的模型通过医生为患者设置伪身份实现对患者隐私信息的保护,在医生得到患者的授权后,会为其生成一个伪身份.由于每次生成的伪身份不同,即使窃听者得到消息,也不能断定两个甚至多个消息是否来自同一患者,对患者隐私信息进行保护.
安全准确搜索:本文提出的模型将可搜索加密与CP-ABE结合,第三方数据用户利用关键词进行搜索时,首先发送请求至政府权威机构,然后联盟链节点运行搜索匹配算法,判断用户的属性集合是否满足访问策略,从而实现对数据的细粒度访问控制,同时此过程窃听者难以猜出搜索陷门.假设窃听者可以猜出搜索陷门,但由于伪身份的存在,仍然无法解密出电子病历数据,达到安全准确搜索的目的.
系统模型如图2所示,主要包括6个参与方:属性授权中心、患者、第三方数据用户、医院数据库、私有链和联盟链.本文采用私有链和联盟链两条区块链构建模型,其中n家医院和n个政府权威机构共同构建联盟链,各医院私有链由本院医生共同维护,同时医院拥有各自的数据库.
图2 系统模型图Fig.2 System model diagram
1)属性授权中心:负责整个系统的参数设置,为系统生成公钥和主密钥,同时为患者、第三方数据用户和医生生成相应的私钥.假设属性授权中心与系统中有交互作用的实体是完全可信的.
2)患者:当患者去医院就诊时,医院服务器首先为患者注册身份ID,然后选择对应的医生就诊并对其进行授权.其中授权信息包括:患者个人身份信息、患者生成的访问策略信息.同时患者还生成关键字集合并加密,将关键字密文发送给政府权威机构,由权威节点进行第三方数据用户的查询搜索任务.
3)第三方数据用户:包括想了解患者以往病史的医生、保险机构和其他想查询患者病历的用户等.当第三方用户进行患者病历搜索时,首先向政府权威机构发送请求,然后权威节点将搜索结果返回给用户,若搜索成功则向医院数据库系统提交结果,得到EMR密文,进行解密获取患者电子病历信息.
4)医院数据库:每家医院都拥有独立的数据库,用于保存电子病历密文信息.用户将搜索结果发送医院数据库得到EMR密文信息,再对EMR密文进行哈希,将其与从索引交易单获取的密文哈希值进行对比,如果结果一致,则进行解密.
5)私有链:由n位医生共同组成本医院的私有链,患者就诊后,医生为其生成EMR并加密,将EMR密文上传至医院数据库.同时医生为患者生成一个伪身份,防止在搜索过程中暴露患者的隐私信息.最后医生将密文哈希、患者授权信息和伪身份构成的交易信息上传至私有链并构建新的区块,其他医生负责验证新区块的有效性.
6)联盟链:由n家医院共同构建,并将政府权威机构纳入联盟链,作为权威节点共同维护链上数据的安全和隐私.医院节点将私有链交易单信息上传联盟链并进行广播,同时权威节点将患者发送的关键字密文上传至联盟链,然后服务器构建由私有链交易单和关键字密文组成的索引交易单.当第三方数据用户向权威节点发送请求后,联盟链上节点进行搜索匹配,验证是否有关键字集合可以匹配用户产生的关键词索引,若可以匹配,将索引交易单返回给该用户,用户继续对自己的属性集合进行判断,当且仅当满足患者定义的访问策略的用户可以解密数据.最后权威节点为搜索成功的用户返回结果1,否则搜索失败显示0.此过程中联盟链上所有节点均通过共识算法实现对电子病历的安全搜索,因此共识算法的选取影响用户的搜索效率及整个网络的通信量.
本文基于区块链的电子病历共享模型研究主要分为4个阶段:系统初始化、数据加密、数据搜索和数据解密,首先对这4个阶段的算法进行设计,然后对改进的PBFT共识算法进行介绍,完成这部分的内容.
1)系统初始化阶段(Setup)
本阶段由模型的全局设置和密钥生成两个算法组成,具体如下.
算法1.全局设置
整个过程由属性授权中心负责,该算法以一个安全参数λ作为输入,输出为公共参数Params、系统公钥PP、主密钥MK,其中属性授权中心选择G和GT均是阶为素数p的双线性群.
1.从G中选择一个元素g并记为G的生成元,双线性映射为e:G×G→GT.
4.系统公钥PP和主密钥MK如下:PP={Params,ga,gb,e(g,g)a,(Ti)i∈U},MK={a,(ti)i∈U},授权中心向所有用户公开系统公钥PP,而秘密保存系统主密钥MK.
算法2.密钥生成
该算法由属性授权中心完成,为患者、医生和第三方数据用户生成对应的密钥.
1.为患者、医生生成密钥,属性授权中心选取x和y两个大素数并计算n=x×y的值,记欧拉函数为φ(n).
2.随机选择一个数A,其中A∈[1,φ(n)]且A和φ(n)互为素数.计算S×A≡1mod(φ(n)),假设患者和医生的个数为N,i,j∈N,i,j分别表示第i个患者和第j个医生,则患者的公钥为:PKpi={A,n},私钥为SKpi=Spi.
3.同理计算出医生的公私钥分别为PKdj={A,n}和SKdj=Sdj.
5.用户对应的私钥为:SKU={SKUu,SKUv,SKUw,SKU1,SK′U1},最后由属性授权中心将密钥分发给第三方用户.
2)数据加密阶段(KeyGen)
本阶段由电子病历密文、关键字密文、患者伪身份和联盟链交易生成4个算法组成,具体如下.
算法3.电子病历密文生成
当患者去医院就诊时,医院服务器首先为其注册身份PIDi并分配医生DIDj,然后将个人身份信息和访问策略信息给相应医生进行授权,其中访问策略(,ρ),是一个m行n列的矩阵,ρ是将的每一行与用户的不同属性进行一一对应,x表示的第x行,1≤x≤m.假设患者选择的秘密为s,随机数zi∈Zq,(i=2,3,…,n),同时定义向量B=(s,z2,z3,…,zn),计算qx=x×B的值.医生得到患者的授权为其生成电子病历信息,最后将电子病历密文上传医院数据库.病历密文生成具体计算过程如下.
1.患者随机选取密钥kσ,并利用对称加密算法计算病历的Mσ密文Cσ=Enc(Mσ);
2.对密钥kσ进行加密得到C′σ=kσ×e(g,g)bs;
3.选择随机数yi=Zq,分别计算Ce=gs,Cf=(gB×ρ(x))yi,Cg=ga×qx×H1(ρ(x))yi和Ct={(,ρ),C′σ,Ce,Cf,Cg}的值;
4.最终得到密文Cm=(Cσ,Ct),计算密文的哈希值H(Cm),由医生DIDj将H(Cm)上传到医院的数据库中.
算法4.关键字密文生成
为了保证第三方数据用户能够进行安全准确搜索,患者生成关键字密文并发送至政府权威机构.
1.对于电子病历Mσ,σ表示病历的数量,(σ=1,2,…,n),患者首先选出一个随机数mσ并计算Xσ=gmσ.
3.得出关键字密文KW′l=(X,Xσl,Xσ),对密文进行哈希H(KW′l),并将密文信息H(KW′l)交由权威节点保存.
算法5.患者伪身份生成
3.医生将密文哈希H(Cm)、患者伪身份P′IDi和授权信息Aut={PIDi,(,ρ)}构建的交易单Ta上传至私有链.
算法6.联盟链交易生成
表2 私有链交易单Table 2 Private chain transaction order
表3 索引交易单Table 3 Index transaction
3)数据搜索阶段(Search)
算法7.搜索陷门生成
1.用户输入关键词索引:KW′f={kw′1,kw′2,…,kw′z};
3.得到搜索陷门:Trap=(X′1,X′2,X′3);
4.将陷门Trap发送权威节点;
6.若成立,则表示二者匹配成功,否则显示匹配失败.
4)数据解密阶段(Decrypt)
算法8.解密过程
若搜索成功,则权威节点将索引交易单返回给用户,用户继续对其属性集合进行判断,满足访问策略的用户得到权威节点发送的结果并显示1.
2.根据索引交易单定位至私有链,获取链上信息,得到EMR密文哈希H(Cm).
3.将显示结果1发送至医院数据库系统从而得到EMR密文,将EMR密文进行哈希运算H(C′m).
4.结果与从链上获取的密文哈希进行对比,即判断H(Cm)与H(C′m)是否相等.由此可以得出医生是否篡改患者信息,对医生起到监督作用.
PBFT具有共识速度快、效率高等优势,但仅限于小规模网络共识集群.传统PBFT算法交易数据和区块数据的共识都要区块链网络内所有节点进行三阶段共识,如果大量节点同时参与共识过程,节点网络中高频次传递共识消息容易导致网络拥堵带来额外通信开销.同时在实际中由于网络节点间的延迟、各医院地理位置、机器硬件等客观因素,整个系统的性能也会受到一定影响.因此,本文对PBFT算法进行改进,全国n家医院共同组成联盟链,考虑到政府的强信任背书、监管力度以及强度,将政府权威机构纳入联盟链一起维护链上数据的安全以及用户隐私.本文采用的共识节点结构如图3所示,联盟链上节点包括两类:权威节点和医院节点,其中权威节点组成骨干共识集群,负责接收第三方数据用户的请求,其轮流成为当值主节点;各地区医院组成子共识集群,负责对用户的请求信息进行搜索.在整个区块链系统中将政府权威机构作为聚类中心,且中心节点不再改变的原因主要有以下几点:
图3 共识节点结构图Fig.3 Consensus node structure diagram
1)具有政府信任背书,增强权威性,防止恶意节点攻击;
2)改变传统PBFT共识算法因节点数量增多带来的系统性能问题;
3)实现各医院之间数据共享的同时,使得社会影响度高的骨干共识集群拥有对平台的部分控制力.
因此,这里采用将权威节点作为聚类中心进行划分,在各医疗机构进行数据共享时,政府也能起到监督作用.
当接收到第三方数据用户的请求后,骨干共识集群节点作为主节点向各自子共识集群节点(即医院节点)发送消息,进行电子病历搜索,改进后的共识算法流程如图4所示,描述如下:
图4 改进后的PBFT共识算法流程Fig.4 Improved PBFT consensus algorithm process
1)请求阶段:第三方数据用户想查询患者电子病历时,发送请求给权威节点,权威节点收到请求后对交易的合法性进行验证,首先对属性集合进行判断,查看用户属性是否满足患者生成的访问策略,若交易合法,联盟链节点继续运行搜索匹配算法,权威节点将这段时间收到的所有请求交易生成预准备消息发送到子共识集群.
2)子共识集群阶段:子共识集群收到权威节点的消息后,各医院间进行PBFT算法的共识阶段:预准备、准备、确认和回复,共识完成将搜索结果返回各自所在区域的骨干共识节点.
3)骨干共识集群阶段:即最终回复阶段,权威节点将子共识集群的回复消息直接返回给数据用户,若此次交易合法,则返回给用户数字1,否则返回0.最后用户对搜索结果进行解密,完成对患者电子病历的查询工作.
隐私保护:本文设计的模型通过医生为患者设置伪身份实现对患者隐私信息的保护,在得到患者授权信息后,医生为其生成一个伪身份PIDi′=PIDi⊕H1(IDi)μ,由于IDi的唯一性和μ的随机性,即使攻击方获取到消息,也无法解出IDi和μ,实现对患者隐私信息的保护.
表4是本文方案与现有方案的对比分析,可以看出,本文提出的方案在隐私保护、访问控制、可搜索加密、共识算法、大规模网络和用户等方面具有优势.该方案通过将属性加密与可搜索加密二者结合,在保证患者隐私信息的同时实现用户对电子病历的安全准确搜索,并结合改进后的PBFT共识算法,降低了各医疗机构间的通信量,使得整个区块链系统性能得到提升,最终实现一个基于区块链的电子病历共享模型.
表4 本文方案与现有方案对比Table 4 Comparison of the proposed scheme with the existing scheme
本文在超级账本的基础上搭建区块链环境,从通信开销、共识时延以及吞吐量等方面与文献[20]进行比较,分析如下.使用Java语言,在Intel(R)Core(TM)i7-8700CPU@2.90GHz,8.00GB RAM,Win10系统计算机上实现.
图5为二者的通信开销对比,从中可以看出,随着网络中节点数量的增多,二者的通信量差距越来越大.当节点数量相同时,本文改进的共识算法通信量明显低于网络中采用文献[20]提出的方案,这是因为本文方案假设在政府强信任背书的情况下不会出现恶意节点,将政府权威机构直接指定为聚类中心,不需消耗时间重新选举,减少节点间通信次数;同时直接将子共识集群的结果返回给骨干共识节点,再由其发送至客户端,权威节点间取消两两确认这一通信过程,降低系统通信开销,提高系统的整体性能.
图5 通信开销比较Fig.5 Communication overhead comparison
所提方案与对比方案的共识时延比较结果如图6所示,在实验中分别取节点数为20、40、60、80和100,可以看出,系统的共识时延随着网络节点数量的增多而增大.就本文所提方案而言,同样是对网络中的共识节点进行聚类与划分,但时延却低于对比方案,原因是本文直接将政府权威机构作为聚类中心,成为代理节点,而代理节点的每次更换都将影响整个共识过程的时延,因此本文方案更优于对比方案.
图6 共识时延比较Fig.6 Consensus latency comparison
共识效率直接对系统吞吐量产生影响,共识效率越高,吞吐量越大,即系统处理事务的能力就越强,图7是关于两者吞吐量的测试结果.可以看出,在节点数量相同时,本文方案的吞吐量略高于对比方案,此时共识过程处于请求阶段,当系统吞吐量随着节点数量增多而增大时,两者的吞吐量基本相同,原因是子共识集群阶段采用的共识算法相同.当利用本文方案测试的系统吞吐量明显高于对比方案时,可以判断出区块链网络正处于骨干共识集群阶段,假设此时网络中n个节点分为r类,则取消确认阶段的操作导致通信次数减少了r×(r-1)次,再考虑到系统在实际中受到地理位置、硬件条件等因素的影响,因此基于本文方案下的系统吞吐量更大.
图7 吞吐量比较Fig.7 Throughput comparison
考虑到电子病历在各医疗机构共享中易造成患者隐私泄露和通信开销较大等问题,本文提出一种基于区块链的电子病历共享模型.首先利用基于密文策略的属性加密和可搜索加密技术,对用户属性进行限制,增加攻击者对密文的破解难度.其次对PBFT共识算法进行改进,考虑到政府的强信任背书,将其作为权威节点组成骨干共识集群,改进后的共识算法,减少了大规模网络下系统的通信开销,提高了整个系统的效率.最后从不同方面进行分析,实验结果表明,本文提出的模型在实现医疗机构对电子病历安全共享的同时减少了系统的整体通信量.本文改进的共识算法没有考虑将网络节点进行聚类划分的类别数对整个网络性能的影响,因此接下来将从这方面展开具体研究.