«上一篇 下一篇»
  计算机工程  2021, Vol. 47 Issue (6): 164-171  DOI: 10.19678/j.issn.1000-3428.0058229
0

引用本文  

牛淑芬, 刘文科, 陈俐霞, 等. 基于代理重加密的电子病历数据共享方案[J]. 计算机工程, 2021, 47(6), 164-171. DOI: 10.19678/j.issn.1000-3428.0058229.
NIU Shufen, LIU Wenke, CHEN Lixia, et al. Data Sharing Scheme of Electronic Medical Record Based on Proxy Re-Encryption[J]. Computer Engineering, 2021, 47(6), 164-171. DOI: 10.19678/j.issn.1000-3428.0058229.

基金项目

国家自然科学基金(61562077,61662069,61662071,61772022)

作者简介

牛淑芬(1976-), 女, 副教授、博士, 主研方向为网络隐私保护、云计算;
刘文科, 硕士研究生;
陈俐霞, 硕士研究生;
杜小妮, 教授、博士

文章历史

收稿日期:2020-05-03
修回日期:2020-06-22
基于代理重加密的电子病历数据共享方案
牛淑芬1 , 刘文科1 , 陈俐霞1 , 杜小妮2     
1. 西北师范大学 计算机科学与工程学院, 兰州 730070;
2. 西北师范大学 数学与统计学院, 兰州 730070
摘要:现有的电子病历大部分只能在医生与患者之间实现数据共享,数据用户难以访问患者的电子病历。针对该问题,提出一种利用代理重加密的电子病历数据共享方案。患者通过搜索陷门得到加密电子病历,数据用户要获取其电子病历,可请求患者和云服务器进行交互,云服务器生成重加密密钥,并对电子病历密文进行代理重加密,经患者授权后将重加密密文发送给数据用户,数据用户用其私钥解密密文,最终获取电子病历数据。基于随机预言机模型的实验结果表明,该方案在改进双线性Diffie-Hellman假设和q决策双线性Diffie-Hellman逆转假设下,均可实现关键字隐私安全和消息隐私安全。
关键词云存储    电子病历    关键字搜索    代理重加密    改进双线性Diffie-Hellman假设    q决策双线性Diffie-Hellman逆转假设    
Data Sharing Scheme of Electronic Medical Record Based on Proxy Re-Encryption
NIU Shufen1 , LIU Wenke1 , CHEN Lixia1 , DU Xiaoni2     
1. College of Computer Science and Engineering, Northwest Normal University, Lanzhou 730070, China;
2. College of Mathematics and Statistics, Northwest Normal University, Lanzhou 730070, China
Abstract: Most of the existing electronic medical records can only realize data sharing between doctors and patients, so it is difficult for data users to access the electronic medical records of patients.To solve the problem, this paper proposes a data sharing scheme of Electronic Medical Record(EMR) based on proxy re-encryption.Patients can use trapdoor search to obtain encrypted EMR.The data user can ask patient and cloud server to interact with each other to obtain the patient's EMR.The cloud server generates the re-encryption key, performs proxy re-encryption on the ciphertext of the EMR, and after authorized by the patient, the re-encrypted ciphertext will be sent to the data user.The data user can decrypt the ciphertext with his or her private key, and finally obtain the EMR data.Results of the experiments based on the random oracle model show that the proposed scheme can achieve keyword privacy security and message privacy security under the modified Bilinear Diffie-Hellman(mBDH) assumption and q-Decision Bilinear Diffie-Hellman Inversion(q-DBDHI) assumption.
Key words: cloud storage    Electronic Medical Record(EMR)    keyword search    proxy re-encryption    modified Bilinear Diffie-Hellman(mBDH) assumption    q-Decisional Bilinear Diffie-Hellman Inversion(q-DBDHI) assumption    

开放科学(资源服务)标志码(OSID):

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 双线性对

$ {G}_{1} $$ {G}_{2} $是2个阶为素数$ q $的循环乘法群,其中$ g $$ {G}_{1} $的一个生成元,定义一个双线性映射$ e:{G}_{1}\times {G}_{1}\to {G}_{2} $满足如下性质:

1)双线性:对于任意$ a, b\in {\mathbb{Z}}_{q}^{\mathrm{*}} $$ e\left({g}^{a}, {g}^{b}\right)=e\left(g, \right.{\left.g\right)}^{ab} $成立。

2)非退化性:存在$ e\left(g, g\right)\ne 1 $

3)可计算性:对任意$ u, v\in {G}_{1} $,存在有效算法计算$ e\left(u, v\right) $

2.2 相关困难性假设

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

1)mBDH问题[16]:对于任意$ \alpha , \beta , \gamma \in {\mathbb{Z}}_{q}^{\mathrm{*}} $,给定$ g, {g}^{\alpha }, {g}^{\beta }, {g}^{\gamma }\in {G}_{1} $,mBDH问题即计算$ e{\left(g, g\right)}^{\frac{\alpha \beta }{\gamma }} $

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

3)q-DBDHI问题[17]:对于任意$ x\in {\mathbb{Z}}_{q}^{\mathrm{*}} $,给定$ g, {g}^{x}, {g}^{{x}^{2}}, \cdots , {g}^{{x}^{q}}\in {G}_{1} $$ T\in {G}_{2} $,q-DBDHI问题即判断$ T=e{\left(g, g\right)}^{\frac{1}{x}} $是否成立。

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

3 系统模型

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

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

5个实体具体说明如下:

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

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

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

4)医院系统。医院系统负责为患者生成诊号$ \beta $,并计算$ \beta $的哈希值$ \mu ={H}_{1}\left(\beta \right) $发送至云服务器。同时,医院系统也负责存储由医生发送的电子病历$ m $

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

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

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

1)公共参数生成算法$ \mathrm{S}\mathrm{e}\mathrm{t}\mathrm{u}\mathrm{p}\left({1}^{k}\right) $。输入安全参数$ {1}^{k} $,初始化算法并输出公共参数$ \mathrm{P}\mathrm{P} $

2)密钥生成算法$ \mathrm{K}\mathrm{e}\mathrm{y}\mathrm{G}\mathrm{e}\mathrm{n}\left(\mathrm{P}\mathrm{P}\right) $。输入公共参数$ \mathrm{P}\mathrm{P} $,密钥生成算法输出公钥$ \mathrm{p}\mathrm{k} $和私钥$ \mathrm{s}\mathrm{k} $

3)加密算法$ \mathrm{E}\mathrm{n}\mathrm{c}\left(\mathrm{P}\mathrm{P}, \mathrm{p}{\mathrm{k}}_{\mathrm{P}}, w, m\right) $。输入公钥$ \mathrm{p}{\mathrm{k}}_{\mathrm{P}} $、关键字$ w $和消息$ m $,加密算法为医生$ \mathrm{D} $输出原始密文$ C $

4)陷门生成算法$ \mathrm{T}\mathrm{r}\mathrm{a}\mathrm{p}\mathrm{d}\mathrm{o}\mathrm{o}\mathrm{r}\left(\mathrm{P}\mathrm{P}, {w}^{'}, \mathrm{s}{\mathrm{k}}_{\mathrm{P}}\right) $。给定患者$ \mathrm{P} $的私钥$ \mathrm{s}{\mathrm{k}}_{\mathrm{P}} $和关键字$ {w}^{'} $,输出限门$ {T}_{{w}^{'}} $

5)测试算法$ \mathrm{T}\mathrm{e}\mathrm{s}\mathrm{t}\left(\mathrm{P}\mathrm{P}, C, {T}_{{w}^{'}}\right) $。给定密文$ C $和限门$ {T}_{{w}^{'}} $,当$ {w}^{'}=w $时,输出1;否则输出0。

6)患者解密算法$ \mathrm{D}\mathrm{e}{\mathrm{c}}_{1}\left(\mathrm{P}\mathrm{P}, \mathrm{s}{\mathrm{k}}_{\mathrm{P}}, C\right) $。给定患者$ \mathrm{P} $的私钥$ \mathrm{s}{\mathrm{k}}_{\mathrm{P}} $和密文$ C $,输出消息$ m\in M $或错误符号⊥。

7)重加密密钥生成算法$ \mathrm{R}\mathrm{e}\mathrm{K}\mathrm{e}\mathrm{y}\mathrm{G}\mathrm{e}\mathrm{n}\left(\mathrm{P}\mathrm{P}, \mathrm{s}{\mathrm{k}}_{\mathrm{P}}, \mathrm{s}{\mathrm{k}}_{\mathrm{R}}\right) $。给定患者$ \mathrm{P} $的私钥$ \mathrm{s}{\mathrm{k}}_{\mathrm{P}} $和数据用户$ \mathrm{R} $的私钥$ \mathrm{s}{\mathrm{k}}_{\mathrm{R}} $,输出重加密密钥$ \mathrm{r}{\mathrm{k}}_{\mathrm{P}\to \mathrm{R}} $。该过程由患者P、数据用户R和云服务器共同执行。

8)重加密算法$ \mathrm{R}\mathrm{e}\mathrm{E}\mathrm{n}\mathrm{c}\left(\mathrm{P}\mathrm{P}, \mathrm{s}{\mathrm{k}}_{\mathrm{P}\to \mathrm{R}}, C\right) $。给定患者P到数据用户R的重加密密钥$ \mathrm{r}{\mathrm{k}}_{\mathrm{P}\to \mathrm{R}} $和原始密文$ C $,将密文$ C $转换为数据用户R的密文$ {C}_{m}^{\mathrm{'}} $

9)数据用户解密算法$ \mathrm{D}\mathrm{e}{\mathrm{c}}_{2}(\mathrm{P}\mathrm{P}, \mathrm{s}{\mathrm{k}}_{\mathrm{R}}, {C}_{m}^{\mathrm{'}}) $。给定数据用户R的私钥$ \mathrm{s}{\mathrm{k}}_{\mathrm{R}} $和密文$ {C}_{m}^{\mathrm{'}} $,输出消息$ m\in M $或错误符号⊥。

4.2 安全模型

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

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

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

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

(1)未损坏密钥询问$ {O}_{\mathrm{p}\mathrm{k}} $。从$ \mathrm{K}\mathrm{e}\mathrm{y}\mathrm{G}\mathrm{e}\mathrm{n}\left(\mathrm{P}\mathrm{P}\right) $算法获取一个新的密钥对$ \left(\mathrm{p}\mathrm{k}, \mathrm{s}\mathrm{k}\right) $,返回$ \mathrm{p}\mathrm{k} $给敌手。设$ {L}_{\mathrm{u}} $为诚实用户的集合。

(2)损坏密钥询问$ {O}_{\mathrm{s}\mathrm{k}} $。从$ \mathrm{K}\mathrm{e}\mathrm{y}\mathrm{G}\mathrm{e}\mathrm{n}\left(\mathrm{P}\mathrm{P}\right) $算法获取一个新的密钥对$ \left(\mathrm{p}\mathrm{k}, \mathrm{s}\mathrm{k}\right) $,返回$ \left(\mathrm{p}\mathrm{k}, \mathrm{s}\mathrm{k}\right) $给敌手。设$ {L}_{\mathrm{c}} $为不诚实用户的集合。

(3)陷门生成询问$ {O}_{\mathrm{t}\mathrm{g}} $。敌手A输入$ \left(\mathrm{p}\mathrm{k}, w\right) $,其中$ \mathrm{p}\mathrm{k} $来自$ {O}_{\mathrm{p}\mathrm{k}} $或者$ {O}_{\mathrm{s}\mathrm{k}} $$ w\in {\left\{\mathrm{0, 1}\right\}}^{\mathrm{*}} $是密钥空间的任意关键字,返回陷门$ {T}_{w}=\mathrm{T}\mathrm{r}\mathrm{a}\mathrm{p}\mathrm{d}\mathrm{o}\mathrm{o}\mathrm{r}\left(\mathrm{s}\mathrm{k}, w\right) $,其中$ \mathrm{s}\mathrm{k} $是对应$ \mathrm{p}\mathrm{k} $的私钥。

(4)重加密密钥询问$ {O}_{\mathrm{r}\mathrm{k}} $。敌手输入$ \left(\mathrm{p}{\mathrm{k}}_{\mathrm{P}}, \mathrm{p}{\mathrm{k}}_{\mathrm{D}}\right) $,其中$ \mathrm{p}{\mathrm{k}}_{\mathrm{P}}\mathrm{和}\mathrm{p}{\mathrm{k}}_{\mathrm{D}} $来自$ {O}_{\mathrm{p}\mathrm{k}} $或者$ {O}_{\mathrm{s}\mathrm{k}} $,返回重加密密钥$ \mathrm{r}{\mathrm{k}}_{\mathrm{P}\to \mathrm{D}}=\mathrm{R}\mathrm{e}\mathrm{K}\mathrm{e}\mathrm{y}\mathrm{G}\mathrm{e}\mathrm{n}\left(\mathrm{s}{\mathrm{k}}_{\mathrm{P}}, \mathrm{s}{\mathrm{k}}_{\mathrm{D}}\right) $,其中$ \mathrm{s}{\mathrm{k}}_{\mathrm{P}} $$ \mathrm{s}{\mathrm{k}}_{\mathrm{D}} $分别为$ \mathrm{p}{\mathrm{k}}_{\mathrm{P}}\mathrm{和}\mathrm{p}{\mathrm{k}}_{\mathrm{D}} $对应的私钥。本文中要求$ \mathrm{p}{\mathrm{k}}_{\mathrm{P}}\mathrm{和}\mathrm{p}{\mathrm{k}}_{\mathrm{D}} $都损坏或者都未损坏,因此,不允许在损坏的密钥和未损坏的密钥之间生成重加密密钥。

2)挑战。阶段1完成后,敌手向挑战者发送来自关键字空间相同长度的$ {w}_{0}\mathrm{和}{w}_{1} $,来自消息空间的$ m $和公钥$ \mathrm{p}{\mathrm{k}}_{\mathrm{D}} $,其中$ \mathrm{p}{\mathrm{k}}_{\mathrm{D}} $想要被挑战。唯一的限制是敌手不能提前询问陷门$ {T}_{{w}_{0}} $$ {T}_{{w}_{1}} $,且$ \mathrm{p}{\mathrm{k}}_{\mathrm{D}} $只能来自$ {L}_{\mathrm{u}} $。挑战者选随机数$ b\in \left\{\mathrm{0, 1}\right\} $,计算挑战密文$ {C}_{b}^{\mathrm{'}}=\mathrm{R}\mathrm{e}\mathrm{E}\mathrm{n}\mathrm{c}\left(\mathrm{P}\mathrm{P}, \mathrm{R}\mathrm{e}\mathrm{K}\mathrm{e}\mathrm{y}\mathrm{G}\mathrm{e}\mathrm{n}\left(\mathrm{s}{\mathrm{k}}_{\mathrm{P}}, \mathrm{s}{\mathrm{k}}_{\mathrm{D}}\right), \mathrm{E}\mathrm{n}\mathrm{c}\left(\mathrm{p}{\mathrm{k}}_{\mathrm{P}}, {w}_{b}, m\right)\right)\mathrm{并} $并发送给敌手。

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

(1)未损坏密钥询问$ {O}_{\mathrm{p}\mathrm{k}} $。该过程与询问阶段1相同。

(2)损坏密钥询问$ {O}_{\mathrm{s}\mathrm{k}} $。该过程与询问阶段1相同。

(3)陷门生成询问$ {O}_{\mathrm{t}\mathrm{g}} $。敌手可继续对任意关键字$ w $执行陷门生成询问,其中$ w\ne {w}_{0} $$ w\ne {w}_{1} $

4)猜测。最终敌手A输出猜测$ {b}^{\mathrm{'}}\in \left\{\mathrm{0, 1}\right\} $,若$ {b}^{\mathrm{'}}=b $,则敌手赢得游戏。

本文定义游戏的优势为:

$ \mathrm{A}\mathrm{d}{\mathrm{v}}_{\mathrm{A}, w}\left(k\right)=\left|\mathrm{P}\mathrm{r}\left({b}^{\mathrm{'}}=b\right)-1/2\right| $ (1)

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

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

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

2)挑战。阶段1完成后,敌手向挑战者发送来自消息空间相同长度的$ {m}_{0}\mathrm{和}{m}_{1} $,以及来自关键字空间的$ w $和公钥$ \mathrm{p}{\mathrm{k}}_{\mathrm{D}} $,其中$ \mathrm{p}{\mathrm{k}}_{\mathrm{D}} $想要被挑战。唯一的限制是$ \mathrm{p}{\mathrm{k}}_{\mathrm{D}} $只能来自$ {L}_{\mathrm{u}} $。挑战者选择随机数$ b\in \left\{\mathrm{0, 1}\right\} $,计算挑战密文$ {C}_{b}^{\mathrm{'}}= $ $ \mathrm{R}\mathrm{e}\mathrm{E}\mathrm{n}\mathrm{c}\left(\mathrm{P}\mathrm{P}, \mathrm{R}\mathrm{e}\mathrm{K}\mathrm{e}\mathrm{y}\mathrm{G}\mathrm{e}\mathrm{n}\left(\mathrm{s}{\mathrm{k}}_{\mathrm{P}}, \mathrm{s}{\mathrm{k}}_{\mathrm{D}}\right)\right., \mathrm{E}\mathrm{n}\mathrm{c}\left(\mathrm{p}{\mathrm{k}}_{\mathrm{P}}, w, {m}_{b}\right) $并发送给敌手。

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

(1)未损坏密钥询问$ {O}_{\mathrm{p}\mathrm{k}} $。该过程与询问阶段1相同。

(2)损坏密钥询问$ {O}_{\mathrm{s}\mathrm{k}} $。该过程与询问阶段1相同。

(3)陷门生成询问$ {O}_{\mathrm{t}\mathrm{g}} $。敌手可继续对任意关键字$ w $进行陷门询问。

(4)重加密密钥询问$ {O}_{\mathrm{r}\mathrm{k}} $。该过程与询问阶段1相同。

4)猜测。最终敌手A输出猜测$ {b}^{\mathrm{'}}\in \left\{\mathrm{0, 1}\right\} $,若$ {b}^{\mathrm{'}}=b $,则敌手赢得游戏。

本文定义游戏的优势为:

$ \mathrm{A}\mathrm{d}{\mathrm{v}}_{\mathrm{A}, m}\left(k\right)=\left|\mathrm{P}\mathrm{r}\left({b}^{\mathrm{'}}=b\right)-1/2\right| $ (2)

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

5 具体方案

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

1)阶段1:算法初始化

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

(1)$ \mathrm{S}\mathrm{e}\mathrm{t}\mathrm{u}\mathrm{p}\left({1}^{k}\right) $。系统输入安全参数$ {1}^{k} $,输出双线性对$ e:{G}_{1}\times {G}_{1}\to {G}_{2} $,其中$ {G}_{1}\mathrm{和}{G}_{2} $是阶数为素数$ q $的乘法循环群,然后选择随机生成元$ g\in {G}_{1} $,计算$ \mathbb{Z}=e\left(g, g\right) $。定义4个哈希函数:$ {H}_{0}:{\left\{\mathrm{0, 1}\right\}}^{\mathrm{*}}\to {G}_{1} $$ {H}_{1}:{\left\{\mathrm{0, 1}\right\}}^{\mathrm{*}}\to {G}_{1}  ,   {H}_{2}:{G}_{2}\to {\left\{\mathrm{0, 1}\right\}}^{\mathrm{l}\mathrm{b}  q},   {H}_{3}:{G}_{2}\to {\left\{\mathrm{0, 1}\right\}}^{\mathrm{*}} $。设置公共参数$ \mathrm{P}\mathrm{P}=\left(g, \mathbb{Z}, e, q, \right. $ $ {G}_{1}, \left.{G}_{2}, {H}_{0}, {H}_{1}, {H}_{2}, {H}_{3}\right) $

(2)$ \mathrm{K}\mathrm{e}\mathrm{y}\mathrm{G}\mathrm{e}\mathrm{n}\left(\mathrm{P}\mathrm{P}\right) $。患者$ \mathrm{P} $随机选择$ p\in {\mathbb{Z}}_{q}^{\mathrm{*}} $作为其私钥$ \mathrm{s}{\mathrm{k}}_{\mathrm{P}} $,计算公钥$ \mathrm{p}{\mathrm{k}}_{\mathrm{P}}={g}^{p} $。医生$ \mathrm{D} $随机选择$ d\in {\mathbb{Z}}_{q}^{\mathrm{*}} $作为其私钥,计算公钥$ \mathrm{p}{\mathrm{k}}_{\mathrm{D}}={g}^{d} $。数据用户$ \mathrm{R} $随机选择$ r\in {\mathbb{Z}}_{q}^{\mathrm{*}} $作为其私钥,计算公钥$ \mathrm{p}{\mathrm{k}}_{\mathrm{R}}={g}^{r} $

2)阶段2:数据加密

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

$ \mathrm{E}\mathrm{n}\mathrm{c}\left(\mathrm{P}\mathrm{P}, \mathrm{p}{\mathrm{k}}_{\mathrm{P}}, w, m\right) $:输入消息$ m\in {G}_{2} $和关键字$ w\in {\left\{\mathrm{0, 1}\right\}}^{\mathrm{*}} $,医生随机选择$ k\in {\mathbb{Z}}_{q}^{\mathrm{*}} $,计算$ {C}_{1}=m{\mathbb{Z}}^{k} $$ {C}_{2}={\left({g}^{p}\right)}^{k} $$ t=e{\left({H}_{1}\left(w\right), g\right)}^{k} $,输出密文$ C=\left({C}_{m}, {C}_{w}\right) $,其中$ {C}_{m}=\left({C}_{1}, {C}_{2}\right) $$ {C}_{w}=\left(t, {H}_{2}\left(t\right)\right) $

为匹配到该患者在云服务器中的诊号,医生随机选择$ a\in {\mathbb{Z}}_{q}^{\mathrm{*}} $,计算$ \alpha ={g}^{\frac{a+d}{{H}_{1}\left(\beta \right)}} $$ {\beta }^{'}={H}_{0}\left({g}^{a}\right)\oplus \beta $,将$ (\alpha , {\beta }^{'}) $发送到云服务器。云服务器计算$ \beta \mathrm{*}={H}_{0}({\alpha }^{\mu }\cdot \mathrm{p}{\mathrm{k}}_{\mathrm{D}}^{-1})\oplus {\beta }^{'} $,并检查$ {H}_{1}\left({\beta }^{\mathrm{*}}\right)=\mu $是否成立。若成立,则上传的电子病历密文即对应患者诊号的哈希值$ \mu ={H}_{1}\left({\beta }^{\mathrm{*}}\right) $,云服务器对其完成匹配,记录$ \left(C, \mu \right) $;否则云服务器拒绝接受该电子病历密文。

证明1  上述正确性证明如下:

$ \begin{array}{l}{H}_{1}\left({\beta }^{\mathrm{*}}\right)={H}_{1}\left({H}_{0}\right({\alpha }^{\mu }\cdot \mathrm{p}{\mathrm{k}}_{\mathrm{D}}^{-1})\oplus {\beta }^{'})=\\                              {{ }^{{}^{}}}_{}\mathrm{ }\mathrm{ }{H}_{1}\left({H}_{0}\left({g}^{\frac{a+d}{{H}_{1}\left(\beta \right)}}\cdot {H}_{1}\left(\beta \right)\cdot {g}^{-d}\right)\oplus {\beta }^{'}\right)=\\                              {{ }^{{}^{}}}_{}\mathrm{ }\mathrm{ }{H}_{1}\left({H}_{0}\right({g}^{a})\oplus {H}_{0}({g}^{a})\oplus \beta )={H}_{1}\left(\beta \right)=\mu \end{array} $ (3)

3)阶段3:数据搜索

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

(1)$ \mathrm{T}\mathrm{r}\mathrm{a}\mathrm{p}\mathrm{d}\mathrm{o}\mathrm{o}\mathrm{r}\left(\mathrm{P}\mathrm{P}, {w}^{'}, \mathrm{s}{\mathrm{k}}_{\mathrm{P}}\right) $。输入患者P私钥$ \mathrm{s}{\mathrm{k}}_{\mathrm{P}}=p $和关键字$ {w}^{'} $,输出限门$ {T}_{{w}^{'}}={H}_{1}({w}^{'}{)}^{\frac{\beta }{p}} $

(2)$ \mathrm{T}\mathrm{e}\mathrm{s}\mathrm{t}\left(\mathrm{P}\mathrm{P}, {C}_{m}, {T}_{{w}^{'}}\right) $。云服务器接收限门$ {T}_{{w}^{'}} $和密文$ \left({\mathrm{C}}_{1}, {\mathrm{C}}_{2}, t, {H}_{2}\left(t\right)\right) $作为输入,检查$ {H}_{2}\left(e\left({C}_{2}, {T}_{{w}^{'}}\right)\right)={H}_{2}\left({t}^{\beta }\right) $是否成立。若成立,则输出1;否则输出0。

证明2  上述正确性证明如下:

$ \begin{array}{l} {H}_{2}\left(e\left({C}_{2}\mathrm{ }, {T}_{{w}^{'}}\right)\right)={H}_{2}\left(e\left({g}^{p\cdot k}, {H}_{1}{\left({w}^{'}\right)}^{\frac{\beta }{p}}\right)\right)=\\ {H}_{2}\left(e{\left(g, {H}_{1}\left({w}^{'}\right)\right)}^{\frac{\beta }{p}\cdot p\cdot k}\right)=    {H}_{2}\left(e{\left(g, {H}_{1}\left({w}^{'}\right)\right)}^{\beta \cdot k}\right)= \\ {H}_{2}\left(e{\left({H}_{1}\left({w}^{'}\right), g\right)}^{\beta \cdot k}\right)={H}_{2}\left({t}^{\beta }\right)\end{array} $ (4)

$ {w}^{'}=w $,则等式成立,测试通过。

4)阶段4:数据共享

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

$ \mathrm{D}\mathrm{e}{\mathrm{c}}_{1}\left(\mathrm{P}\mathrm{P}, \mathrm{s}{\mathrm{k}}_{\mathrm{P}}, C\right) $:输入患者$ P $的私钥$ \mathrm{s}{\mathrm{k}}_{\mathrm{P}}=p $和密文$ C=\left({C}_{1}, {C}_{2}\right) $,输出消息$ m=\frac{{C}_{1}}{e{\left(g, {C}_{2}\right)}^{\frac{1}{p}}} $

证明3  上述正确性证明如下:

$  \frac{{C}_{1}}{e{\left(g, {C}_{2}\right)}^{\frac{1}{p}}}=\frac{m\cdot e{\left(g, g\right)}^{k}}{e{\left(g, {g}^{p\cdot k}\right)}^{\frac{1}{p}}}=\frac{m\cdot e{\left(g, g\right)}^{k}}{e{\left(g, g\right)}^{k}}=m $ (5)

数据用户若想获取某患者的电子病历,需请求患者和云服务器与其进行交互,生成代理重加密密钥$ \mathrm{r}{\mathrm{k}}_{\mathrm{P}\to \mathrm{R}} $

(1)$ \mathrm{R}\mathrm{e}\mathrm{K}\mathrm{e}\mathrm{y}\mathrm{G}\mathrm{e}\mathrm{n}\left(\mathrm{P}\mathrm{P}, \mathrm{s}{\mathrm{k}}_{\mathrm{P}}, \mathrm{s}{\mathrm{k}}_{\mathrm{R}}\right) $。输入患者$ \mathrm{P} $的私钥$ \mathrm{s}{\mathrm{k}}_{\mathrm{P}}=p $和数据用户$ \mathrm{R} $的私钥$ \mathrm{s}{\mathrm{k}}_{\mathrm{R}}=r $,输出代理重加密密钥$ \mathrm{r}{\mathrm{k}}_{\mathrm{P}\to \mathrm{R}}=r/p\left(\mathrm{m}\mathrm{o}\mathrm{d}    q\right) $。具体生成方式为:患者$ \mathrm{P} $随机选$ b\in {\mathbb{Z}}_{q}^{\mathrm{*}} $,发送$ \mathrm{s}{\mathrm{k}}_{\mathrm{P}}\cdot b\left(\mathrm{m}\mathrm{o}\mathrm{d}    q\right) $给数据用户$ \mathrm{R} $,发送$ b $给云服务器。数据用户$ \mathrm{R} $发送$ \mathrm{s}{\mathrm{k}}_{\mathrm{R}}/\left(s{k}_{\mathrm{P}}\cdot b\right)\left(\mathrm{m}\mathrm{o}\mathrm{d}    q\right) $给云服务器。云服务器计算代理重加密密钥为$ \mathrm{r}{\mathrm{k}}_{\mathrm{P}\to \mathrm{R}}=r/p\left(\mathrm{m}\mathrm{o}\mathrm{d}    q\right) $。生成代理重加密密钥$ \mathrm{r}{\mathrm{k}}_{\mathrm{P}\to \mathrm{R}} $后,患者生成搜索陷门对其电子病历进行搜索,搜索到电子病历密文$ C $后,云服务器运行重加密算法对$ C $进行代理重加密,生成电子病历重加密密文$ {C}_{m}^{\mathrm{'}} $,发送给数据用户$ \mathrm{R} $

(2)$ \mathrm{R}\mathrm{e}\mathrm{E}\mathrm{n}\mathrm{c}(\mathrm{P}\mathrm{P}, \mathrm{r}{\mathrm{k}}_{\mathrm{P}\to \mathrm{R}}, C) $:云服务器计算$ {C}_{1}^{\mathrm{'}}={C}_{1} $$ {C}_{2}^{\mathrm{'}}={{C}_{2}}^{\mathrm{r}{\mathrm{k}}_{\mathrm{P}\to \mathrm{R}}\cdot {H}_{3}\left({C}_{1}^{\mathrm{'}}\right)}={g}^{r\cdot k\cdot {H}_{3}\left({C}_{1}^{\mathrm{'}}\right)} $$ {C}_{3}^{\mathrm{'}}={H}_{3}\left({C}_{1}^{\mathrm{'}}\right) $,将密文保存为$ {{C}_{m}}^{\mathrm{'}}=\left({C}_{1}^{\mathrm{'}}, {C}_{2}^{\mathrm{'}}, {C}_{3}^{\mathrm{'}}\right) $。数据用户$ \mathrm{R} $在收到电子病历密文$ {{C}_{m}}^{\mathrm{'}} $后,运行解密算法恢复得到电子病历$ m $

(3)$ \mathrm{D}\mathrm{e}{\mathrm{c}}_{2}(\mathrm{P}\mathrm{P}, \mathrm{s}{\mathrm{k}}_{\mathrm{R}}, {C}_{m}^{\mathrm{'}}) $:输入数据用户$ \mathrm{R} $的私钥$ \mathrm{s}{\mathrm{k}}_{\mathrm{R}}=r $和密文$ {C}_{m}^{\mathrm{'}}=\left({C}_{1}^{\mathrm{'}}, {C}_{2}^{\mathrm{'}}, {C}_{3}^{\mathrm{'}}\right) $,输出消息$ m=\frac{{C}_{1}^{\mathrm{'}}}{e(g, {C}_{2}^{\mathrm{'}}{)}^{\frac{1}{r\cdot {C}_{3}^{\mathrm{'}}}}} $

证明4  上述正确性证明如下:

$   \frac{{C}_{1}^{\mathrm{'}}}{e(g, {C}_{2}^{\mathrm{'}}{)}^{\frac{1}{r\cdot {C}_{3}^{\mathrm{'}}}}}=\frac{m\cdot e{\left(g, g\right)}^{k}}{e{(g, g)}^{\frac{r\cdot k\cdot {H}_{3}\left({C}_{1}^{\mathrm{'}}\right)}{r\cdot {H}_{3}\left({C}_{1}^{\mathrm{'}}\right)}}}=\frac{m\cdot e{\left(g, g\right)}^{k}}{e{\left(g, g\right)}^{k}}=m $ (6)
6 安全性证明

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

6.1 关键字隐私

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

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

$ g $$ {G}_{1} $群中一个生成元。B输入一个mBDH实例$ \left(g, {g}^{\alpha }, {g}^{\beta }, {g}^{\gamma }\in {G}_{1}\right) $,其目标是输出$ e{\left(g, g\right)}^{\alpha \beta /\gamma }\in {G}_{2} $,算法B模拟挑战者与敌手A之间的交互过程包括$ {H}_{1} $询问和$ {H}_{2} $询问。

$ {H}_{1} $询问是在哈希函数$ {H}_{1} $中输入$ w $,B先检查四元组$ 〈{w}_{i}, {h}_{i}, {a}_{i}, {\mathrm{c}}_{i}〉 $是否存在于表$ {H}_{1} $中,若存在,则B返回$ {H}_{1}\left({w}_{i}\right) $;否则B以概率$ 1/\left({q}_{T}+1\right) $设置$ {c}_{i}=0 $,其中$ {c}_{i}\in \left\{\mathrm{0, 1}\right\} $$ {q}_{T} $是询问$ {O}_{\mathrm{t}\mathrm{g}} $的最大次数。B选择随机数$ {a}_{i}\in {\mathbb{Z}}_{p}^{\mathrm{*}} $,若$ {c}_{i}=0 $,则B回复$ {h}_{i}={\left({g}^{\alpha }\right)}^{{a}_{i}} $给A;若$ {c}_{i}=1 $,则B回复$ {h}_{i}={\left({g}^{\gamma }\right)}^{{a}_{i}} $给A。然后B将$ 〈{w}_{i}\mathrm{ }, {h}_{i}\mathrm{ }, {a}_{i}\mathrm{ }, {\mathrm{c}}_{i}〉 $添加进表$ {H}_{1} $,并通过设置$ {h}_{i}={H}_{1}\left({w}_{i}\right) $回复A。

$ {H}_{2} $询问是A向$ {H}_{2} $询问$ {t}^{'}\in {G}_{2} $,B回复$ {H}_{2}\left({t}^{'}\right) $,B为每个新$ {t}^{'} $选择随机数$ V\in {\left\{\mathrm{0, 1}\right\}}^{\mathrm{l}{\mathrm{b}}^{}q} $,设置$ {H}_{2}\left({t}^{'}\right)=V $。然后B将$ \left({t}^{'}, V\right) $添加至初始化为空的表$ {H}_{2} $

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

(1)未损坏密钥询问$ {O}_{\mathrm{p}\mathrm{k}} $。输入索引$ i $,挑战者选择随机数$ {x}_{i}\in {\mathbb{Z}}_{q}^{\mathrm{*}} $,输出公钥$ \mathrm{p}{\mathrm{k}}_{i}={\left({g}^{\gamma }\right)}^{{x}_{i}} $,其中私钥被隐式定义为$ \mathrm{s}{\mathrm{k}}_{i}=\gamma {x}_{i} $,将三元组$ 〈i, \mathrm{p}{\mathrm{k}}_{i}\mathrm{ }, {x}_{i}〉 $添加到表$ {L}_{U} $

(2)损坏密钥询问$ {O}_{\mathrm{s}\mathrm{k}} $。输入索引$ i $,挑战者选择随机数$ {x}_{i}\in {\mathbb{Z}}_{q}^{\mathrm{*}} $,输出公钥$ \mathrm{p}{\mathrm{k}}_{i}={\mathrm{g}}^{{x}_{i}} $,其中私钥被隐式定义为$ s{k}_{i}={x}_{i} $,将三元组$ 〈i, \mathrm{p}{\mathrm{k}}_{i}\mathrm{ }, {x}_{i}〉 $添加到表$ {L}_{C} $

(3)陷门生成询问$ {O}_{\mathrm{t}\mathrm{g}} $。A适应性询问对应关键字$ {w}_{i} $的限门,B进行$ {H}_{1} $询问获取$ {h}_{i}\in {G}_{1} $使$ {H}_{1}\left({w}_{i}\right)={h}_{i} $。若$ {c}_{i}=0 $,则B报告失败;否则当$ {c}_{i}=1 $$ {h}_{i}={\left({g}^{\gamma }\right)}^{{a}_{i}}\in {G}_{1} $。若$ i\in {L}_{C} $,则B从$ {L}_{C} $$ 〈i, \mathrm{p}{\mathrm{k}}_{i}\mathrm{ }, {x}_{i}〉 $中获取$ {x}_{i} $,并设置$ {T}_{i}={{h}_{i}}^{\frac{N}{{x}_{i}}}={\left({g}^{\gamma }\right)}^{\frac{N\cdot {a}_{i}}{{x}_{i}}} $;若$ i\in {L}_{U} $,则B从$ {L}_{U} $$ 〈i, \mathrm{p}{\mathrm{k}}_{i}\mathrm{ }, {x}_{i}〉 $中获取$ {x}_{i} $,设置$ {T}_{i}={{h}_{i}}^{\frac{N}{\gamma {x}_{i}}}={\left({\left({g}^{\gamma }\right)}^{{a}_{i}}\right)}^{\frac{N}{\gamma {x}_{i}}}={g}^{\frac{N\cdot {a}_{i}}{{x}_{i}}} $。因此,$ {T}_{i} $是关键字$ {w}_{i} $的正确陷门,B将$ {T}_{i} $发送给A。

(4)重加密密钥询问$ {O}_{\mathrm{r}\mathrm{k}} $。敌手向挑战者适应性地询问任意两个公钥$ \mathrm{p}{\mathrm{k}}_{i}\mathrm{和}\mathrm{p}{\mathrm{k}}_{j} $的重加密密钥$ \mathrm{r}{\mathrm{k}}_{i\to j} $,B生成重加密密钥如下:若$ \mathrm{p}{\mathrm{k}}_{i}\mathrm{和}\mathrm{p}{\mathrm{k}}_{j} $都不属于$ {L}_{C} $,B退出;否则B回复$ \mathrm{r}{\mathrm{k}}_{i\to j}={x}_{j}/{x}_{i} $给A。

2)挑战。当询问阶段结束时,A生成一对关键字$ {w}_{0} $$ {w}_{1} $,消息$ m $和希望挑战的公钥$ \mathrm{p}{\mathrm{k}}_{i} $,B生成挑战密文$ {C}_{b}^{\mathrm{'}} $如下:

(1)若公钥$ \mathrm{p}{\mathrm{k}}_{i} $属于$ {L}_{C} $,则B退出。

(2)B进行两次$ {H}_{1} $询问获取$ {h}_{0}, {h}_{1}\in {G}_{1} $使$ {H}_{1}\left({w}_{0}\right)={h}_{0} $$ {H}_{1}\left({w}_{1}\right)={h}_{1} $。若$ {c}_{0}=1 $$ {c}_{1}=1 $都成立,则B报告失败。

(3)$ {c}_{0}\mathrm{和}{c}_{1} $中至少有一个为0,B随机选择$ b\in \left\{\mathrm{0, 1}\right\} $使$ {c}_{b}=0 $

(4)B回复A挑战密文$ {C}_{b}^{\mathrm{'}}=\left({g}^{\beta {x}_{i}}, V\right) $,其中,随机数$ V\in {\left\{\mathrm{0, 1}\right\}}^{\mathrm{l}{\mathrm{b}}^{}q} $

该挑战隐式定义$ \mathrm{p}{\mathrm{k}}_{i}^{\frac{\beta }{\gamma }}={\left({\left({g}^{\gamma }\right)}^{{x}_{i}}\right)}^{\frac{\beta }{\gamma }} $$ V $如下:

$ \begin{array}{l}V={H}_{2}\left(e{\left({H}_{1}\left({w}_{b}\right), g\right)}^{\frac{\beta }{\gamma }}\right)={H}_{2}\left(e{\left({g}^{\alpha {a}_{b}}, g\right)}^{\frac{\beta }{\gamma }}\right)=\\  {H}_{2}\left(e\left({\left({g}^{\alpha {a}_{b}}\right)}^{\frac{1}{\gamma {x}_{i}}}, {g}^{\beta {x}_{i}}\right)\right)={H}_{2}\left(e{\left(g, g\right)}^{\frac{\beta \alpha {a}_{b}}{\gamma }}\right)\end{array} $ (7)

根据该定义,$ {C}_{b}^{\mathrm{'}} $为所需关键字$ {w}_{b} $的有效挑战密文。

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

(1)未损坏密钥询问$ {O}_{\mathrm{p}\mathrm{k}} $。该过程与询问阶段1相同。

(2)损坏密钥询问$ {O}_{\mathrm{s}\mathrm{k}} $。该过程与询问阶段1相同。

(3)陷门生成询问$ {O}_{\mathrm{t}\mathrm{g}} $。敌手A可继续对关键字$ {w}_{i} $进行陷门询问,此处限制$ {w}_{i}\ne {w}_{0} $$ {w}_{i}\ne {w}_{1} $。B的回应与询问阶段1中相同。

(4)重加密密钥询问$ {O}_{\mathrm{r}\mathrm{k}} $。该过程与询问阶段1相同。

4)猜测。A输出猜测$ {b}^{'}\in \left\{\mathrm{0, 1}\right\} $,猜测$ {C}_{b}^{\mathrm{'}} $是对$ {w}_{0} $的加密还是对$ {w}_{1} $的加密。B从$ {H}_{2} $表中选择随机对$ \left({t}^{'}, V\right) $,输出$ {{t}^{'}}^{\frac{1}{{a}_{b}}} $作为对$ e{\left(g, g\right)}^{\frac{\beta \alpha }{\gamma }} $的猜测,其中,$ {a}_{b} $$ {H}_{1} $表中,用于挑战阶段。

6.2 消息隐私

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

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

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

证明6   对于$ k\in {\mathbb{Z}}_{q}^{\mathrm{*}} $,令$ {g}^{c} $$ {g}^{bk} $,则消息$ m $在公钥$ {g}^{b} $下的加密密文为:

$ \left\{\begin{array}{l}{C}_{1}^{\mathrm{'}}=m\cdot {Z}^{k}\\ {C}_{2}^{\mathrm{'}}={g}^{d\cdot k\cdot {H}_{3}\left({C}_{1}^{\mathrm{'}}\right)}\\ {C}_{3}^{\mathrm{'}}={H}_{3}\left({C}_{1}^{\mathrm{'}}\right)\end{array}\right. $ (8)

$ T=e{\left(g, g\right)}^{\frac{b}{c}}=e{\left(g, g\right)}^{\frac{b\cdot k}{b}}=e{\left(g, g\right)}^{k} $成立,则$ {C}_{1}^{\mathrm{'}} $为消息$ m $的正确密文;否则为其他消息$ {m}^{'}\ne m $的密文。除非对手推翻q-DBDHI假设,否则其不会破坏本文方案的语义安全性。

7 效率分析

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

7.1 理论分析

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

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

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

下载CSV 表 2 3种方案不同阶段的运算时间 Table 2 Operation time of different stages of three schemes  
7.2 数值模拟

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

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

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

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

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

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

参考文献
[1]
AU M H, YUEN T H, LIU J K, et al. A general framework for secure sharing of personal health records in cloud system[J]. Journal of Computer and System Sciences, 2017, 90(12): 46-62.
[2]
BLAZE M, BLEUMER G, STRAUSS M. Divertible protocols and atomic proxy cryptography[C]//Proceedings of 1998 International Conference on the Theory and Applications of Cryptographic Techniques. Berlin, Germany: Springer, 1998: 127-144.
[3]
ZENG P, CHOO K K R. A new kind of conditional proxy re-encryption for secure cloud storage[J]. IEEE Access, 2018, 6: 70017-70024. DOI:10.1109/ACCESS.2018.2879479
[4]
SONG D X, WAGNER D, PERRIG A. Practical techniques for searches on encrypted data[C]//Proceedings of 2000 IEEE Symposium on Security and Privacy. Washington D.C., USA: IEEE Press, 2000: 44-55.
[5]
BONEH D, CRESCENZO D G, OSTROVSKY R, et al. Public key encryption with keyword search[C]//Proceedings of 2004 International Conference on the Theory and Applications of Cryptographic Techniques. Berlin, Germany: Springer, 2004: 506-522.
[6]
BAEK J, SAFAVI-NAINI R, SUSILO W. Public key encryption with keyword search revisited[C]//Proceedings of 2008 International Conference on Computational Science and Its Applications. Berlin, Germany: Springer, 2008: 1249-1259.
[7]
XU Peng, JIN Hai, WU Qianlong, et al. Public-key encryption with fuzzy keyword search: a provably secure scheme under keyword guessing attack[J]. IEEE Transactions on Computers, 2012, 62(11): 2266-2277.
[8]
LIU Xuejiao, XIA Yingjie, YANG Wei, et al. Secure and efficient querying over personal health records in cloud computing[J]. Neurocomputing, 2018, 274(1): 99-105.
[9]
LI Xiaorong, SONG Ziye, REN Jingyi, et al. Attribute-based searchable encryption of electronic medical records in cloud computing[J]. Computer Science, 2017, 44(Z11): 342-347. (in Chinese)
李晓蓉, 宋子夜, 任婧怡, 等. 云计算中基于属性的可搜索加密电子病历系统[J]. 计算机科学, 2017, 44(Z11): 342-347.
[10]
MA M, HE D, KHAN M K, et al. Certificateless searchable public key encryption scheme for mobile healthcare system[J]. Computers and Electrical Engineering, 2018, 65(1): 413-424.
[11]
LIU Xuhui, LIU Qin, PENG Tao, et al. Dynamic access policy in cloud-based personal health record systems[J]. Information Sciences, 2017, 379(2): 62-81.
[12]
WANG Xiao, ZHANG Aiqing, XIE Xiaojuan, et al. Secure-aware and privacy-preserving electronic health record searching in cloud environment[J]. International Journal of Communication Systems, 2019, 32(8): 31-37.
[13]
SHAO Jun, CAO Zhenfu, LIANG Xiaohui, et al. Proxy re-encryption with keyword search[J]. Information Sciences, 2010, 180(13): 2576-2587. DOI:10.1016/j.ins.2010.03.026
[14]
GUO Lifeng, LU Bo. Efficient proxy re-encryption with keyword search scheme[J]. Journal of Computer Research and Development, 2014, 51(6): 1221-1228. (in Chinese)
郭丽峰, 卢波. 有效的带关键字搜索的代理重加密方案[J]. 计算机研究与发展, 2014, 51(6): 1221-1228.
[15]
CHEN Zhenhua, LI Shundong, GUO Yinmin, et al. A limited proxy re-encryption with keyword search for data access control in cloud computing[C]//Proceedings of 2015 International Conference on Network and System Security. Berlin, Germany: Springer, 2015: 82-95.
[16]
SAHAI A, WATERS B. Fuzzy identity-based encryption[C]//Proceedings of 2005 Annual International Conference on the Theory and Applications of Cryptographic Techniques. Berlin, Germany: Springer, 2005: 457-473.
[17]
DODIS Y, YAMPOLSKIY A. A verifiable random function with short proofs and keys[C]//Proceedings of 2005 International Workshop on Public Key Cryptography. Berlin, Germany: Springer, 2005: 416-431.
[18]
CANETTI R, HOHENBERGER S. Chosen-ciphertext secure proxy re-encryption[C]//Proceedings of the 14th ACM Conference on Computer and Communications Security. New York, USA: ACM Press, 2007: 185-194.
[19]
ZHANG Aiqing, LIN Xiaodong. Towards secure and privacy-preserving data sharing in e-health systems via consortium blockchain[J]. Journal of Medical Systems, 2018, 42(8): 140-143. DOI:10.1007/s10916-018-0995-5
[20]
WU Yilun, LU Xicheng, SU Jinshu, et al. An efficient searchable encryption against keyword guessing attacks for sharable electronic medical records in cloud-based system[J]. Journal of medical systems, 2016, 40(12): 1-9. DOI:10.1007/s10916-016-0609-z