APP下载

基于代理重加密的电子病历数据共享方案

2021-06-18牛淑芬刘文科陈俐霞杜小妮

计算机工程 2021年6期
关键词:关键字密文病历

牛淑芬,刘文科,陈俐霞,杜小妮

(1.西北师范大学 计算机科学与工程学院,兰州 730070;2.西北师范大学 数学与统计学院,兰州 730070)

0 概述

电子病历(Electronic Medical Record,EMR)是保存在计算机中的患者医疗记录,其有助于医生对患者进行正确诊断并制定合理的治疗方案[1]。电子病历信息不是静态孤立的,而是动态和相互关联的。相较传统的纸质病历,电子病历具有更强的动态性与关联性,新补充信息会与原有全部信息建立必要的联系,电子病历结构也不断保持更新。近年来,随着云计算技术不断发展,电子病历得到更广泛的应用并趋于完善,越来越多的医疗机构与患者使用电子病历,并将数据上传到云端保存以方便使用。基于云的存储系统比传统存储系统具有更多优势,可使患者更快捷地存储和维护数据,享受云计算带来的高品质数据存储服务。值得注意的是,由于云服务器可能被恶意破坏,云计算会造成患者隐私信息泄露等问题。

为确保患者隐私信息的安全性和保密性,电子病历在上传云端之前应进行加密。面对数量庞大的电子病历,如何准确搜索加密数据成为难题。有研究人员提出下载所有加密数据,在解密密文后再进行检索。该方法计算开销较大且需要大存储量设备,对于大型数据库而言,其计算效率较低。近年来兴起一种新型可搜索加密技术,其在完成密文检索的同时可有效保证数据的隐私性。文献[2]提出一种代理重加密方案对外包数据进行访问控制,实现了云端密文数据共享。当数据拥有者Alice 与Bob进行数据共享时,Alice 用自身解密密钥和Bob 的加密密钥生成重加密密钥并发送给云服务器,云服务器用重加密密钥对密文进行重加密并保存在云端,此时Bob 可下载密文,并用自身私钥进行解密得到原始明文,从而实现数据共享[3]。

为满足数据用户访问患者电子病历的需求,本文提出一种基于代理重加密的电子病历数据共享方案。利用可搜索加密技术进行关键字搜索,通过代理重加密技术实现数据用户对患者电子病历的数据共享,并分别从关键字隐私和消息隐私两方面证明数据用户使用数据的安全性。

1 相关工作

为实现对密文的直接搜索,文献[4]提出基于流密码的对称搜索加密方案。但基于对称密钥的可搜索加密方案的密钥分发困难,从而造成其应用场景受限。为解决该问题,文献[5]提出一种带关键字的公钥可搜索加密方案,并证明其在随机预言机模型下具有安全性,但其密钥传输需要安全通道。文献[6]提出不需要安全通道的SCF-PEKS 模型,解决了文献[5]中因使用安全通道造成原始可搜索加密方案效率低下的问题。文献[7]提出基于模糊关键字搜索的公钥加密概念。服务器对所有密文进行模糊关键字搜索后,返回结果给接收方,接收方对结果执行更精确的关键字搜索。可搜索加密通过给定关键字提供查询加密数据的能力,将其应用于电子病历中可保护患者的身份信息、通信信息和既往病史等隐私信息。文献[8]提出一种高效、安全的细粒度访问控制方案,可授权用户访问云存储系统中的电子病历。文献[9]设计了一种云计算中基于属性的可搜索加密电子病历系统,使多用户环境下密钥管理难度降低,并实现了数据拥有者对电子病历的细粒度访问控制。文献[10]提出用于移动医疗系统的无证书可搜索公钥加密方案,采用无证书公钥密码体制解决了密钥托管问题。用户可将关键字及明文进行加密,并将密文上传到云服务器。文献[11]提出一种基于层次比较的加密方案,在基于云的电子病历系统中利用代理重加密技术实现了动态访问控制,并设计出动态策略更新方案。用户在检索数据时首先提交关键字限门,云服务器在搜索关键字后返回密文给用户。然而由于只有患者知道密文解密密钥,因此在患者将电子病历用自身公钥加密并将密文上传到云服务器,同时授权数据用户查看电子病历时,数据用户不知患者的私钥,此时共享数据成为难题[12]。

为解决上述问题,文献[13]提出密码学原语带关键字搜索的代理重加密(Proxy Re-Encryption with Keyword Search,PRES)的概念,并设计了双向PRES 方案,在随机预言机模型中验证其具有安全性。文献[14]提出指定检验者的具有关键字搜索性质的代理重加密的概念和安全模型,在标准模型下验证其具有安全性。文献[15]提出一种带关键字搜索的限制性代理重加密的模型,在改进双线性Diffie-Hellman(modified Bilinear Diffie-Hellman,mBDH)假设和随机预言机模型的q 决策双线性Diffie-Hellman 逆转(q-Decisional Bilinear Diffie-Hellman Inversion,q-DBDHI)假设下证明其具有安全性。

针对目前只有医生和患者中的一方才能对加密的电子病历进行解密的现状,本文以安全存储、共享电子病历数据为目标,利用可搜索加密和代理重加密技术提出一种基于代理重加密的电子病历数据共享方案。医生将患者的电子病历加密后上传到云服务器,患者利用可搜索加密技术对电子病历进行搜索与解密。云服务器对上传的电子病历密文进行代理重加密后,经患者授权的数据用户也可解密电子病历。

2 理论基础

2.1 双线性对

令G1和G2是2 个阶为素数q的循环乘法群,其中g为G1的一个生成元,定义一个双线性映射e:G1×G1→G2满足如下性质:

1)双线性:对于任意a,b∊,e(ga,gb)=e(g,g)ab成立。

2)非退化性:存在e(g,g)≠1。e(u,v)。

3)可计算性:对任意u,v∊G1,存在有效算法计算

2.2 相关困难性假设

本文提出相关困难性假设如下:

1)mBDH 问 题[16]:对于任 意α,β,γ∊,给 定g,gα,gβ,gγ∊G1,mBDH 问题即计算

2)mBDH 假设[16]:任何概率多项式时间(PPT)算法均不能以不可忽视的优势解决mBDH 问题。

3)q-DBDHI 问 题[17]:对于任 意x∊,给定∊G1,T∊G2,q-DBDHI 问题即判断是否成立。

4)q-DBDHI 假设[17]:任何PPT 算法均不能以不可忽视的优势解决q-DBDHI 问题。

3 系统模型

本文提出的电子病历系统模型结构如图1 所示,指定电子病历为m,其对应的关键字为w。该系统包含患者、医生、数据用户、医院系统和云服务器5 个实体。

图1 电子病历系统模型结构Fig.1 Structure of electronic medical record system model

5 个实体具体说明如下:

1)患者。患者前往医院就诊时,医院为其生成诊号β,患者就诊时将诊号交给医生。患者想要查看病历时,可通过生成搜索陷门Tw获取电子病历密文C。

2)医生。医生为患者提供医疗服务。在患者诊断结束后,医生将诊断结果记录在电子病历m中,同时生成关键字索引w,并将电子病历m存入医院系统。然后医生使用患者的公钥对m和w进行加密后将密文Cm和Cw上传至云服务器进行存储。

3)数据用户。本文数据用户指需要使用某患者电子病历的用户。例如,当患者病情复杂时,需要来自不同医院的多位专家(数据用户)进行会诊,此时只需上传患者的私钥,云服务器使用生成的代理重加密密钥rkP→R对密文C重加密生成密文。经患者授权后,云服务器返回密文给数据用户,数据用户可使用自己的私钥进行解密。

4)医院系统。医院系统负责为患者生成诊号β,并计算β的哈希值μ=H1(β)发送至云服务器。同时,医院系统也负责存储由医生发送的电子病历m。

5)云服务器。云服务器具有电子病历存储与搜索功能。云服务器先存储由医院系统所发送患者诊号的哈希值μ,并在医生上传患者电子病历m前对患者身份进行验证,验证通过后,云服务器接收并存储患者的电子病历密文C,并将其与患者诊号的哈希值μ绑定。云服务器在收到患者的搜索陷门Tw后,返回电子病历密文C给患者。数据用户想获取某患者电子病历时,可请求该患者和云服务器进行交互,云服务器生成代理重加密密钥后对电子病历密文C进行重加密,生成电子病历重加密密文Cm′ 并发送给数据用户。

4 方案的形式化定义和安全模型

4.1 方案的形式化定义

带关键字搜索的代理重加密方案由以下9 个概率多项式算法组成:

1)公共参数生成算法Setup(1k)。输入安全参数1k,初始化算法并输出公共参数PP。

2)密钥生成算法KeyGen(PP)。输入公共参数PP,密钥生成算法输出公钥pk 和私钥sk。

3)加密算法Enc(PP,pkP,w,m)。输入公钥pkP、关键字w和消息m,加密算法为医生D 输出原始密文C。

4)陷门生成算法Trapdoor(PP,w′,skP)。给定患者P 的私钥skP和关键字w′,输出限门

5)测试算法Test(PP,C,Tw′)。给定密文C和限门,当w′=w时,输出1;否则输出0。

6)患者解密算法Dec1(PP,skP,C)。给定患者P的私钥skP和密文C,输出消息m∊M或错误符号⊥。

7)重加密密钥生成算法Re KeyGen(PP,skP,skR)。给定患者P 的私钥skP和数据用户R 的私钥skR,输出重加密密钥rkP→R。该过程由患者P、数据用户R 和云服务器共同执行。

8)重加密算法ReEnc(PP,skP→R,C)。给定患者P到数据用户R 的重加密密钥rkP→R和原始密文C,将密文C转换为数据用户R 的密文。

9)数据用户解密算法Dec2(PP,skR,Cm′)。给定数据用户R 的私钥skR和密文Cm′,输出消息m∊M或错误符号⊥。

4.2 安全模型

本文中安全性包括关键字隐私和消息隐私。

本文采用文献[18]中的假设来定义关键字隐私,即静态损坏。在该安全定义中,敌手必须在计算开始前确定损坏的云服务器,不允许出现自适应选择损坏服务器和未损坏服务器。

游戏1(关键字隐私)在本文安全定义下,敌手可获得除了两个指定关键字相关的陷门之外所有陷门,但其不能判断哪个关键字对应于给定的密文,从而保证只有拥有陷门的人才能进行测试。在后续选择关键字明文攻击下的不可区分性(Indistinguishability under Chosen-Plaintext Attack for Keyword,IND-CPA-K)游戏(游戏1)中,若无多项式有界敌手A 对挑战者具有不可忽略的优势,则称本文方案具有关键字隐私。

1)询问阶段1。敌手A 进行如下询问:

(1)未损坏密钥询问Opk。从KeyGen(PP)算法获取一个新的密钥对(pk,sk),返回pk 给敌手。设Lu为诚实用户的集合。

(2)损坏密钥询问Osk。从KeyGen(PP)算法获取一个新的密钥对(pk,sk),返回(pk,sk)给敌手。设Lc为不诚实用户的集合。

(3)陷门生成询问Otg。敌手A 输入(pk,w),其中pk 来自Opk或者Osk,w∊{0,1}*是密钥空间的任意关键字,返回陷门Tw=Trapdoor(sk,w),其中sk 是对应pk 的私钥。

(4)重加密密钥询问Ork。敌手输入(pkP,pkD),其中pkP和pkD来自Opk或者Osk,返回重加密密钥rkP→D=ReKeyGen(skP,skD),其中skP和skD分别为pkP和pkD对应的私钥。本文中要求pkP和pkD都损坏或者都未损坏,因此,不允许在损坏的密钥和未损坏的密钥之间生成重加密密钥。

2)挑战。阶段1 完成后,敌手向挑战者发送来自关键字空间相同长度的w0和w1,来自消息空间的m和公钥pkD,其中pkD想要被挑战。唯一的限制是敌手不能提前询问陷门Tw0和Tw1,且pkD只能来自Lu。挑战者选随机数b∊{0,1},计算挑战密文Cb′=ReEnc(PP,ReKeyGen(skP,skD),Enc(pkP,wb,m))并并发送给敌手。

3)询问阶段2。该过程与询问阶段1 相同,但不能询问挑战密文,具体如下:

(1)未损坏密钥询问Opk。该过程与询问阶段1相同。

(2)损坏密钥询问Osk。该过程与询问阶段1相同。

(3)陷门生成询问Otg。敌手可继续对任意关键字w执行陷门生成询问,其中w≠w0且w≠w1。

4)猜测。最终敌手A输出猜测b'∊{0,1},若b'=b,则敌手赢得游戏。

本文定义游戏的优势为:

对于任何多项式时间敌手A,如果AdvA,w(k)是可忽略的,则称电子病历下基于代理重加密的数据共享方案在抵抗选择关键字明文攻击下是语义安全的。

游戏2(消息隐私)在本文安全定义下,敌手可以获得所有陷门,但其不能判断哪个消息对应于给定的密文,从而保证只有拥有私钥的人才能对消息进行解密。在后续选择消息明文攻击下的不可区分性(Indistinguishability under Chosen-Plaintext Attack for Message,IND-CPA-M)游戏(游戏2)中,若无多项式有界对手A 对挑战者具有不可忽略的优势,则称本文方案具有消息隐私。

1)询问阶段1。该过程与关键字隐私的安全模型相同。

2)挑战。阶段1完成后,敌手向挑战者发送来自消息空间相同长度的m0和m1,以及来自关键字空间的w和公钥pkD,其中pkD想要被挑战。唯一的限制是pkD只能来自Lu。挑战者选择随机数b∊{0,1},计算挑战密文Cb′=Re Enc(PP,ReKeyGen(skP,skD),Enc(pkP,w,mb)并发送给敌手。

3)询问阶段2。该过程与询问阶段1 相同,但是不能询问挑战密文。

(1)未损坏密钥询问Opk。该过程与询问阶段1相同。

(2)损坏密钥询问Osk。该过程与询问阶段1相同。

(3)陷门生成询问Otg。敌手可继续对任意关键字w进行陷门询问。

(4)重加密密钥询问Ork。该过程与询问阶段1相同。

4)猜测。最终敌手A输出猜测b'∊{0,1},若b'=b,则敌手赢得游戏。

本文定义游戏的优势为:

对于任何多项式时间敌手A,如果AdvA,w(k)是可忽略的,则称电子病历下基于代理重加密的数据共享方案在抵抗选择消息明文攻击下是语义安全的。

5 具体方案

本文定义患者为P,医生为D,数据用户为R。本文方案分为算法初始化、数据处理、数据搜索和数据共享4 个阶段。为让除患者以外的数据用户共享电子病历数据,本方案在阶段4 中分别给出患者解密电子病历和数据用户解密电子病历两种情况。

1)阶段1:算法初始化

在该阶段,系统运行参数生成算法生成公共参数PP,系统运行密钥生成算法生成医生密钥、患者的密钥和数据用户密钥。当患者在医院就诊时,医院随机选择β∊{0,1}*,将β安全地发送给患者,并为该患者指定一名医生[19],计算μ=H1(β)发送到云服务器。

(1)Setup(1k)。系统输入安全参数1k,输出双线性对e:G1×G1→G2,其中G1和G2是阶数为素数q的乘法循环群,然后选择随机生成元g∊G1,计算Z=e(g,g)。定 义4 个哈希函数:H0:{0,1}*→G1,H1:{0,1}*→G1,H2:G2→{0,1}lbq,H3:G2→{0,1}*。设置公共参数PP=(g,Z,e,q,G1,G2,H0,H1,H2,H3)。

(2)KeyGen(PP)。患者P 随机选择p∊作为其私钥skP,计算公钥pkP=gp。医生D 随机选择d∊作为其私钥,计算公钥pkD=gd。数据用户R随机选择r∊作为其私钥,计算公钥pkR=gr。

2)阶段2:数据加密

患者在就诊时向医生出示β,作为医生为其生成电子病历的授权。医生使用β为患者生成电子病历并上传到云服务器,具体步骤为:医生为患者诊断后生成电子病历m和关键字w,上传电子病历m至医院系统,然后运行加密算法对数据和关键字进行加密,生成电子病历m的密文Cm和关键字w的密文Cw发送给服务器。

3)阶段3:数据搜索

为搜索到加密后电子病历的密文,患者需采用陷门生成算法计算关键字w′的搜索陷门Tw′并发送到云服务器。云服务器接收到搜索陷门后,调用测试算法检查搜索陷门中w′对应的密文。若密文对应的w与搜索陷门中的w′相等,则云服务器发送电子病历密文C给患者。

若w′=w,则等式成立,测试通过。

4)阶段4:数据共享

患者在收到电子病历密文C后,运行解密算法恢复得到子病历m。

数据用户若想获取某患者的电子病历,需请求患者和云服务器与其进行交互,生成代理重加密密钥rkP→R。

6 安全性证明

由于患者使用数据时与数据用户使用数据类似,因此本文仅证明数据用户使用数据时的安全性。

6.1 关键字隐私

定理1假设mBDH 问题是困难的,那么本文方案为语义安全的,可抵抗随机预言机模型中关键字的选择明文攻击。

证明5假设存在敌手A 以优势ε(k)攻破本文方案中的关键字隐私,则可构造算法B 解决mBDH问题。其中,ε(k)是安全参数k的一个可忽略函数。

2)挑战。当询问阶段结束时,A 生成一对关键字w0和w1,消息m和希望挑战的公钥pki,B 生成挑战密文如下:

(1)若公钥pki属于LC,则B 退出。

(2)B 进行两 次H1询问获 取h0,h1∊G1使H1(w0)=h0和H1(w1)=h1。若c0=1 和c1=1 都成立,则B 报告失败。

(3)c0和c1中至少有一个为0,B 随机选择b∊{0,1}使cb=0。

根据该定义,Cb′ 为所需关键字wb的有效挑战密文。

3)询问阶段2。该过程与询问阶段1 相同,但是不能询问挑战密文。

(1)未损坏密钥询问Opk。该过程与询问阶段1相同。

(2)损坏密钥询问Osk。该过程与询问阶段1相同。

(3)陷门生成询问Otg。敌手A 可继续对关键字wi进行陷门询问,此处限制wi≠w0且wi≠w1。B 的回应与询问阶段1 中相同。

(4)重加密密钥询问Ork。该过程与询问阶段1相同。

4)猜测。A 输出猜测b′∊{0,1},猜测Cb′ 是对w0的加密还是对w1的加密。B 从H2表中选择随机对(t′,V),输出作为对的猜测,其中,ab在H1表中,用于挑战阶段。

6.2 消息隐私

引理1若无多项式时间算法在求解简化的q-DBDHI 问题上具有不可忽略的优势,则简化的q-DBDHI 问题是难以解决的。

定理2假设q-DBDHI 问题是困难的,则本文方案是语义安全的,可抵抗随机预言机模型中关键字的选择明文攻击。

这部分证明的部分过程与定理1 中相同,以下只进行简单证明,并说明q-DBDHI 假设是如何应用于本文方案。

证明6对于k∊,令gc为gbk,则消息m在公钥gb下的加密密文为:

若T=成 立,则C1'为消息m的正确密文;否则为其他消息m′≠m的密文。除非对手推翻q-DBDHI 假设,否则其不会破坏本文方案的语义安全性。

7 效率分析

本节讨论本文方案在加密阶段、搜索阶段和解密阶段的运算时间,并比较已有的可搜索加密方案与本文方案在运算时间上的优劣。在Linux 操作系统下利用双线性包实现算法,使用C 语言进行编程,在PC 机(惠普电脑,3.1 GHz CPU,4GB RAM)的虚拟机中运行。

7.1 理论分析

以下从理论角度分析本文方案与文献[12]方案、文献[20]方案在运算时间上的优劣。表1 为上述方案中基本运算执行时间的符号和时长。由于计算开销中指数运算、配对运算和哈希运算时间较长,因此只考虑这3 方面的运算时间。

表1 基本运算的执行时间Table 1 Execution time of basic operations ms

利用表1 中数据得出加密阶段、搜索阶段和解密阶段的运算时间,结果如表2 所示。由表2 可以看出:在加密阶段,各方案运算时间由大到小依次为文献[12]方案、本文方案和文献[20]方案;在搜索阶段,各方案运算时间由大到小依次为文献[12]方案、文献[20]方案和本文方案;在解密阶段,各方案运算时间由大到小依次为文献[12]方案、文献[20]方案和本文方案。

表2 3 种方案不同阶段的运算时间Table 2 Operation time of different stages of three schemes ms

7.2 数值模拟

本节数值实验通过改变关键字个数,对比本文方案与文献[20]方案在加密阶段和搜索阶段的算法的时间开销。关键字个数分别取10、20、30、40、50、60、70、80、90 和100,取算法运行50 次所得结果的平均值作为最终实验结果。

本文方案和文献[20]方案在加密阶段的时间开销如图2 所示。可以看出,两种方案在加密阶段的时间均随关键字个数的增加而增长,但本文方案的时间增幅较缓,即关键字个数越多,本文方案在加密阶段的运算时间较文献[20]方案的优势更明显。例如:当关键字个数为10 时,两种方案在加密阶段的时间差距可忽略不计;当关键字个数为100 时,文献[20]方案在加密阶段的运算时间高于本文方案600 ms。因此,对于云服务器中大批量数据而言,本文方案更能满足实际需求。

图2 2 种方案加密阶段的时间开销Fig.2 Time cost of encryption phase of two schemes

本文方案和文献[20]方案在搜索阶段的时间开销如图3 所示。可以看出,两种方案在搜索阶段的时间开销随关键字数量的增加呈线性增长,但本文方案的时间开销增幅较缓,其在实际应用中云服务器的响应时间更短,用户搜索更迅速。

图3 2 种方案搜索阶段的时间开销Fig.3 Time cost of search phase of two schemes

8 结束语

本文提出一种基于代理重加密的电子病历数据共享方案。在保证隐私安全的基础上,患者获取以其私钥解密的加密电子病历,数据用户经患者授权能查阅其电子病历。基于随机预言机模型的实验结果表明,该方案有效实现了关键字隐私安全和消息隐私安全,可满足实际应用需求。由于本文方案仅支持单关键字搜索,搜索效率较低,后续将拓展为支持连接关键字搜索,以提高关键字搜索效率。

猜你喜欢

关键字密文病历
履职尽责求实效 真抓实干勇作为——十个关键字,盘点江苏统战的2021
一种支持动态更新的可排名密文搜索方案
强迫症病历簿
基于模糊数学的通信网络密文信息差错恢复
“大数的认识”的诊断病历
成功避开“关键字”
为何要公开全部病历?
一种基于密文分析的密码识别技术*
村医未写病历,谁之过?
云存储中支持词频和用户喜好的密文模糊检索