加密电子病历数据共享方案*
2022-09-21牛淑芬陈俐霞王彩芬
牛淑芬,于 斐,陈俐霞,王彩芬
(1.西北师范大学计算机科学与工程学院,甘肃 兰州 730070;2.深圳技术大学大数据与互联网学院,广东 深圳 518118)
1 引言
随着信息技术的高速发展,很多医院选择使用电子病历EHR (Electronic Health Record)实现患者诊断信息的存储、检索和共享[1 - 3]。EHR的使用已引起学术界的广泛关注,其最重要的发展方向是EHR的数据共享和数据安全[4 - 6]。
云存储具有数据存储和访问功能。数据存放到云存储前应该进行加密以保证数据安全。但是数据加密使得在大量密文文件中搜索特定的文件变得困难。为了解决加密数据的搜索问题,Song等[7]提出了对称可搜索加密算法,但是搜索效率较低。Boneh等[8]提出了基于关键字的公钥可搜索加密方案,将公钥密码体制引入可搜索加密领域,但是该方案只能在安全信道模型下应用。Baek等[9]提出了一种不需要安全信道的可搜索加密方案。Shao等[10]将可搜索加密和代理重加密[11]相结合,提出了带关键字搜索的代理重加密方案,实现了密文搜索与数据共享。
近年来,云存储为EHR的存储和共享带来了便利[12 - 14]。很多研究人员提出了基于云存储的EHR共享方案。文献[15]将混淆和RSA加密相结合,提出了基于云存储的EHR存储框架,实现了EHR数据机密性和用户的身份验证。Xu等[16]提出了云辅助的EHR共享方案,支持多关键字搜索并在EHR共享过程中保护患者的隐私。尽管这些方案在云环境下实现了EHR的数据安全和隐私保护,但仍然存在一个关键问题:云服务器并不是完全诚实可信的。如果EHR系统仅依赖于第三方云服务器,则很容易造成EHR数据的泄漏、篡改和滥用等问题。为了解决上述问题,研究人员提出了基于区块链[17]的EHR共享方案。Wang等[18]提出基于云和区块链的EHR共享方案,用云存储EHR密文,区块链存储安全索引,利用可搜索加密和代理重加密,实现了EHR共享过程中的隐私保护和访问控制。文献[19]提出了基于私有链和联盟链的EHR存储与共享方案,私有链存储EHR,联盟区块链存储安全索引,实现了EHR的安全搜索。Chen等[20]提出了一种基于区块链的EHR可搜索加密方案,EHR的关键字索引通过逻辑表达式构建并存储在区块链,实现了EHR搜索的可追溯性。
为了实现数据的细粒度访问控制和安全共享,Sahai等[21]提出了属性基加密算法。属性基加密算法被很多研究人员应用到了EHR数据共享中。文献[22]提出一种基于属性基签密方案,实现了EHR在云存储中的细粒度访问。Niu等[23]提出一种基于联盟链的EHR数据共享方案,将基于密文策略的属性基加密算法CP-ABE (Ciphertext-Policy Attribute-Based Encryption)[24]结合联盟链实现了EHR的安全共享和访问控制。文献[25]基于区块链和属性基加密算法提出了一个EHR数据存储与共享框架,实现了EHR的数据完整性和细粒度访问。
本文基于CP-ABE算法提出了一种云链协同存储的EHR数据安全共享方案。方案的创新点如下所示:
(1)医生用对称加密算法加密EHR数据,用CP-ABE算法加密对称密钥,用可搜索加密算法加密关键字生成安全索引。医生将EHR密文存储在医疗云,将安全索引存储在联盟链,实现了EHR数据的安全存储。
(2)数据用户将陷门上传到联盟链,联盟链节点负责关键字搜索。搜索成功后,数据用户获得EHR密文的存储地址,然后从医疗云获得EHR密文。当数据用户的属性满足访问策略时,可以解密EHR密文,实现了EHR数据的细粒度访问控制和安全共享。
(3)提出基于通配符的访问结构,使用通配符代替访问结构中的部分属性,实现了数据用户的隐私保护。并且使用代理重加密实现了数据用户的属性撤销。
2 预备知识
2.1 困难问题
2.2 访问结构
本文提出一种基于通配符的访问结构,如图1所示,其中,Ω为系统中所有属性的集合,atti⊆Ω,atti={vi,1,vi,2,…,vi,m}表示第i(1≤i≤Unum)个用户的属性集合,Unum表示系统中的用户总数,vi,j(1≤j≤m)表示第i个用户的属性集合atti中的第j个属性值。
Figure 1 Wildcard-based access structure图1 基于通配符的访问结构
例如,学生1的属性为{18,male,first,math},学生2的属性为{20,male,third,math},学生3的属性为{19,female,first,english}。为了和一年级数学学科的学生共享数据,构造访问结构o={age,gender,grade,subject}={*,*,first,math},年龄和性别为“不关心的属性”,用通配符*表示,则学生1能够共享信息。从访问结构中并不知道学生1的具体属性,仅知道该学生的年龄和性别,保护了该学生的隐私。
3 系统模型与安全模型
3.1 系统模型
本文方案的系统模型包括6个实体:权威中心、患者、医生、数据用户、联盟链和医疗云。系统模型如图2所示。
Figure 2 System model图2 系统模型
(1)权威中心。权威中心负责建立系统,并为参与者生成私钥,然后经安全信道发送给参与者。在属性撤销阶段,权威中心利用代理重加密更新密钥和密文。
(2)患者。患者构造访问结构并发送给医生。患者需要EHR时,通过存储地址从医疗云获得。
(3)医生。医生为患者生成EHR数据并从中提取关键字。医生加密EHR并将密文上传到医疗云,将关键字集合加密建立安全索引,并将安全索引、EHR存储地址和签名上传到区块链。
(4)数据用户。数据用户生成陷门并将陷门和身份上传到区块链搜索关键字。搜索成功后,数据用户获得EHR存储地址和EHR密文。
(5)联盟链。根据中心化程度的不同,区块链可分为3种类型:公有链、联盟链和私有链。联盟链部分去中心化,由多个医院共同建立和维护。联盟链节点执行共识协议将上传的数据以交易的形式存储在联盟链上。数据搜索时,联盟链节点运行搜索算法。
(6)医疗云。当医疗云接收到数据用户发送的EHR密文存储地址后,将存储地址对应的EHR密文发给数据用户。在属性撤销阶段,医疗云负责更新密文。
3.2 安全模型
本文方案的安全性基于DL假设和BDH困难问题。为证明方案的安全性,本文设计2个安全游戏:选择密文策略和选择明文攻击下的不可区分性IND-SCP-CPA(INDistinguishability against Selective Ciphertext-Policy and Chosen Plaintext Attack)以及选择关键字攻击下的不可区分性IND-CKA(INDistinguishability against Chosen Keyword Attack)。
(1)IND-SCP-CPA游戏。
系统初始化:敌手A声明挑战的访问结构o。挑战者B生成系统参数PP和系统主密钥msk。挑战者B将系统参数PP发送给敌手A。
阶段1在多项式时间内,敌手A做以下询问:
①私钥询问:敌手A对属性进行私钥询问。
②属性更新询问:敌手A通过提交属性v′i,j进行属性更新询问。
③私钥更新询问:敌手A通过属性v′i,j对更新的密钥sk′进行询问。
挑战敌手A向挑战者B发送等长消息F0和F1、身份δu和访问结构o,挑战者B随机选取τ∈{0,1}并将Fτ加密发送给敌手A。
阶段2敌手A进行和阶段1相同的询问,但是不能询问F0和F1。
猜测敌手A输出猜测τ′∈{0,1},如果τ′=τ,敌手A赢得游戏。敌手A赢得游戏的优势定义为:Adv=|pr[τ′=τ]-1/2|。
(2)IND-CKA游戏。
系统初始化挑战者B生成系统参数PP和系统主密钥msk。挑战者B将系统参数PP发送给敌手A。
阶段1在多项式时间内,敌手A进行以下询问:
①哈希询问:敌手A询问关键字w的哈希。
②私钥询问:敌手A对属性进行私钥询问。
③陷门询问:敌手A对关键字w进行陷门询问。
挑战敌手A将未经过陷门询问的等长关键字w0和w1发送给挑战者B,挑战者B随机选取τ∈{0,1}并生成安全索引Iwτ。
阶段2敌手A进行和阶段1相同的询问,但是不能询问w0和w1。
猜测敌手A输出猜测τ′∈{0,1},如果τ′=τ,敌手A赢得游戏。敌手A赢得游戏的优势定义为:Adv=|pr[τ′=τ]-1/2|。
4 具体方案与安全性证明
4.1 本文方案
本文方案包括系统建立、数据生成与存储、数据搜索与共享和属性撤销4个阶段。
(1)系统建立。
①系统初始化。
权威中心初始化系统。输入安全参数λ和系统中所有属性的集合Ω,权威中心运行算法1输出公共参数PP和系统主密钥msk。
算法1系统初始化
步骤1选择阶为p的乘法循环群G1和G2,g和h是群G1的生成元。定义双线性映射e:G1×G1→G2;
步骤4foratti⊆Ωdo
forvi,j∈attido
endfor
endfor
步骤5msk={α,ai,j,bi,j};
(2)密钥生成。
输入数据用户身份δu和属性Ωu,权威中心运行算法2输出私钥sk。
算法2密钥生成
步骤1计算d=α/δu;
步骤2forvi,j∈Ωudo
endfor
步骤3sk=(d,Di,Pi,Ri);
(2)数据生成与存储。
患者构造访问结构o,并把访问结构o发送给医生。医生为患者生成EHR明文F,并提取关键字集合W={w1,w2,…,wt},其中,t为关键字个数。医生用对称加密算法加密EHR,用访问结构o加密对称密钥k;同时医生加密关键字集合生成安全索引。
①电子病历加密。
输入EHR明文F、对称密钥k和访问结构o中所包含的属性Ωo,医生运行算法3输出EHR密文CF。
算法3电子病历加密
步骤2用对称加密算法加密EHR明文F:C2=Enck(F);
步骤3计算C3=H3(C0,C2)×rF;
步骤4forvi,j∈Ωodo
endfor
步骤5CF=(C0,C1,C2,C3,Ei,j,Li,j);
医生将EHR密文CF上传到医疗云,医疗云接收后将存储地址address返回给医生。
②安全索引生成。
输入关键字集合W={w1,w2,…,wt},医生运行算法4加密关键字集合生成安全索引IW。
算法4安全索引生成
步骤2for1≤l≤tdo
endfor
步骤3IW=(IR,Iw1,Iw2,…,Iwt);
输入安全索引IW,医生运行算法5对安全索引签名,输出安全索引签名σ。
算法5安全索引签名生成
步骤2σ=(S1,S2);
医生将安全索引IW、CF的存储地址address和签名σ提交到联盟链的数据池。
为了提高联盟链的记账效率,规定联盟链上的所有节点按照事先商定的顺序轮流记账。记账节点时刻监控数据池,记账成功后会得到一定的代币作为奖励。当某个节点不能履行记账责任时,则由其下一个节点代替记账,联盟链将扣除其一定的代币作为惩罚。
正确性验证如下所示:
e(Y1,S2)=e(gα,hrσH4(IW))=
Figure 3 Blockchain data structure图3 区块链数据结构
(3)数据搜索与共享。
当数据用户需要共享EHR时,数据用户需要生成陷门并在联盟链上搜索。
①陷门生成。
数据用户输入私钥和需要搜索的关键字集合W′={w′1,w′2,…,w′t},运行算法6生成陷门TD。
算法6陷门生成
for1≤l≤tdo
end
②关键字搜索。
数据用户将陷门TD和身份δu发送到联盟链。搜索节点收到TD和δu后,运行算法7进行关键字搜索。
算法7关键字搜索
returnaddress;
else
return⊥;
搜索成功后,搜索节点将EHR密文的存储地址address返回给数据用户,搜索节点得到一定的代币作为奖励。
正确性验证如下所示:
③密文验证。
数据用户收到address后,从医疗云获取EHR密文CF。数据用户运行算法8对EHR密文进行验证。
算法8密文验证
returnsuccess;
else
return⊥;
如果验证算法输出的信息是success,说明EHR密文没有被篡改或者缺失;否则说明EHR密文被篡改或者已经缺失。
正确性验证如下所示:
④解密。
数据用户从医疗云得到EHR密文后,运行算法9解密得到EHR明文。
算法9解密
步骤2计算k=C0⊕H2(ε);
步骤3解密:F=Deck(C2);
正确性验证如下所示:
k=C0⊕H2(ε)=
F=Deck(Enck(F))=F
(4)属性撤销。
①属性更新密钥生成。
当某个用户的属性v′i,j需要被撤销时,权威中心将用户的身份加入属性撤销列表,并运行算法10计算属性更新密钥rk。
算法10属性更新密钥生成
步骤1forv′i,j∈Ωdo
Ui,j=a′i,j/ai,j,Vi,j=b′i,j/bi,j;
endfor
步骤2rk=(Ui,j,Vi,j);
②私钥更新。
权威中心需要对用户私钥进行更新时。运行算法11计算更新后的私钥sk′。
算法11私钥更新
步骤1forv′i,j∈Ωdo
ifv′i,j≠vi,jthen
else
D′i=Di,P′i=Pi,R′i=Ri;
endfor
步骤2sk′=(d,D′i,P′i,R′i);
③密文更新。
权威中心对密钥更新完毕后,医疗云运行算法12计算出更新后的密文C′F。
算法12密文更新
步骤1forv′i,j∈Ωdo
ifv′i,j≠vi,jthen
else
E′i,j=Ei,j,L′i,j=Li,j;
endfor
C′0=C0,C′1=C1,C′2=C2,C′3=C3;
步骤2C′F=(C′0,C′1,C′2,C′3,Ei,j,Li,j);
4.2 安全性证明
定理1假设DL假设成立,则没有敌手能在多项式时间内以不可忽略的优势赢得IND-SCP-CPA游戏。
证明假设敌手A在概率多项式时间内能以不可忽略的优势ξ赢得IND-SCP-CPA游戏。本文建立一个挑战者B,可以计算出DL问题的解。给挑战者B一个DL实例(gt1,gt2,gt2t4,gt3+t4,gt1t3)和(gt1,gt2,gt2t4,gt3+t4,gT),挑战者B的目的是判定T=t1t3。
阶段1敌手A做如下询问:
③私钥更新询问:敌手A提交(δu,sk),其中sk询问过,v′i,j已经授权给δu。挑战者B更新List并返回一个新的私钥sk′给敌手A。
阶段2敌手A做如阶段1的询问,但是不能询问F0和F1。
□
定理2如果BDH困难问题成立,则没有敌手A能够在多项式时间内以不可忽略的优势赢得IND-CKA游戏。
阶段1敌手A做如下询问:
③陷门询问:当敌手A做陷门询问时,挑战者B查询列表。如果c=0,挑战者B定义陷门TD=gt2d=Rd;否则,挑战者B返回错误信息。
阶段2敌手A做如阶段1相同的询问,但是不能询问w0和w1。
猜测敌手A输出猜测τ′∈{0,1}。如果τ′=τ,则说明在询问中没有出现终止的情况下得到Iwτ=(gt3,e(gt1t2,H(wτ)))=(gt3,e(g,g)T),那么挑战者B成功提示的概率至少为ξ/(Ne)才能符合要求。
□
5 性能分析
5.1 功能比较
本文方案与文献[28-31]方案的功能比较如表1所示。由表1可知,本文方案既使用了区块链也使用了云服务器,文献[29]方案仅使用了区块链,文献[28,30,31]方案仅使用了云服务器。本文方案与文献[30,31]方案支持安全搜索和多关键字搜索,文献[28,29]方案不支持关键字搜索。本文方案和文献[28,31]方案实现了属性撤销,文献[29,30]方案没有实现属性撤销。
5.2 理论运算时间比较
由表2可知,在加密阶段,本文方案效率高于文献[28,29]方案的,文献[30,31]方案效率高于本文方案的,本文方案与文献[31]方案仅理论运算时间相差2Th。在解密阶段,本文方案效率高于文献[28-31]方案的。在关键字搜索阶段,本文方案效率高于文献[30,31]方案的,文献[30]方案效率最低。关键字个数越多,本文方案优势越明显。
5.3 数值模拟
数值模拟实验程序用C语言和PBC(Paring-Based Cryptography)编写,在PC机(联想G50-80,8 GB RAM,2.40 GHz CPU) 的Linux环境中运行。属性个数和关键字个数分别取10,20,30,40,50,结果取20次实验的平均值,如图4~图6所示。
Figure 4 Encryption time图4 加密时间
Figure 5 Decryption time图5 解密时间
Figure 6 Keyword search time图6 关键字搜索时间
由图4可知,对于加密算法,本文方案的运算时间低于文献[28,29]方案的,但是高于文献[30,31]方案的。本文方案的运算时间与文献[31]方案的相差很小,当属性个数为10时,两方案运算时间仅相差1 ms。
Table 2 Comparison of different schemes operation time
由图5可知,对于解密算法,本文方案的运算时间最短,当属性个数小于30时,文献[31]方案的解密运算时间最长;当属性个数为30时,文献[30,31]方案的解密运算时间相等,都是497 ms;当属性个数大于30时,文献[30]方案的解密运算时间最长。
由图6可知,对于关键字搜索算法,本文方案的运算时间最短,文献[30]方案的运算时间最长。文献[30]方案的运算时间随关键字个数的增加变化明显,本文方案和文献[31]方案的运算时间随关键字个数的增加变化不明显。
6 结束语
本文提出了一种基于属性的云链协同存储的电子病历共享方案,该方案用对称加密算法加密电子病历,用基于密文策略的属性基加密算法加密对称密钥,用可搜索加密算法加密关键字,实现了电子病历的细粒度访问控制和安全存储与共享。经过安全证明,该方案能够实现密文的安全性和关键字的安全性;数值模拟实验结果表明,该方案具有良好的性能,但是该方案的数据加密算法效率比某些对比方案的低,今后将继续深入研究属性基加密算法,提高算法效率。