一种基于联盟区块链的电子医疗记录安全共享模型

2021-02-28 06:20林孟晨付晓东
小型微型计算机系统 2021年10期
关键词:私钥公钥区块

林孟晨,冯 勇,付晓东

(昆明理工大学 云南省计算机应用重点实验室,昆明 650500)

1 引 言

随着智慧医疗的发展,医疗领域不断信息化,医疗数据的增长呈井喷式增长.电子医疗记录的保存和共享成为医院及其他医疗机构必经之路.经IDC Digital的调研,截至2020年,我国由医疗服务所产生的费用已达到40万亿GB,是2010年的30倍.而且电子医疗记录保存的时间久、来源广泛,这对现有的医疗共享体系带来不小的挑战.由于以前每家医疗机构的电子医疗记录存在信息“孤岛化”,都没有统一的存储标准,导致现有的海量医疗数据缺乏统一的融合标准和管理平台;而且,现有的医疗体系中,患者几乎都不能参与其医疗记录的管理中,无法实现病人可控的个性化隐私保护;同时,医疗数据作为典型的敏感型隐私数据,在医疗大数据时代会受到形式广泛的攻击,这对数字签名医疗信息的溯源愈加困难[1].

在当前的医疗信息共享方面,大部分机构采用的都是中心式数据存储和共享技术,通过集成独立数据源来实现电子医疗记录的共享[2].但实践表明,传统集中式的共享方法不能很好地适应当今复杂的电子医疗环境,而且效率也十分低下.并且,集中式存储方式容易遭受数据丢失、更改等攻击,不能保证共享的医疗记录安全可信.同时,现有的共享系统对医疗信息的隐私访问控制管理不严密,权限划分不明确,导致无法保障患者医疗记录共享时的隐私保护.

区块链的去中心化、不可篡改等特性更契合当前分布式安全存储的趋势[3].医疗记录在上传后无法删除和更改,确保了共享的医疗记录的唯一性和准确性.本文提出了一种在联盟区链上基于环签名的电子医疗记录共享模型,为当前的医疗系统共享模型提供一种新思路.利用区块链的不可篡改性和环签名的匿名性打造一个可信、高效、智能的医疗记录共享平台,解决了在共享信息的同时保护隐私敏感部分的问题.

目前对基于区块链的隐私保护基本停留在数据存储阶段和共享阶段割裂的阶段.文献[9]提出了患者医疗记录在基于区块链的存储系统中安全上传及存储的可行性.文献[11]提出了在医生为患者就诊的同时,利用基于区块链的共享系统实现医疗记录的安全共享模型.不过这些模型均不能同时实现患者医疗记录的上传、存储及数据共享等功能.本文提出的电子医疗记录的隐私安全共享模型,不仅可以实现以上功能,还可以让患者作为记录管理主体,自行决定是否上传及共享本人的医疗记录.本模型加入了环签名技术,在透明公开的区块链环境增强用户共享电子医疗记录的安全系数,而且通过实验分析可得,环签名的加入也不会大幅度降低区块链的执行效率.

上述说明本模型可以融合电子医疗记录的安全存储及共享功能,还能够在增加共享安全系数的同时保持与传统区块链相当的执行水平,保证了医疗记录共享的安全性及时效性.

2 相关工作

2.1 环签名技术

环签名(Ring Signature)是一种数字签名方案,最初由Rivest等人提出,环签名是一种简化的群签名,其中只有环成员没有群管理者,而且不需要环成员间的合作,用公钥集代替特定的公钥进行有效性验证[4-6].环签名的实质为n个公钥中隐藏自己拥有私钥的那个公钥,具体应用在于区块链上隐藏交易发送人的地址或者公钥.在如图1的环签名实现机制中,签名由一定的规则组成一个环,签名者可以用其他环用户的公钥和自己的私钥进行签名,不用征得其他环成员的同意,然后验证者通过特定的验证方式来检查签名,验证者是知道该签名来自这个环,但不确定来自哪个签名者,确保了区块链中只有该私钥持有者即签名者有资格查看数据的安全性[7].

图1 环签名实现机制

区块链作为透明的公共记录账本,为医疗区块链的隐私数据共享提供了新思路.本模型采用环签名的交易签名方案保证用户的无条件匿名,从而保护了用户的隐私.

2.2 医疗区块链

利用区块链技术进行保存EMR,病人本人就是医疗数据的真正掌控者,而不是被某家医院或其他机构所占有.对于普通居民而言,从出生开始就可以为本人做好健康信息数字化档案,将来无论迁居到哪里,都可以通过区块链跨院就诊.区块链技术能够实现一种全新的数据管理和信息组织、传播形态.每个人都能够自主掌握本人的健康信息,这不仅有助于保护病人隐私,也增强病人使用医疗数据的自主性,实现居民医疗信息的共享和医疗的去中心化[8].

随着移动互联网和云计算的发展,基于云平台建设的区域性电子健康平台可以将信息共享范围进一步扩大,减少了居民在不同部门间来回验证所耗费的时间和精力.

区块链技术将基层医疗机构、健康体检、传染病防疫、医院诊疗、医保支付结算等多个系统数据汇总串联起来,以居民电子健康档案建设为基础,延伸其它系统的数据链接,进一步扩充居民健康档案内容信息.通过基于区块链加密合约机制,可以延伸多个相关单位和部门的节点数据端口,链接医院内外部数据.患者健康档案通过分散式记账原理,可以由多家机构或医院保存记录,经过患者本人授权后方可浏览和使用,其访问权限可以通过公共密钥和私人密钥分级分层管理[9-11].

此外,在医药产品和医疗器械追溯管理方面,所有的医药和器械从生产厂家到消费终端,都可以全流程监管,比如可以监管某个大型医疗设备或耗材从申购、审批、招标、审计、采购、验收、领用、固定资产登记入库、使用及维护、报废等全过程情况,甚至包括消费者使用器材或服用某种药物的效果,也可以通过区块链终生监管服务.这些数据的获得完全是凭借去中心化的高效率、低成本的区块链平台.

医疗区块链主要由两部分构成:区块(Block)和交易单(Transaction),其结构如图2所示.一条区块链由一个个记录着前一个区块ID的区块组成,而每个区块又包含了若干个交易单,这些交易单是实际存储医疗区块链数据即电子医疗记录的载体[12].数字签名存储在区块链的区块中,如果本模型中的环签名验证正确且准确对应某个区块的签名,即该区块中的交易单就是索要共享的电子医疗记录.

图2 区块链结构

3 基于联盟区块链的EMR隐私保护模型

图3所示的是EMR系统的时序图,目前基于区块链的EMR隐私保护的数据共享分为3层架构:EMR上传层,EMR存储层,EMR共享层[12].该模型中,电子医疗记录的流动方向及顺序在图中由序号标出.

公有链数据处理速度和吞吐量都很低,而且运行过于依赖代币[13],这将导致参与者交易成本的增加.私有链过于依赖可信中心并且数据容错性低.之所以选择使用联盟区块链保存EMR数据的索引,是因为联盟区块链结合了公有链和私有链的优势.联盟链数具有写入吞吐量高,提供具有隐私保护的数据共享和支持共识协议扩展等优势[14].因为EMR的来源广泛,动态性强以及分布式管理的特点,利用基于区块链的访问控制机制来管理用户权限,查询者的访问控制信息作为唯一的身份标识.

3.1 基于身份的加密和签名过程

本文设定让患者自己上传自己的EMR记录至存储层.第1个原因是患者EMR的拥有者和管理者,有权利选择是否上传及共享自己的EMR记录;第2个原因是,医生在生成EMR记录时,其所在的医疗机构已经存在相关EMR记录,对于该医疗机构而言无需再进行其他上传操作,此时可以利用基于身份的机密协议实现该过程.

为实现EMR上传层中医生和患者之间的基于身份的加密和签名算法,还需要一个额外的公钥加密方案,这个公钥加密方案具有两个特性:

1)当随机数K已知,对于不可忽略的一部分公钥,可以很容易的计算出私钥.

2)有随机数K产生的一些确定的公钥对来计算出随机数K这个问题是困难的然而,RSA公钥加密方案不能以某种方式被应用,因为其不可以同时满足以下的两个条件:

1)如果模数n是用户身份的伪随机函数,密钥生成中心不能将这个n值作为因素计入也不能通过加密指数e来将解密指数d计算出来.

2)如果模数n是普遍函数,并且其种子是来源于它的秘密因子分解,那么任何一个知晓加密指数e以及其相应解密指数d的人都可以通过计算得到这个随机种子.

目前仅仅对于基于身份的签名方案已经有了具体的实现提案.本文中我们又提出了基于身份的加密方案应该,该方案可以避免因传输公钥而导致制隐私泄露的问题.这个签名方案是基于以下的验证条件:

Se=i*tf(t,m)(modn)

(1)

其中m位传送的信息,s、t是签名,i是用户的身份特征,n是两个大素数的产物,e是与ψ(n)互质的大素数,f是一个单向函数.参数n,e还有函数f是由密钥生成中心来进行选择,并且所有的用户在他们的智能卡里都存有相同的n,e以及对于函数f的算法描述.但是关于n的因子分解方式仅能有密钥生成中心知晓.对于用户之间唯一不同的区别就是i的值以及对应i的密钥g不同.g的值由以下共识唯一确定:

ge=i(modn)

(2)

这个g能够密钥生成中心很容易的计算出来,并且如果RSA方案是安全的,那么没有人可以做到对于n的指数型分解.

每一个信息m都会有大量可能的(s,t)签名但是他们的密度非常低以至于随机的查找几乎是不可能找到其中任何一个的.任何一个设定(s,t)其中一个随机的值,然后求解另外一个参数的尝试都会要求指数根的一个分解,但这在计算上普遍被认为上是困难的.然而当g是已知的,即使n的因子分解方式未知对于任何一个消息m产生任何一个签名都存在着一个简单的方案.

为了对消息m进行签名,用户选择一个随机数字r并且计算:

t=re(modn)

(3)

那么签证方案将会被重写为:

Se=ge*ref(t,.)(modn)

(4)

由于e与ψ(n)互质,那么可以在指数上消除相同的因素e:

s=g*rf(t,m)(modn)

(5)

计算出来的s用作基于身份的签名,此时的身份签名可以用作在共享环节中环签名的私钥.如果计算出来的环签名与签名者对应的私钥所对应的签名相等,则说明查询者身份合法且真实,可以进行EMR的共享.

3.2 RTN和ATN的选择

在EMR存储层中,要从联盟区块链的矿池中进行投票选举.排在前30名的作为RTN,在共享层中充当完整节点进行挖矿操作;排在之后的20个节点作为ATN,用来审计RTN中是否存在不诚实节点.

在联盟区块链中采用DPOS共识机制,区块是由被社区选举出来的可信账户来创建的,可信账户是得票数排行在前101位的受托人[15].DPOS机制类似于股份制公司,普通股民进不了董事会,投票选举代表即受托人代他们做决策.这101个受托人可理解为101个矿池,这101个矿池的权利是完全相等的.这些代表矿池如果利用权利恶意修改数据,会被选民立刻踢出整个系统,而后备代表可以随时顶上去.

本文使用安全电子选举中带有两个中央机构的投票协议.这个协议中一个是中央合法机构(Central Legal Authority,CLA)来证明投票者,另一个是单独的中央制表机构(Central Tabulating Facility,CTF)来计票.在存储层中,该协议可以保证101个代表节点可以在互不干扰的情况下进行投票,要求得到一个有效数字,且没人只有一次有效投票的机会.CTF还会保留一张有效数字接收者的名单,以防有人试图改票[16].

由以上过程选出选出的RTN作为环签名过程中的环成员,以便找到EMR索引;则ATN作为签名签证者,检测是否存在不诚实节点.如果检测出不诚信节点的存在,则有ATN中的最高分节点充当RTN,在矿池中重新选举一个RTN节点.检测出的不诚实节点将不再具备选举资格.

3.3 基于环签名的EMR存储

设定患者的EMR记录由医生上传,如果通过了环签名的验证,则将上传的EMR数据存储到该共享模型中,否则上传失败,需要重现上传.

在医疗区块链隐私数据共享模型中,对于没有交易记录的用户即第一次使用该共享模型的用户,将自动发起部署合约的操作,进而生成交易操作.已经处于医疗区块链共享模型中的用户当满足预设的条件时,触发预设环签名指令,过程如下:

首先定义一个hash函数,这个hash函数的输入是待签名的消息m和椭圆曲线上的一个点A,即Hash(m,A).该希函数和椭圆曲线一样,是这个签名和验证签名体系的前提[17].该hash函数一个参考实现为:将m和A的字节数据拼接,然后用传统的hash函数,得到一个值,然后对椭圆曲线上有限群的阶N取模.

签名者对消息m进行签名,但又不想公开签名的同时,让别人知道自己的确切身份,所以利用环签名将自己隐藏在一群环成员中,为了更好地隐藏自己的公钥,最好选择该模型之前出现或使用过的公钥,如果签名者藏在新用户中,会很容易被识别.于是,签名者找来n-1个其他环成员的公钥,并编好序,将自己的公钥插入其中,共同组成一个包含n个公钥的集合.假设这n个公钥为:

pk0,pk1,pk2,…,pki-1,pki,pki+1…,pkn-1

其中,pki为签名者的公钥.

签名者随机生成n-1个随机数:

S0,S1,…,Si-1,Si+1,…,,Sn-1

分别与除pki以外的n-1个公钥一一对应.这一步没有随机生成Si,是因为后面会通过计算得到.

签名者随机生成一个数k,并计算k*g的值.令hi为由生一个公钥pki-1和待签名消息m计算出来的hash值,在这里假设:

k*g=Si*g+hi*pki

(6)

由(6)式可得,如果拥有公钥pki和私钥ski,并且已知hi和k,就可以反向求出Si.接下来引入一个式子:

hx=Hash(m,Sx-1*g+hx-1*pkx-1)

(7)

等式(7)是一个递推式,由这个递推式可得,已知第x-1个公钥对应的随机数Sx-1和hash值hx-1,求下一个公钥对应的hash值hx.不过值得注意的是,当x=0时,x的上一个为n-1,因为下标也要对n取模.

由(6)式可以直接计算出hi+1的值:

hi+1=Hash(m,Si*g+hi*pki)

=Hash(m,k*g)

(8)

不过此时暂时还不知道Si和hi的值,不过后面计算得到hi后,可以由k,hi+1和hi求出Si.紧接着,依次计算hi+2,…,hn-1,h0,…,hi-1,hi:

hi+2=Hash(m,Si+1*g+hi+1*pki+1)

hn-1=Hash(m,Sn-2*g+hn-2*pkn-2)

h0=Hash(m,Sn-1*g+hn-1*pkn-1)

h1=Hash(m,S0*g+h0*pk0)

hi=Hash(m,Si-1*g+hi-1*pki-1)

计算得出hi,由于拥有pki的签名者的私钥是已知的,计算出hi后,(6)时可写成:

k*g=Si*g+hi*ski*g

(9)

即:

k=Si+hi*ski

(10)

最后,待签名消息m的环签名数据为:

Signature={h0,pk0,…,pkn-1,S0,…,Sn-1}

3.4 EMR共享层获取用户的身份确认

电子医疗记录的存储是指患者在某医疗机构进行诊疗之后,自愿将其记录M上传至该共享模型,然后模型中的存储服务器会为该记录生成一个签名SIG(M),该签名无任何备份且只存储于医疗记录的存储服务器中.电子医疗记录的共享发生在该模型的联盟成员内部,或者发生在联盟成员与百步用户之间.由SMCB模型的EMR共享层可以看出,若想获取电子医疗记录M,获取用户必须通过身份验证从而得到相应的签名,如果该签名与SIG(M)完全匹配,则说明用户的身份得到确认,可以获取相应的电子医疗记录.获取用户的额身份确认如算法1所示.

算法 1.Authority Check

输入: Authority Signature of Administration

1ProduceAuthority Check(IDa,signature,hash)

2ifHash(IDA)=hash in HashListthen

3returntrue

4elsereturnfalse

5endif

6 recover(signature,hash)→ PublicKey

7ifCheckPublicKey(IDA,PublicKey)==falsethen

8Returnfalse

9endif

10ifCheckPublicKey(IDA,PublicKey)==truethen

11returntrue

12endif

13returnCheckHashList(IDa,Signature)

14endProduce

4 安全性分析

4.1 针对联盟区块链的攻击及防范措施

针对目前常见的区块链攻击,本文对共享模型中联盟区块链作了对应的安全防范措施,如表1所示.

表1 联盟区块链攻击类型及防范措施

1)对于女巫攻击的问题,系统一方面要求节点必须经过认证后才可以加入区块链平台,另一方面,一旦系统在正常运行过程中,外部节点就无法加入.因为联盟链不像公有链那样任何节点都可以加入链中并参与决策,可以确保恶意节点无法像公有链那样随意加入节点,避免女巫攻击的产生.

2)重放攻击的主要特征是攻击者通过劫持已经被链上节点认可的数据包进行二次发送,以达到破坏区块链数据的目的.设定重放攻击,在每个节点发起交易时,均会产生一个全局递增的顺序号,并且每次均会对顺序号进行验证,以确保写入区块的交易从未发生过,从而保障数据安全.

3)虽然在创世区块[18]创建以来,区块链几乎没有受到过51%攻击.不过在区块链建立之初,其链的规模比较小的时候,51%攻击发生的概率还是挺大的.不过现在针对51%攻击还没有具体的解决办法,最直接有效的办法就是等待,即在EMR共享模型中设定一个阈值,当联盟区块链中的代表节点区块个数超过这个阈值的时候,再让EMR共享模型去进行对外服务操作.这样可以有效避免51%攻击的发生.

4.2 环签名安全性分析

该模型选择使用环签名,是因为一个安全的环签名可以满足无条件匿名性、不可伪造性和正确性等特性[19].

1)无条件匿名性

攻击者无法确定签名是由环中哪个成员生成,即使在获得环成员私钥的情况下,概率也不超过1/n.外部攻击者在不知道任何成员私钥的情况下,即使能够从一个产生环签名的随机预言者那里得到任何消息m的签名,他成功伪造一个合法签名的概率也是可以忽略的.

2)不可伪造性

环中其他成员不能伪造真实签名者签名,外部攻击者即使在获得某个有效环签名的基础上,也不能为消息m伪造一个签名.

而且,攻击者从k*g=Si*g+hi*pki等式中获取的A点是一个椭圆曲线上的离散点事非常困难的,可以认为签名者的私钥是非常安全的.

3)正确性

=Hash(m,Sn-2*g+hn-2*pkn-2)

=Hash(m,Sn-2*g+Hash(m,Sn-3*g+hn-3*pkn-3)*pkn-2)

=…

=Hash(m,Sn-2*g+Hash(…+Hash(m,S0*g+h0*pk0)+…)*pkn-2)

=Hash(m,Sn-2*g+Hash(…+h1+…)*pkn-2)

=…

=Hash(m,m,Sn-1*g+hn-1*pkn-1)

=h0

因此,可以使用上述关系案模型中的方法验证环签名方案的正确性.

4.3 模型安全及效率分析

不诚实节点表示该节点试图恶意攻击节点.利用环签名用户进行挖矿的时候,选择多个节点而不是只选择一个节点充当代表节点,是因为各个节点之间互不通信,可以降低被攻击节点欺骗的概率.

假设不诚实节点占所有完整节点的c%,诚实节点的挖矿结果均为一致的且完全节点用户的选择是随机的,那么可以得出如下结论,某签名者被欺骗的概率为(c%)n.假设该系统中不诚实节点的比例分别为20%、30%和50%,那么签名者被欺骗的概率与环签名的个数n的关系如图4所示.

由图4可以看出当系统中的不诚实节点的几率增高时,节点被攻击的概率也会因此增大.不过在不诚实节点比例一定的情况下,节点被攻击的概率会因为n值得增大而减小,其中n为环签名中环成员的个数.所以可以得出结论,在RSCB模型的联盟区块链中,利用环签名,节点被攻击的概率可以忽略不计.

图5表示的是在联盟区块链中加入环签名生成区块时间的对比,从图中可以看出,在联盟区块链中加入环签名生成区块的时间趋势与未加入环签名的模型基本相同.说明基于联盟区块链的电子医疗记录共享模型没有因为环签名的加入变得效率低下.

图5 生成区块时间对比

从图4和图5可以得出结论,环签名的加入使得原来的模型变得更加安全可靠,且区块链执行效率也基本没有因此而降低,所以,在基于传统区块链的共享模型,加入环签名可以保证不影响执行效率的前提下保证了电子医疗记录的安全共享,也可以甄别查询用户的身份是否合法.上述说明本模型可以融合电子医疗记录的安全存储及共享功能,还能够在增加共享安全系数的同时保持与传统区块链相当的执行水平,保证了医疗记录共享的安全性及时效性.

5 总结与展望

在当今大数据的时代,医疗记录规模也呈现井喷式的增长,日益复杂的互联网环境给电子医疗的保存于共享带来不小的压力.本文提出了一种在联盟区块链上基于环签名的电子医疗记录共享模型,在解决了大量医疗记录信息共享的同时也保证了其隐私的保护,并且让患者自己对其电子医疗记录是由上传及共享有了自主控制权.未来的研究可以将区块链和智能合约相结合,保证医疗记录信息的可信度和权威性,为电子医疗记录共享模型提供更智能的服务.

猜你喜欢
私钥公钥区块
比特币的安全性到底有多高
程序员把7500枚比特币扔掉损失巨大
《红楼梦》的数字化述评——兼及区块链的启示
神奇的公钥密码
一场区块链引发的全民狂欢
区块链助力企业创新
区块链投机者
国密SM2密码算法的C语言实现
基于身份的聚合签名体制研究
一种公开密钥RSA算法的实现