基于联盟链的可搜索加密电子病历数据共享方案
2020-09-08牛淑芬刘文科陈俐霞王彩芬杜小妮
牛淑芬,刘文科,陈俐霞,王彩芬,杜小妮
(1.西北师范大学计算机科学与工程学院,甘肃 兰州 730070;2.西北师范大学数学与统计学院,甘肃 兰州 730070)
1 引言
电子病历(EMR,electronic medical record)使用数字化方式创建、存储和使用个人健康状况和保健信息。传统的EMR 是将数据存储在医院本地服务器,在占用大量设备的同时,也不便于数据共享。云计算可以实现对海量数据的分析处理,提供可靠的数据处理与存储中心,越来越多的医院选择将其EMR 存储到云服务器中,而不是维护一个专门的数据中心[1]。但是,由于数据泄露或未经授权的访问等安全问题,云服务器不能完全被用户信任。EMR 涉及大量的患者隐私信息,因此防止EMR内容被未经授权的用户和云服务器获取是非常重要的。
考虑到云服务器的不可靠性和用户数据的隐私性,需要对数据进行加密后再外包至云服务器。利用可搜索加密技术实现对加密数据的搜索,使EMR 的使用更加便利。但是,医院只允许其授权的用户对云服务器中的数据进行访问,这导致云服务器中数据的使用具有局限性。
为了解决上述问题,文献[2-5]将区块链技术应用于医疗领域,将患者的EMR 数据上传至区块链,实现对EMR 数据的访问和共享。区块链是一个经过验证的、不可变的分布式账本,用于存储EMR记录。此外,该技术跟踪记录所有的交易,保证了数据交换过程中的透明性。因此,用区块链来存储EMR,可以使患者对自己的病历数据的管理更加便利。区块链去中心化和开放的特性使患者能够掌握自己的医疗健康信息,这不仅保护了患者的隐私,也保证了患者对其医疗数据的访问控制。例如,患者可以在自己的EMR 中记录医生的医疗和诊断信息,从而便于之后的诊断。
2 相关工作
随着云计算的飞速发展,云计算中的安全问题日益凸显,因此人们对访问控制[6-7]和隐私保护[8-9]等安全问题进行了一系列的研究。云存储作为云计算中的一部分,既能保证数据安全,又能实现搜索功能。为了解决对密文的直接搜索问题,Song 等[10]首先提出了基于流密码和对称加密的可搜索加密方案,但该方案只允许持有私钥的用户才能对数据进行加密和搜索,不满足人们的实际需求。为解决这一问题,Boneh 等[11]提出了公钥可搜索加密(PEKS,public key encryption with keyword search)方案,即公钥加密与可搜索加密的结合。Wu 等[12]提出一种新的不需要安全通道的可搜索加密(SCF-PEKS,secure channel free searchable encryption)方案,并将其应用至EMR 中以实现对EMR 的共享。可搜索加密实现了从加密数据中检索密文,而代理重加密技术将加密数据共享给更多用户。Shao 等[13]首次提出支持关键字搜索的代理重加密(PRES,proxy re-encryption with keyword search)方案,将PEKS和代理重加密技术结合,实现了第三方授权用户对密文的获取与解密。Liu 等[14]结合属性加密和可搜索加密技术,并将其应用至EMR 中,实现了对EMR数据的存储、模糊搜索和共享。由于医院对云服务器的限制,这些应用于EMR 的方案大多没有涉及不同医院之间的数据共享。
区块链的发展为上述问题带来了解决方案,其去中心化的分布式存储结构适用于医疗数据的共享。Xia 等[15]提出了一种基于许可链的医疗数据共享框架,只允许被邀请和经过验证的用户进行访问。Yue 等[16]提出了一个被称为医疗数据网关的应用程序,将私有链作为云存储的角色进行数据存储,并确保患者拥有和控制他们的医疗数据。Zhang 等[17]通过构造联盟链与私有链,提出了一种基于区块链的安全隐私保护个人健康信息共享方案。
本文以EMR 的安全存储、隐私保护和安全共享为目标,将可搜索加密和代理重加密技术结合区块链应用于EMR,用以实现EMR 在不同医院间的共享和患者对EMR 数据的访问控制。该方案特点如下:1) 方案中EMR 由医生产生,医生将EMR加密后上传至医院服务器,医院服务器将密文哈希值放至私有链,确保EMR 的安全存储;2) 医生使用可搜索加密技术加密关键字上传至联盟链,患者使用其私钥生成搜索陷门发送至联盟链,联盟链负责搜索;3) 联盟链节点使用代理重加密技术对EMR 密文进行重加密,生成EMR 重加密密文,经过患者授权的数据用户可使用其私钥解密重加密密文得到EMR。为保护患者隐私,整个共享过程使用患者的伪身份。
3 预备知识
3.1 双线性映射
定义1令G1和G2为2 个阶为素数q的加法循环群,定义一个双线性映射e:G1×G1→G2,其满足以下性质。
1) 双线性。对于任意a,b∈和x,y∈G1,有e(ax,by)=e(x,y)ab。
2) 非退化性。存在x,y∈G1,使e(x,y) ≠ 1。
3) 可计算性。对于任意的x,y∈G1,存在有效算法来计算e(x,y)。
3.2 困难性假设
定义2计算性Diffie-Hellman(CDH,computational Diffie-Hellman)问题。对于任意a,b∈,给定P,aP,bP∈G1,CDH 问题就是计算abP。
定义3判定性Diffie-Hellman(DDH,decision Diffie-Hellman)问题。对于任意a,b∈,给定P,aP,bP,T∈G1,DDH 问题就是判断T=abP是否成立。
3.3 区块链技术
区块链是通过区块链接在一起的有序记录的列表[18],其本质上是一个分散的数据库,是分布式数据存储、点对点传输、协商共识机制、加密算法等计算机技术的一种新的应用模式。区块链也是一个分布式账本,并使用密码学方法使其不能被篡改。
根据区块链网络中心化程度的不同,可将其分为3 种模式:公有链(public blockchain)、联盟链(consortium blockchain)和私有链(private blockchain)。公有链是完全去中心化、无许可的区块链,任何节点都可进入和获取信息,例如比特币和以太坊。联盟链是部分去中心化的区块链,通常由多个机构共同管理,只有经过机构授权的用户才可以访问。私有链是完全中心化的区块链,由一个中心机构控制访问权限。本文方案中,各个医院在联盟链上进行EMR 数据共享。每家医院拥有自己的服务器和私有链,服务器上存储EMR 密文,私有链上存储EMR 密文的哈希值,多家医院组成联盟并创建一个联盟链用以存储患者EMR 的安全索引。
本文中区块链合法的区块由区块头、区块体、签名和时间戳组成。区块头由4 部分组成:区块ID、区块大小、前一个区块的哈希值和Merkle 树,其中,区块ID 表示每个区块唯一的身份;区块大小显示区块占用的存储空间;前一个区块的哈希值用于链接前一个区块,防止区块链被修改;Merkle 树用于快速归纳和校验区块数据的存在性和完整性。区块体中是交易单(TX,transaction),本文中,私有链区块结构与联盟链区块结构唯一的不同之处是交易单的结构,这部分内容将在第4 节中说明。签名用于验证区块的完整性。时间戳表示区块的生成时间。
4 本文方案
本节介绍基于联盟链的EMR 存储与共享模型及其方案,给出区块链上的交易单结构,并提出安全目标。
4.1 基于联盟链的EMR 存储与共享模型
本文模型中n家医院协商构建一个联盟链,每家医院都拥有服务器和私有链。医院服务器中存储患者的EMR 密文,私有链中存储EMR 密文的哈希值,联盟链中存储关键字密文。图1 为EMR共享系统模型,系统模型中有6 个实体:患者、医生、其他数据用户、医院服务器、私有链和联盟链。图1 中β为就诊号,ca0为电子病历密文,hash(ca0)为ca0的哈希值。
图1 EMR 共享系统模型
患者。当患者去医院就诊时,首先需要注册,医院服务器为其生成就诊号。患者就诊时将就诊号交给医生,作为其对医生的授权。医生对患者诊断后为患者生成EMR,将EMR 加密后上传至服务器进行存储。患者在不同医院就诊时,其EMR 密文的哈希值就存储在医院的私有链中。同时,每家医院将其存储在私有链中的关键字密文发送至联盟链。患者可在联盟链中搜索关键字来获取其EMR,若医生需要,则将EMR 交给医生。
医生。在得到患者授权后,医生对患者进行诊断,为其生成EMR 和伪身份,构建证据,为私有链提供一致性证明,并将EMR 加密后存储至服务器。同时,医生构建包含密文的哈希值、医生身份、患者伪身份、关键字索引和证据的交易单,并将交易单上传至私有链。另外,医生在对患者诊断时,也需了解患者以往的就诊记录,以便得出更加精确的诊断结果。
其他数据用户。当其他数据用户想要获取某患者的EMR 时,需获得该患者的授权。在与其他数据用户和患者交互后,联盟链上节点生成代理重加密密钥,联盟链上节点使用重加密密钥对EMR 密文重加密,生成重加密密文,其他数据用户使用其私钥即可解密。
医院服务器。每家医院都拥有一台服务器和维护服务器的多台客户端,医生使用客户端将患者的EMR 存储在服务器中。医院服务器构建私有链的新区块,用以存储包括病人信息相关的EMR 数据交易单。医院服务器也负责为联盟链构建新区块,新区块构建完成后,其他医院服务器负责验证新区块的有效性。
私有链。每家医院都拥有私有链,医生使用患者EMR 构建交易单并上传至私有链。在搜索阶段,患者发送搜索陷门至联盟链,联盟链搜索后通过私有链身份定位至私有链,获取EMR 密文的哈希值。
联盟链。多家医院协商构建联盟链,医院服务器使用关键字密文、患者伪身份和私有链身份构建安全索引,使用安全索引构建交易单后将交易单上传至联盟链。在搜索阶段,收到患者发送的陷门后,联盟链上节点负责执行搜索,并返回EMR 密文的哈希值给患者。患者可登录医院服务器进行哈希值比对,若一致,服务器返回EMR密文给患者;否则,服务器返回查询失败给患者。同时,联盟链上节点还负责为其他数据用户生成EMR 重加密密文。
4.2 区块链上EMR 交易单结构
私有链上交易单由4 部分组成:病历生成者(医生)ID、病历拥有者(患者)ID、病历关键字索引和病历密文哈希值,如表1 所示。为了保护患者的隐私,病历是以密文的形式存储的。其中,病历拥有者ID 是患者的伪身份,由患者真实身份计算而来。
表1 私有链上交易单
联盟链上交易单由2 部分组成:区块生成者(医院服务器)ID 和安全索引,如表2 所示。医院服务器收集医生发送的关键字密文,利用构建的安全索引创建新的区块。联盟链区块的区块体中不存储原始EMR,而是存储包含关键字密文的安全索引。安全索引Txa由3 部分组成:私有链区块IDb、患者伪IDa和关键字密文ca1。
表2 联盟链上交易单
4.3 安全目标
假设本文方案中医院服务器为半可信的,其可能会尝试解密密文。同时,一些恶意攻击者可能会在传输期间拦截、修改或伪造EMR 数据。外部攻击者可能入侵医院服务器或客户端,窃取存储的文件。考虑上述威胁模型,本文方案的安全目标如下。
数据的机密性和完整性。无论患者的EMR 是存储在医院服务器还是通过公共渠道进行传输,其他实体都无法读取或修改患者的EMR。通常数据的机密性和完整性是通过加密和签名来保证的。本文方案通过使用私有链存储EMR 和联盟链存储关键字来保证数据的安全性。
访问控制。为防止未授权用户对EMR 数据进行访问,对EMR 的访问受控制,使数据访问活动始终在患者和医院的参与和监控之下进行。并通过对密码原语进行标识、身份认证和授权来实现访问控制。
安全搜索。当医生想要获取患者的历史EMR数据时,患者生成搜索陷门对EMR 进行搜索。在搜索过程中,只有患者才能生成搜索陷门从而进行搜索。同时,搜索过程中使用患者的伪身份,窃听者也无法推断出患者的真实身份。
隐私保护。由于EMR 中包含患者的一些隐私敏感信息,因此共享EMR 的同时也要保护患者的身份隐私。此外,原始的EMR 不能透露给非法实体。
4.4 基于联盟链的EMR 存储与共享方案
基于联盟链的EMR 存储与共享方案可分为3个阶段:系统建立、数据加密与存储、数据搜索与解密。
阶段1系统建立
本阶段分为初始化和密钥生成2 个步骤。
阶段2数据加密与存储
本阶段分为患者注册、数据加密、私有链交易单生成和联盟链交易单生成4 个步骤。
阶段3数据搜索与解密
本阶段分为陷门生成、搜索和解密3 个步骤。患者就诊时,为了进行更精确的诊断,医生需查看患者的历史诊断记录。患者生成搜索陷门T,发送T和IDa至联盟链。联盟链上节点运行搜索算法获取EMR 密文的哈希值并将其发送给患者,患者可通过登录医院服务器获取EMR 密文。患者得到密文后,使用其私钥进行解密,得到EMR 明文后交给医生查看。除了患者可获取其EMR 外,经患者授权的其他数据用户也可获取患者EMR,在解密步骤中分别叙述。
4.5 正确性分析
本文的正确性分析如下。
1) 私有链交易单生成H
5 安全性分析
本文方案在实现安全目标的同时,又能满足密文安全和关键字安全。
5.1 安全目标
数据的机密性和完整性。EMR 数据在上传到医院服务器存储之前是经过加密的。医生使用患者的公钥对EMR 进行加密,解密时m=cm⊕,由于ka2为患者的私钥,故只有患者可进行解密,这实现了EMR 数据的机密性。另外,区块链中的数据是不可变的,若数据添加或交易已经完成,它就不能被编辑或删除,构建的新区块上存在区块生成者的签名,实现了EMR 数据的完整性。
访问控制。EMR 密文的哈希值存储在私有链,只允许经过身份验证的人员访问;EMR 密文存储在医院服务器,用户必须在医院注册后并经过身份验证才能访问数据。患者上传搜索陷门T=(T1,T2),联盟链上节点验证通过后,发送密文的哈希值hash(ca0)给患者,患者登录医院服务器即可获取EMR 密文。只有拥有私钥,才能生成搜索陷门和解密EMR 密文ca0,因此患者可以控制EMR 的访问。
安全搜索。阶段2 数据的加密及存储过程中,EMR 和关键字都是以密文形式进行存储,其他实体无法获取关键字。阶段3 数据搜索与解密过程中,患者生成搜索陷门T=(T1,T2)发送给联盟链,其中T1包含患者的私钥,只有患者能够生成,故其他用户无法知道搜索结果。
隐私保护。首先,EMR 由医生上传至私有链,上传的交易单中包含患者的伪身份IDa,伪身份由医生生成,患者的真实身份RIDa和β无法被获取。其次,数据的搜索过程中也只包含患者的伪身份,因此,此方案中公共信息不会泄露患者的真实身份,实现了对患者身份的隐私保护。
5.2 安全性证明
5.2.1 密文安全
定理1若敌手A1在一个概率多项式时间内能以不可忽略的优势ε赢得游戏,则挑战者B能够以不可忽略的优势解决DDH 困难问题。
证明假设给挑战者B一个 DDH 实例(aP,bP,cP),挑战者B的目的是确定cP=abP是否成立。游戏过程如下。
5.2.2 关键字安全
6 性能分析
本节首先将本文方案与相关EMR 方案的功能进行比较。然后,从理论角度分析本文方案的计算效率,并与已有的可搜索加密方案进行比较。最后,通过数值模拟实验对方案性能进行评估。
6.1 功能性分析
基于云存储的文献[12,19]方案、基于区块链的文献[20-21]方案与本文方案的功能性分析如表3 所示。由表3 可知,所有的方案都能实现访问控制和隐私保护的特性,这是EMR 共享方案的关键安全目标。但文献[20]方案不能实现安全搜索,文献[12,20-21]方案不能实现身份认证。
表3 功能性分析
6.2 计算效率理论分析
本节从理论角度分析本文方案与文献[12,22]方案在计算效率上的优劣。表4 显示方案中基本运算的符号和执行时间。由表4 可以看出,基本运算的执行时间的排序为Th>Tp>Te>TH。由于计算开销中指数运算、配对运算和哈希运算时间较长,故只考虑这3 个方面的运算时间。下面,本文将利用表4中的数据得出各阶段的运行时间。
表4 方案中的运算符号和执行时间
表5 显示加密、搜索和解密3 个阶段的运算时间。由表5 可以看出,在加密阶段,各方案计算量由大到小依次为文献[12]方案、文献[22]方案、本文方案;在搜索阶段,各方案计算量由大到小依次为文献[22]方案、文献[12]方案、本文方案;在解密阶段,各方案计算量由大到小依次为文献[22]方案、文献[12]方案、本文方案。
6.3 数值分析
本节对本文方案中算法进行数值模拟实验,并通过改变关键字的数量分析本文方案的计算效率,关键字数量n分别取10、50、100。数值模拟实验是在Linux 操作系统下利用双线性包(pairing-based cryptography library)实现的,使用C 语言对算法进行编程,在PC 机(惠普电脑,3.1 GHz CPU,4 GB RAM)的虚拟机环境中运行。实验结果取算法运行50 次的平均值,如表6 所示。
表5 各阶段计算量对比
表6 本文方案中算法的执行时间
系统构建算法模拟系统建立和患者注册阶段,数据加密算法模拟对EMR 和关键字的加密过程,私有链验证算法模拟验证者对私有链上新区块验证的过程,联盟链验证算法模拟验证者对联盟链上新区块验证的过程,陷门生成算法模拟患者生成搜索陷门的过程,关键字搜索算法模拟联盟链匹配关键字的过程,数据解密算法模拟患者对EMR 密文进行解密的过程。
由表6 可知,由于数据加密、联盟链验证、陷门生成和关键字搜索算法中包含关键字信息,故这些算法的执行时间随着关键字的数量增加而增加;当关键字数量发生变化时,系统构建、私有链验证和数据解密算法的执行时间则不受其影响。
7 结束语
本文基于可搜索加密和代理重加密技术,提出了一种具有隐私保护和安全存储的EMR 数据共享方案,解决了区块链上EMR 共享过程中的数据安全和个人隐私等关键问题。在本文提出的区块链EMR 共享模型中,医院服务器存储EMR 密文、医院私有链存储EMR 密文哈希值、联盟链存储关键字密文,实现了对EMR 数据的安全存储与共享。其次,本文设计EMR 区块链的数据结构和一致性证明,保证了所提方案的高效运行。另外,使用关键字搜索保证了数据的安全性和可搜索性。最后,安全性分析和性能分析表明,本文方案在达到设计的安全目标的同时还具有良好的性能。