APP下载

基于区块链的电子医疗病历共享方案

2020-03-06罗文俊闻胜莲

计算机应用 2020年1期
关键词:私钥密文密钥

罗文俊,闻胜莲,程 雨

(重庆邮电大学 计算机科学与技术学院,重庆 400065)

0 引言

随着医疗行业的飞速发展、医疗健康数据的急剧增多,许多医院开始使用电子医疗病历(Electronic Health Record, EHR)[1]记录病患的医疗健康数据。使用电子医疗病历的好处也有许多,例如:为医疗数据提供了便利的存储方式、为医生开处方提供了数据来源、为研究机构提供了研究数据等。通常,病人在一个医院就医后就会产生自己的电子医疗病历,当该病人到另一家医院就医时,往往需要该病人之前的一些就诊记录或医疗数据,这时就要在不同的医疗机构间共享电子医疗病历。

由于医疗数据类型繁多,如何对其进行合理的整合存储,以及如何进行有效的共享,始终是一个研究热点;同时,电子医疗病历包含病患的许多隐私信息,在共享时如何防止隐私数据的泄露,这也是一个研究难题。

云计算[2-3]的发展为电子医疗病历的共享提供了一个好的方法。通常医院会将电子医疗病历外包给云服务器,当其他的用户想要获取云上的某些医疗病历时,需要经过云的验证,验证通过后云才会将数据共享给该用户;但是基于云的电子医疗病历共享方案[4-5]也有一个弊端:数据存储中心化。这也就意味着,所有的医疗数据都集中存储在云上,一旦云服务器被恶意攻破,那么云上存储的医疗数据将会泄露,从而造成用户的隐私泄露等一系列问题,由此引发的后果十分严重。

区块链技术[6-8]的发展与应用为解决这一问题带来了新机遇。2008年,中本聪发表了论文“Bitcoin: A peer-to-peer electronic cash system”[9],论文中提到了基于比特币的区块链技术,此项技术一经提出立马引起了广泛关注。区块链技术具有去中心化和分布式存储、不可篡改等优点,可提供更高的安全性。基于该技术的优点,逐渐有研究人员开始使用区块链技术构建电子医疗病历共享系统[10-13]。Xia等[14]提出了一个基于区块链的医疗数据共享模型——MeDShare,系统中使用区块链存储医疗数据包,利用智能合约跟踪对数据的所有操作,一旦监测到恶意行为时,可以及时撤销对数据的访问权限;根据访问权限,对数据请求者身份的合法性进行验证,通过验证后再实现数据安全共享,防止数据隐私泄露。Fan等[15]提出了MedBlock方案,方案利用区块链的分布式账本实现有效的电子病历(Electronic Medical Record, EMR)访问和检索,在授权用户之间共享电子病历。方案中使用了加密策略,确保信息的安全性和隐私性,同时降低了成本;由于方案对共识机制进行改进,所以有效地提高了区块共识的效率。此外,Zhang等[16]提出了一种基于区块链的个人健康记录共享方案;该方案构建了两种不同的区块链来实现医疗数据的安全共享,方案分别构建了私链和联盟链,私链实现个人医疗数据的加密存储,联盟链保存个人医疗数据对应的安全索引,通过验证医生的身份令牌进行数据安全共享,很好地保护了医疗数据隐私;但是利用两种类型的区块链不仅会增加成本,其执行效率也会降低。

在本文中,提出了一个基于区块链的电子医疗病历安全共享方案,本文方案在文献[17]中提出的模型上进行了改进,并设计了数据安全共享协议,协议将分布式密钥生成(Distributed Key Generation, DKG)技术[18-19]和基于身份的代理重加密(Identity-Based Proxy Re-Encryption, IBPRE)方案[20]相结合。与传统的基于身份的加密方案相比,本文方案不用PKG生成主密钥,而是采用DKG技术,让每个机构用户共同协商生成私钥,不仅防止了PKG被恶意攻破时,各机构的私钥泄露的问题,还有效抵抗了用户间的合谋攻击。方案采用IBPRE技术,在保证EHR的保密性、完整性和隐私性的基础上,实现了单对用户间的加密数据共享。

1 相关知识

1.1 代理重加密

代理重加密是一种可以在密文间使用的转换机制,最初由Balze等[21]提出。使用代理重加密的目的是解决用户共享数据时的不便,在减轻用户负担的同时,还可以增强数据的可靠性和安全性。在代理重加密的过程中,每个参与者都无法获取任何明文消息。其具体工作过程涉及到三种角色:数据拥有者、数据用户和代理者。当数据所有者Alice想要将已加密的文件共享给数据用户Bob时,Alice为Bob生成代理重加密密钥,并将代理密钥通过安全信道传送给第三方的半可信代理者,半可信代理者用代理密钥根据代理重加密算法对加密文件进行重加密,Bob获取重加密的文件后,可利用自己的私钥对重加密文件解密,解密后可获取明文文件。

1.2 区块链技术

区块链技术是一种特定的数据结构,这种数据结构按照时间顺序将数据区块组合成链条,当前区块通常由前一个区块的哈希值、有效负载、贡献签名和时间戳等组成,以此来保证其不可篡改性和不可伪造性;区块链也是一种去中心化的分布式数据库,传统的分布式数据库只有一个中心服务器维护数据,而区块链不一样,它由区块链网络中的所有节点共同维护数据,每一个节点都会对数据进行备份。如果单个节点上的数据被篡改或破坏,也不会对区块链存储的数据产生影响,除非有51%的节点都被篡改,那么区块链上存储的数据才会被篡改成功。区块链网络包含两种重要实体,分别是矿工和验证者。矿工指为区块链生成新区块的节点,不同的应用场景中可以定义不同的节点为矿工。在比特币区块链中,只有提供工作证明的矿工节点能够保存交易记录,而验证者则会在验证矿工提交的区块后,生成新区块。

2 本文方案

2.1 基于区块链的电子医疗病历共享模型

本文方案的模型对文献[17]进行了改进,如图1所示,该模型主要由4种角色组成,分别是N个权威中心、数据拥有者、数据用户、代理者。其中,N个权威中心是本文新增加的角色,其余角色是原模型中本就包含的。区块链节点由一个联盟组织内的医院、银行、保险公司、研究所等构成,每一个节点可以至少扮演一种角色。模型采用分布式数据库和区块链共同存储医疗数据:数据库存储加密的EHR,区块链存储EHR的对应访问控制策略、其在数据库上的存储地址和EHR的数据哈希。采用这种存储模式既解决了数据集中存储在各医疗机构的数据库中的问题,同时也减轻了区块链上的数据存储和高频访问的压力。

图1 基于区块链的电子医疗病历共享模型Fig.1 Blockchain-based electronic health record sharing model

1)N个权威中心。N个权威中心分别代表联盟链内不同的医疗相关机构,例如:医院、研究所、银行、保险公司等。各权威中心可自己生成一部分秘密,然后根据各自的身份信息协商出每个机构的私钥。

2)数据拥有者。数据拥有者拥有自己的EHR,可以将EHR分享给其他机构。数据拥有者将原始的医疗数据加密存储在分布式数据库中并且将该医疗记录的hash值、存储地址、访问控制策略存储到区块链,以防止数据被恶意篡改。在数据共享的过程中,数据拥有者需生成代理重加密密钥并将该密钥分发给代理节点。

3)数据用户。数据用户可从数据所有者处获取EHR,授权数据用户可通过发送验证请求来获取重新加密的EHR,也可使用自己的私钥来解密重加密后的EHR。

4)代理者。根据委托权益证明(Delegated Proof Of Stake, DPOS)共识算法[22]所推举出来的矿工节点作为代理节点。该代理执行重加密算法重新加密EHR。具体而言,代理节点根据来自数据所有者的重加密密钥来重新加密EHR。

2.2 基于区块链的电子医疗病历共享协议

根据本文方案的模型,本文采用一种多中心的基于身份的代理重加密方案作为数据共享协议。协议根据Matthew Green提出的IBPRE方案进行改进。在Matthew Green的方案中,用户私钥是由PKG(Private Key Generation)产生的主密钥生成,但是这里存在一个问题:如果PKG的真实性无法信任或PKG被恶意攻击,那么主密钥就有可能泄露,从而泄露用户的私钥。为了提高用户密钥生成的安全性,本文方案对IBPRE方案的密钥生成部分采用DKG技术进行优化,用DKG以后,每一个用户的私钥都根据其余用户的秘密值协商生成,即使单个用户被恶意攻击也能保证密钥的安全性。具体的数据共享协议由以下5个步骤组成:系统初始化,密钥生成,数据存储,数据共享,数据恢复。

2)密钥生成。每个权威根据输入的参数和身份标志idi,返回其私钥skidi=H1(idi)s。

5)数据恢复。当用户接收到重加密后的EHR时,可使用自己的私钥skidj对重加密密文进行解密,解密后就可获取EHR明文文件M。其第一层密文解密过程如下:首先用户计算Xj=Decrypt(skidj,(c3,c4))=c4/e(c3,skidj),然后计算Xi=c2/e(c1,H2(Xj)),计算所得的Xi即为EHR明文文件M。

3 分析与评估

3.1 正确性分析

3.1.1 用户私钥的正确性

本文提出的方案和其他的基于身份的加密方案[23-24]类似,都是先产生主密钥,再根据主密钥生成用户私钥。在这些方案中,需要一个可信第三方权威(例如PKG)来保护主密钥并生成用户私钥;但是在本文方案的模型中没有可信第三方,所以采用文献[18-19]中的DKG技术来实现没有可信第三方时的密钥生成,用户私钥生成的正确性可以由DKG技术来保证。

3.1.2 密文的正确性

在本文方案中,需要验证两层密文的正确性,即加密密文的正确性和重加密密文的正确性。首先,第一层密文m经过用户idi加密后得到密文cidi=(gr,m·e(gs,H1(idi))r),其用户私钥为skidi=(H1(idi)s),通过如下等式来验证其正确性:(m·e(gs,H1(idi))r)/e(gr,H1(idi)s)=m。

在重加密过程中,重加密密文cidj=〈c1,(c2·e(c1,R3)),R1,R2〉,重加密密文是由重加密密钥对第一层密文cidi计算得到的。经计算后,可得cidj=(gr,m·e(g,H2(X))r,R1,R2),给出解密密钥skidj=H1(idj)s,可以解密第二层密文cidj。

将此解密过程分为两部分,首先将重加密密文的后两部分cidj′=〈R1,R2〉看作用户在私钥skidj下加密的单层密文,然后根据单层密文解密过程对其进行解密,计算可得到X=Decrypt(params,skidj,cidj′)=R2/e(R1,skidj),再使用得到的X对重加密密文的前两部分继续进行解密,计算m·e(g,H2(X))r/e(gr,H2(X))可获取明文。

综上所述,本文提出的协议是正确的。

3.2 安全性分析

本文的模型和协议共同保证了数据的安全性和隐私性。

首先,从方案所提出的模型上来讲:模型使用分布式数据库保存加密的EHR,这保证了即使加密数据泄露,在没有数据拥有者的私钥的情况下,加密数据也无法被攻击者解密从而获取明文内容。此外,模型使用区块链存储数据的hash、存储地址和访问控制策略,根据区块链自身可防篡改的特性,极大地提高了数据的安全性和隐私性。具体而言,由于区块链本身包含许多个节点,一旦数据被写入区块链,那么每个节点都会备份该数据,所以除非发生51%攻击,否则区块链上的数据是无法被篡改的;即便最后发生了51%攻击,由于区块链上并未存储原始的EHR,这种篡改对EHR的元数据也并不会产生影响。

其次,从方案所提出的协议上来讲:本文采用的基于身份的代理重加密协议由于经过了优化改进,其用户私钥生成部分不再依靠PKG来生成,而是每一个机构用户自己选择多项式生成秘密值,再由秘密值来生成自己的私钥,相比PKG这种密钥集中生成的办法,分布式密钥生成法可以有效地防止私钥泄露的问题,其安全性在于:即使单个用户遭受到恶意攻击,攻击者也无法获取该用户的秘密值,更无法获取其私钥,那么利用用户公钥加密存储在分布式数据库的EHR也无法被攻击者利用其私钥解获。如果遭受恶意攻击的是多个用户,或者多个用户进行合谋攻击,也无法获取私钥,因为协议中会对每一个用户发过来的秘密值进行检验,检验不成功是无法生成私钥的。由此得出,用户的私钥是安全的,且不易被恶意攻击造成私钥泄露。

在用户私钥生成以后,假设某一个数据用户想要获取EHR的明文内容,首先需要满足访问控制策略,其次需要解密EHR密文。将协议剩下的步骤分为两个阶段,如下所示。

阶段一 数据用户B首先发送含有自己签名的请求给数据拥有者A,数据拥有者查看该用户对应的访问策略,确认有读取权限后再生成代理密钥并发给代理者S,同时也将加密数据存储的地址发给代理者。在此阶段,假设数据拥有者是可信的,且数据用户从未将自己的身份凭证暴露给其他人,攻击者C无法恢复密钥,可以设想攻击者的不同攻击情况:

1)情况一。C发送给A一个请求,试图获取加密数据,由于C没有用户的身份凭证,那么A接收到C的请求后,查看不到对应C的访问控制策略,那么就不会执行接下来的协议步骤,C攻击不成功。

2)情况二。允许攻击者C拦截用户B发送给A的请求消息并执行重放攻击。假设C可以成功欺骗A,这导致A将C视为B,那么A可以查询到B的相应访问控制策略,如果B有读取权限,A会生成针对B的代理密钥,然后发送代理密钥和请求数据的地址给代理者,代理者正常执行余下步骤后,再将重加密的密文发送给C,但这段密文对C来说仍是无法解密的,因为该密文是用针对B的代理密钥加密生成的。

总之,协议的第一阶段能有效抵抗身份伪装和重放攻击。

阶段二 代理者接收到数据拥有者发送的重加密密文和加密数据的存储地址后,代理者再根据协议下载加密数据并重加密该数据密文,然后将重加密密文发送给用户。在重加密过程中,仍然假设数据拥有者是可信的,同时数据用户的身份凭证从未暴露给其他人,代理者是半可信的,即代理者对存储的EHR文件感兴趣,并且尝试获取文件内容从而获得好处,但是会按照协议规定执行协议的每一步,不会中途退出协议也不会提供虚假数据,那么代理者尝试获取EHR明文的方式有两种:方法一,根据数据拥有者的私钥直接对第一层密文解密;方法二,对加密文件进行重加密,重加密后利用数据用户的私钥解密密文。对于方法一,由于数据拥有者可信,其身份凭证也未暴露,根据分布式密钥生成的数据拥有者的私钥无法被代理者获取,那么代理者在获取到第一层密文文件时无法使用私钥解密文件,即代理者不能通过此方法获取EHR明文。对于方法二,假设代理者通过代理密钥将密文重加密,然后得到重加密密文,那么此时要获取EHR明文,代理者需要获得数据用户的私钥才能解密第二层密文。与方法一同理,由于数据用户的身份凭证未暴露,且其私钥是根据分布式密钥生成法生成的,代理者无法获取数据用户的私钥,那么代理者也无法解密第二层密文来获取EHR明文。总之,虽然代理者是半可信的,但是这也不会影响方案的安全性,也不会影响数据用户获取EHR的真实性。

3.3 评估

由于目前医疗信息化存在一些问题,现列举这些问题,并分析了本文方案中针对这些问题所提出的解决措施:

1)隐私和安全问题。本文方案采用非对称加密技术加密数据,可以保证隐私数据不会受到威胁。将医疗相关数据的hash存储在区块链,保证医疗数据的不可篡改性,也保证其不可抵赖性。

2)数据可访问性、操作性和完整性问题。本文方案采用分布式数据库存储加密数据,并将原始数据哈希、访问权限存入区块链,方便检测各机构的不同权限,实现各机构间的数据共享,保证数据可访问性和操作性。由于区块链具有分布式数据库的特性,数据在每一个节点上都有备份,可有效防止数据丢失,以保证其完整性。

此外,本文采用对照分析的方法来评估所提出的电子医疗病历共享方案。由于本文方案是基于区块链的,且是为了解决医疗数据共享问题所提出的,与文献[12]、文献[17]、文献[25]所提出的方案属于同类型的医疗区块链方案,所以将本文方案与以上三种方案对比,从各方案所采用的共识机制、区块链类型、算力需求等几方面着手,能够有效对比出本文方案的优缺点,结果如表1所示。

表1 不同方案的优缺点对比 Tab. 1 Comparison of advantages and disadvantages of different schemes

由表1的对比可知,本文方案使用DPOS算法作为共识机制,相对于文献[17]和文献[25]使用的POW算法,本文方案所需要启动的节点数相对更少,且不需要花费大量的算力去维护区块链;虽然文献[12]需要耗费的算力也较小,但是该方案方案涉及到两种类型的区块链,分别是联盟链和私有链,两种类型的区块链要进行维护肯定耗费的成本更高,同时,私链的去中心化程度不如联盟链。

为了比较三种共识算法的效率,将三种共识算法进行仿真,通过对实验数据的仿真测试得出各共识算法运行时的CPU占用率,其结果如图2所示。仿真结果表明,DPOS虽然不如PBFT响应快速,但是相对于POW,DPOS对CPU的占用率明显小很多。

图2 3种共识机制对CPU占用率的对比Fig. 2 Comparison of CPU utility by three consensus mechanisms

综上所述,相对于其他三种方案,本文方案的效率虽比不上文献[12]方案,但是远高于文献[25]和文献[17]方案,不仅保证了更高程度的去中心化,同时也不需要花费太高的算力和成本。本文方案明显具有一定优势。

4 结语

由于当前在各医疗相关机构间进行医疗数据共享始终是一个热门研究问题,因此保证医疗数据隐私性、实现基于区块链的电子医疗病历共享具有重要意义。本文基于区块链的去中心化和不可篡改性等特点,提出了基于区块链的电子医疗病历共享方案。本文方案改进了文献[17]的模型,并提出了数据共享协议,实现了单对授权用户间的医疗数据安全共享功能;但方案只能实现单对用户间的数据共享,且方案中的DPOS算法效率还有待提高。

如何改进共识算法,提高共识效率,实现一个用户到多个用户的数据共享是下一步研究的主要工作。

猜你喜欢

私钥密文密钥
一种支持动态更新的可排名密文搜索方案
比特币的安全性到底有多高
幻中邂逅之金色密钥
幻中邂逅之金色密钥
基于模糊数学的通信网络密文信息差错恢复
嵌入式异构物联网密文数据动态捕获方法
Spatially defined single-cell transcriptional profiling characterizes diverse chondrocyte subtypes and nucleus pulposus progenitors in human intervertebral discs
程序员把7500枚比特币扔掉损失巨大
一种新的密文策略的属性基加密方案研究
Android密钥库简析