APP下载

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

2021-11-13郑志勇

自动化学报 2021年9期
关键词:病历共识代理

张 磊 郑志勇 ,2 袁 勇,3

1.中国人民大学数学学院 北京 100872 2.中国人民大学金融计算与数字工程教育部工程研究中心 北京 100872 3.中国科学院自动化研究所复杂系统管理与控制国家重点实验室 北京 100190

电子医疗病历(Electronic health record,EHR)存储着病人的诊断信息和治疗信息,有助于提供便利的健康记录存储服务.对于严重疾病或者慢性疾

病,病人就诊时,如果医生能够看到先前病史,就可以综合之前的诊断及治疗效果,对病情进行更全面、准确地分析,为病人提供更加高效的治疗方案.同时,对于重大突发传染病,EHR 的共享也可使来自各个地区的优秀医疗团队对疫情态势进行全方位、准确和快速地研判,提高处置效率和公共医疗健康水平[1].

然而,目前不同医院之间的数据互操作性相对较差,医疗数据普遍存在数据孤岛问题.电子病历数据大多是由医院掌握,病人对自己病历的使用情况并不完全知情.EHR 中存储着病人的个人信息和病历,一旦受到攻击,将会导致病人隐私等敏感信息泄露,引发安全风险及医患矛盾[2].因此,EHR 共享时的数据及身份隐私保护至关重要.

为实现不同医院间医疗数据的安全共享,同时病人能够对数据进行访问控制,一些学者提出利用基于密文策略的属性加密方案(Ciphertext-policy attribute-based encryption,CP-ABE)[3]对病历进行加密,将密文存储于云服务器上,实现EHR的共享.CP-ABE 方案能实现细粒度的数据访问控制和加密,然而,云服务器通常是半可信的,其会执行用户的命令,但仍对用户的信息感到好奇.在监管缺失和遭受特定攻击时,云可能会篡改、丢失或泄露用户的数据.

区块链作为比特币的核心技术,具有去中心化、数据不可篡改、可追溯、不可伪造、可编程等性质[4-6],在特定的场景下,也可以对区块链上的数据进行隐藏,因此可用于实现安全和可信的EHR 管理[7-10].由于区块链现阶段存在性能瓶颈,而EHR 中通常包括大规模、跨媒体的健康数据,例如CT、X 光等医疗影像数据,因此单纯使用区块链存储和共享EHR 的效率不高,迫切需要将云存储和区块链相结合,以便优势互补,实现安全和高效的EHR 共享.

本文提出了云链协同、病人可控的EHR 安全共享方案.该方案采用链上与链下混合存储方式,利用CP-ABE 方案来加密EHR 数据,使得病人可以自主可控地定义访问策略,实现细粒度的访问控制.病人将加密EHR 数据存储于云服务器、并利用区块链存储数据的Hash 值及访问策略,从而保证数据的真实性和完整性,方案支持用户对密文进行多关键词搜索,以提高搜索效率及准确性.各级医院形成联盟区块链,改进实用拜占庭算法,利用聚类算法将节点进行分类,在病人将数据上传至区块链及数据用户向区块链访问病历摘要时,节点间可尽快达成共识,改进的共识算法支持节点动态加入及退出区块链.考虑到数据用户的身份不是一成不变的,本文提出了属性更新子协议,以保障数据用户身份变化时病历的安全性.

本文其余部分安排如下:第1 节介绍相关工作和研究现状;第2 节描述了EHR 数据共享模型的设计目标与模型框架;第3 节给出了模型的关键步骤和算法设计;第4 节阐述用户搜索访问更新子协议;第5 节讨论模型的性质;第6 节总结全文.

1 相关工作

近年来,EHR 逐渐代替纸质病历,一定程度上解决了病人在某家医院就诊时,可能因为纸质病历、检查单等丢失,需要重复做一些健康检查的困扰.目前的问题是:不同医院之间的EHR 数据共享非常少,病人在转院治疗时,其他医院无法看到病人之前的病历数据.因此,EHR 数据共享成为公共健康和智慧医疗领域的热点.

现有文献中,Alshehri 等[11]提出将EHR 数据存储在云上,利用CP-ABE 方案来进行加密,只有具有相应属性的用户才可以解密密文,可实现安全存储及细粒度的灵活访问控制.Yang 等[12]提出了支持连接关键词搜索及定时启用代理重加密功能的云上健康数据分享方案,允许用户在指定的时间内进行病历的搜索;数据拥有者可控制用户搜索和解密的时间,但该方案计算能力较低,存储开销较大.Huang 等[13]提出基于欧几里得相似性距离的推荐协议,为病人推荐合适的医生,以便减少病人的隐私泄露,同时利用基于属性的条件性代理重加密方案,提出了基于云的细粒度隐私保护的病历共享方案.但实际应用场景中,数据用户的属性并非一成不变的,屠袁飞等[14]利用属性加密,对EHR 进行加密存储到云服务器上进行共享,同时利用版本号标记和代理重加密方案实现用户属性的撤销,保证了在用户属性发生变化时密文的安全性.为提高病历共享的效率,Rao[15]提出了安全的基于属性的签名及加密的病历分享方案,相比之前存在的方案,该方案支持更短的密文,需要更少的双线性对计算.

上述研究尽管也关注云环境中数据共享的安全性,但因云是半可信的,将数据存储到云服务器中可能会面临数据丢失、篡改等风险.区块链技术可以较好地解决该问题,保障数据的完整性和真实性.区块链是一个不可篡改的分布式账本,特定的节点间通过共识,将数据记录上链[16-17],进行数据审计,防止数据被更改.因此,不少学者将区块链技术用于数据分享中,以期保障数据的真实性、完整性和不可篡改性[18-22].

Ekblaw 等[23]利用区块链技术设计了去中心化的电子健康病历分享系统,首次提出利用智能合约实现权限管理.Xia 等[24]提出了MeDShare,用于解决在共享医疗数据时缺乏信任的问题.该系统基于区块链,为大数据实体之间在云存储库中共享的医疗数据提供数据来源、审计和控制,采用智能合约和访问控制机制,有效地跟踪数据的行为,并在发现用户违反数据权限时撤销违规实体的访问权.薛腾飞等[25]提出了基于区块链的医疗数据共享模型,将医疗机构划分等级,使用改进的委托权益证明共识机制安全、快捷地进行数据共享.Shen 等[26]提出Medchain,将病历内容放在点对点的网络上,摘要等部分放在区块链上,该方案利用智能合约管理数据的访问权限,但使用智能合约成本较高.刘格昌等[27]提出了基于可搜索加密的数据隐私保护机制,将该系统应用于个人医疗数据区块链中,使得隐私数据搜索更加方便.Wu 等[28]提出了将病人敏感信息进行数据脱敏,然后将其加密存储到区块链和分布式文件存储系统中.张超等[29]提出Medical chain,利用实用拜占庭容错算法达成共识,防止医疗数据被篡改.罗文俊等[30]将分布式密钥生成技术和基于身份的代理重加密技术相结合,设计了数据安全共享协议,利用委托权益证明共识算法选取代理节点,重加密EHR,但此方案只适合于单对用户间进行数据共享,不支持一对多的数据共享.

通过分析和比较现有的EHR 共享方案可知,该领域研究虽然取得了一定的成果,但还有一些可以改进的地方.例如,单独使用云服务器进行数据存储时,由于云是半可信的,可能会造成数据篡改或者泄露等安全性问题.单独使用区块链时,则无法克服因存储数据的规模过大造成效率过低的问题.因此,有必要将区块链和云存储技术相互结合,实现云链协同的EHR 数据共享.此时,数据以何种方式存储更加安全,病人如何进行数据访问控制,数据用户如何对密文进行高效的搜索,如何使得模型兼具以上良好的性质,如何提高共享的效率,都是值得进一步研究的问题.

为此,本文在现有文献[31]的基础上提出了病人可控的云链协同的EHR 共享模型.病人将EHR数据加密后存储在云服务器上,将数据摘要及访问策略存储在区块链上,这样既能防止云服务器篡改数据、方便进行数据完整性审计;同时又能减轻区块链的存储压力,使得方案更具可扩展性.本文利用聚类算法,改进实用拜占庭算法,提高区块链中节点达成共识的效率.利用CP-ABE 方案加密病历,只有满足病人设置的属性访问策略的用户可访问数据,使得一对多的数据分享能够实现细粒度的访问控制.对于加密后的病历,支持利用多关键词搜索,以提高搜索效率及准确性.在实际场景中,用户属性的变化对于密文安全性有很大的影响,因此本文提出了用户属性的动态更新下数据安全共享的方案.本文模型既解决了EHR 安全存储的问题,同时病人可以管理病历的使用情况,使得数据共享更加高效、安全.

2 EHR 数据共享模型

本节首先给出EHR 数据共享模型的设计目标,然后重点阐述模型的逻辑框架与运行流程.

2.1 模型的设计目标

该模型旨在达到如下设计目标:

1)病人可控的数据共享.针对病人无法完全掌握其EHR 使用情况的问题,本文旨在设计病人可控的EHR 共享模型,即由病人自主决定其病历的访问权限.

2)隐私保护.EHR 存储着大量隐私信息,因此保障数据的保密性及完整性非常重要.本文旨在结合密码学和区块链技术,通过加密及属性分配等方式保护病人及数据用户的隐私信息,同时保障数据在共享过程中的完整性与可审计性.

3)细粒度访问控制.利用CP-ABE 方案,病人可自主定义访问策略,确保数据可达到细粒度的访问控制.

4)安全搜索.本文模型旨在构建安全的可搜索加密方案,数据用户利用多关键词搜索算法,生成关键词Token,进行搜索.数据用户身份在满足病人设置的访问策略时,才有权访问其历史病历.窃听者无法猜到关键词.即使其猜到关键词,因其身份不符合病人设置的访问策略,仍然无法得到数据密文.

2.2 模型的逻辑框架与运行流程

本文提出将区块链与云服务器相结合,实现数据的链上(区块链)+ 链下(云服务器)混合存储;同时,利用CP-ABE 方案和多关键词可搜索加密方案,实现细粒度的访问控制及高效的数据搜索和安全共享.如图1所示,基于区块链和云服务器的EHR 共享模型包括如下主要角色,即证书机构(Certificate authority,CA)、属性机构(Attribute authority,AA)、联盟区块链(Blockchain,BC)、云服务提供者(Cloud service provider,CSP)、数据拥有者(Data owner,DO)以及数据用户(Data user,DU).

图1 EHR 数据共享模型的逻辑框架Fig.1 The logic framework of EHR data sharing model

各个角色的具体介绍如下:

1)证书机构(CA):负责进行全局设置,设置系统的主公钥和密钥.生成DO 和CSP 的公私钥对.本文假设CA 完全可信.

2)属性机构(AA):例如医院、保险公司或者医疗研究机构等,负责核查DU 的身份,为合法的DU 生成私钥.

3)联盟区块链(BC):存储加密数据的摘要,验证DU 的请求.

4)云服务提供者(CSP):负责存储加密数据及访问策略.

5)数据拥有者(DO):即病人,负责加密、存储数据,生成数据的访问策略.

6)数据用户(DU):例如医生、保险公司经理等希望查看病人病历的用户.

该模型的运行流程如下:

步骤1.全局设置.该算法由CA 执行,包括设置全局公共参数、公共属性密钥、系统主公钥和主密钥.

步骤2.密钥生成.CA 验证AA 的身份,为合法的AA 分发身份.CA 验证DO、CSP 的身份,为其设置公私钥对.当DU 希望加入系统时,发送注册请求给AA,AA 为合法的DU 分配身份uid及属性Aaid,uid,同时为其计算私钥,如图1 中①和②所示.

步骤3.数据加密.DO 运行加密算法,包括以下3 个子步骤:

1)关键字索引index 产生:DO 为文件选择关键词,设置关键词索引index;

2)文件加密:从密钥空间随机选取密钥kθ,对文件进行加密;

3)加密kθ.

步骤4.数据存储.如图1 中③和④所示,为克服区块链的空间限制和性能瓶颈,提高区块链的可扩展性,同时防止CSP 篡改数据,本文提出将数据进行链上、链下混合存储的结构,如图2所示.

图2 数据混合存储结构Fig.2 Hybrid structure for data storage

DO 将原始医疗数据加密上传至CSP,将数据摘要等存储到区块链上,区块链中的Merkle 树结构[16]可以用来验证数据的完整性与真实性.医疗数据块和摘要数据块存储内容如图3(a)和图3(b)所示.

图3 医疗数据块和摘要数据块Fig.3 Medical data block and digest data block

DO 对医疗数据进行加密,得到密文CT,对其进行签名,得到SigDO.同时,计算其Hash 值,然后将密文、Hash 值及SigDO,一起发送给CSP.CSP接收到签名之后,验证DO 的签名,计算CT 的Hash 值,如果与DO 发送来的Hash 值相同,则证明接受到了正确的密文,向DO 返回1 及文件位置;否则返回0.

步骤5.数据访问.当DU 希望访问数据时,使

用可搜索加密算法,输入公钥、关键词集合,产生搜索Token.DU 向区块链主节点发送查找请求,如图1 中⑤所示.

节点收到请求后,运行匹配算法,验证是否有关键词索引index 可以匹配上数据用户产生的Token.如果搜索成功,表明数据文件未被删除,区块链返回相应的摘要数据块给数据用户,否则返回异常提示信息.

该算法由DU 执行,DU 接收到摘要数据块后,首先计算出内容密钥kθ,解密出文件位置,向CSP发出数据请求,如图1 中⑥所示.如果DU 的属性集合满足DO 设置的访问策略,CSP 会输出相应的密文,否则返回异常提示信息.

步骤6.解密.DU 首先计算密文的Hash 值,与区块链存储的Hash 值进行比较,验证文件是否被篡改.如果文件没有被篡改,则首先解密出内容密钥kθ,再利用内容密钥解密文件.

3 模型的详细构造及算法设计

本节介绍模型的详细构造.

3.1 模型的全局设置

CA 进行全局设置,产生系统公钥和主密钥.具体步骤如算法1所示.

算法1.模型的全局设置.

输入.安全参数,属性集合.

输出.全局公共参数GP,公共属性密钥PAKx,公钥PK,主私钥MK.

3.2 密钥生成

3.3 文件加密存储

3.4 数据访问

3.5 解密

DU 接收到区块链节点发送的交易单.如果

3.6 模型的共识算法

本文基于实用拜占庭共识算法(Practical Byzantine fault tolerance,PBFT)[32],改进陈子豪等[33]提出的KPBFT 共识算法,全国各级医院间形成联盟区块链,对于n个医院,随机选择k个聚类中心,作为代理节点,构成代理节点群,对其进行编号,代理节点群中成员轮流成为当值主节点.考虑各个医院间的地理位置、设备硬件、网络延迟等因素,进行聚类.共识结构如图4所示.

图4 共识节点结构Fig.4 The structure of the consensus nodes

共识过程如图5所示.首先每一类节点间达成共识,然后代理节点群间再进行共识,最后达成共识.在一段时间后,更换聚类中心,重新进行聚类.

图5 改进的PBFT 算法Fig.5 Process of improved PBFT

共识过程描述如下:

1)请求阶段.当病人DO 要上传摘要数据块,或数据用户DU 想访问病历时,首先向区块链提出请求.本文改变PBFT 中要将消息发送给所有节点,只发给代理节点.如果请求不是代理当值主节点收到的,先在代理节点群中广泛转发.如果是代理当值主节点收到的,其首先验证交易的合法性.若不正确,直接丢弃.否则,对其进行编号,放入列表中,广播到代理节点中其他成员.在这个过程中,节点需要验证交易中CSP 的签名是否正确,访问策略与CSP 中的访问策略是否相同.

2)子节点共识过程.如交易合法,代理节点将收到的交易广播到其子共识节点群中.子节点群间进行预备、准备、确认、回复阶段,将执行结果发送给其代理节点.

3)代理节点群的共识过程.代理节点间执行共识过程,因代理节点只需将自己负责的子节点群的消息相互广播即可,所以代理节点间通过确认、回复阶段即可,在收到别的代理节点值时,节点会验证如果与他计算的值相同,那么广播一个确认消息到代理节点网络中.当节点收到 2f+1(f为系统中拜占庭节点的个数)个确认消息后,向客户端回复消息.

4 用户搜索访问更新

实际应用场景中,DU 的属性并非一成不变的.当DU 的属性发生变化时,为保证文件的安全及搜索的有效性,本文设置了属性撤销及属性添加子协议,协议的具体构造如下.

4.1 属性撤销协议

在CA 更新属性密钥及公共属性密钥,AA 更新DU 的私钥及DO 更新相应的密文后,按照第3.3 节构造中的方法将更新的密文发送给CSP 及区块链节点,重新在区块链上进行存储.在执行完上述操作后,不再拥有相应属性的DU 不能再查看相应属性加密的文件,确保了文件的安全.

4.2 属性添加协议

当DU 新增新的属性y时,为保证DU 能查看相应文件,系统运行属性添加协议,更改DU 的私钥.详细过程如下所示,其余步骤与第3 节相同.

1)DU 向AA 提出申请:新增属性y,AA 验证其身份的合理性,重新计算其私钥为.

3)DU 更新先前属性集为Suid:=Suid ∪{y}.同时更新私钥为SKDU′=(D,D′,D′′,Dx∪y).

执行完上述操作后,DU 凭借其新增属性可以查 看该属性能够解密的相应文档.

5 模型分析

5.1 医疗数据分享模型正确性及安全性分析

本节比较传统的PBFT 算法及改进的共识算法的通信次数.当系统节点为n个时,传统PBFT算法中客户端请求、各节点间预备、准备、确认、回复给客户端通信次数分别为为n次、n-1 次、(n-1)×(n-1)次、n×(n-1)次、n次,总通信次数为 2n2次.

改进的共识算法中,利用将节点进行聚类,通信次数计算如下:因将n个节点分为k类,每一类中有n/k个节点.首先,客户端向代理节点请求及代理节点间预备通信次数为k次,子节点间通信次数为 2n2/k2次,然后代理节点间进行确认的通信次数为k×(k-1)次,代理节点回复客户端次数通信次数为k次,求和得总次数为:2n2/k2+k2+k次.该函数图像如图6所示(为使趋势变化更清晰明了,做图时对该函数进行了取对数运算).

图6 改进共识算法的通信次数Fig.6 The communication time of improved PBFT

本文部分工作是基于Sun 等[31]的模型,在其基础上引入区块链技术实现医疗数据的分享,关键词搜索的正确性及文件解密的正确性均已在该文献中加以证明.

云服务器是半可信的,它会执行用户的请求,但也对用户的隐私数据很感兴趣.在本文模型中,其存储的是密文文件,云服务器无法获得解密密钥,所以无法解密文件,因此数据的隐私可以得到保障.

DO 定义了访问策略,只有当DU 的属性满足时,才可解密出内容密钥,进行文件位置及文件密文解密,因此身份不符的DU 无法获得DO 病历.同时,本文将电子病历的Hash 值和DO 定义的访问策略记录在区块链上,DU 可通过区块链验证数据的完整性,进行数据审计,防止CSP 篡改数据.一旦云服务器非法删除或者篡改数据,DU 在得到数据后,与区块链中存储的Hash 值进行对比,因Hash 函数的抗碰撞性,所以会很容易发现不同,DU 会向CSP 发送错误报告.

DO 向区块链存储数据及DU 向区块链请求查询文件时,可以通过改进的共识算法确保存储服务及查询服务顺利实现.

DO 利用公钥T对密文及交易进行签名,发送给CSP 及区块链节点进行验证时,以下两式的正确性SigDO(CT)T=H(CT)及SigDO(trans)T=H(trans)可由RSA[34]算法的正确性保障.

在向CSP 发送加密病历时,DO 使用其私钥进行签名,而其公私钥对是由完全可信的CA 来分配和保存,所以DO 的身份也是保密的.DU 在进行数据访问时,利用AA 发送的独特的身份和属性集合,可以保持其真实身份的安全性.

在多关键词搜索方案中,因选用随机数产生的关键词索引,所以窃听者不能够猜到关键词,无法产生对应的Token,因此多关键词搜索方案是安全的.

5.2 改进的共识算法分析

5.2.1 算法支持成员的动态变化

改进的PBFT 算法可以实现成员动态加入和退出的功能,因为每一类的成员由聚类中心的代理节点管理,当成员退出时,代理节点将该节点从广播列表中删除.当成员加入时,计算其与哪个代理节点距离较为接近,将其加入该类子群中,使得成员动态变化时不用再进行整个网络的初始化.

5.2.2 通信次数分析

如图6所示,在系统总节点数增加时,通信次数随着聚类个数的增多而减少.但在聚类次数变大到一定程度时,通信次数没有明显的变化,所以在具体节点数目下,可结合容错性分析,合理选择聚类次数很有必要.

5.2.3 容错性分析

对于改进的共识算法,容错性分析分为代理节点中不存在拜占庭节点及其中存在拜占庭节点的情况.

1)代理节点中不存在拜占庭节点子群中错误的节点不超过其子群总数的

若拜占庭节点均匀分布在每个聚类中,则每个则对最终结果不会产生影响,整个系统的容错为(n-1)/3.

当拜占庭节点集中在某个聚类时,则该代理节点将会产生错误输出,这时在代理共识群中,该结果会被丢弃,该代理节点也会被降级.在这种情况下,系统的容错为.

2)代理节点中存在拜占庭节点

当代理节点中存在拜占庭节点时,该节点可能会篡改其子群的共识结果,导致该区域的投票结果不正确.如果错误的代理节点超过整个系统的,系统会崩溃.否则,系统的容错为.

综上所述,代理节点的选取十分重要.本文随机选取代理节点,未来考虑利用信誉机制及节点间的相互投票,选取更加可信的节点作为代理节点,提高共识效率.

5.3 对比分析

本节采用对比分析的方式,将本文方案与已提出的医疗数据共享方案进行比较,分析模型的优缺点(如表1);另一方面,通过分析目前EHR 共享面临的问题,分析本模型的应对方法(如表2).

表2 当前EHR 共享面临的问题及模型应对的方法Table 2 The problems of EHR sharing and how to deal with the model

表1 从7 个方面将本文与现有研究成果进行比较,可以看出本模型有一定的优势.但本模型仍有需要改进的地方,如可以尝试利用智能合约使得交易过程自动化等.

表1 不同方案之间的比较Table 1 Comparison between different models

6 结论及未来工作

EHR 共享是非常有必要的,不仅使得病人在转院治疗时,病情能够得到全面、综合、准确的诊断,避免病人做一些重复的检查;同时可以增进不同医院间的交流,促进公共医疗领域的不断发展.EHR中包含大量病人的隐私信息,在数据共享时需要保护数据隐私及身份隐私.

为了解决目前不同医疗机构间数据互操作性较差,及病人无法掌握EHR 的使用情况等问题,本文提出病人可控的、云链协同的安全数据共享方案,利用CP-ABE 方案对EHR 进行加密,防止半可信的云服务器窃听数据,同时病人可以自主设置访问策略,达到细粒度的访问控制.该方案将加密数据进行链上、链下混合存储,不仅保证了数据的真实性、完整性及不可篡改性,同时提高了区块链的可扩展性.该方案利用多关键词可搜索加密方案,可提高对密文搜索的准确性和效率.由于用户的属性是不断变化的,因此本文设置属性更新协议,支持用户的属性撤销和属性添加.通过将本文方案与其他方案的比较可知,本文方案在一定程度上具有优势.利用聚类算法,选取代理节点,将各级医院进行聚类,改进PBFT 共识算法.通过对改进的共识算法进行分析及计算,得出其通信次数有所降低,容错性有待提高.在未来的工作中,将不断试验,考虑何种方法选择代理节点更加安全高效,减少达成共识的时间,提高数据共享的效率.同时,将尝试使用零知识证明、同态加密等隐私保护技术进行病人身份及病历的隐私保护.

猜你喜欢

病历共识代理
强迫症病历簿
共识 共进 共情 共学:让“沟通之花”绽放
论思想共识凝聚的文化向度
“大数的认识”的诊断病历
商量出共识
代理圣诞老人
代理手金宝 生意特别好
为何要公开全部病历?
复仇代理乌龟君
村医未写病历,谁之过?