APP下载

支持多种特性的基于属性代理重加密方案

2019-07-11冯朝胜罗王平秦志光袁丁邹莉萍

通信学报 2019年6期
关键词:私钥密文解密

冯朝胜,罗王平,秦志光,袁丁,邹莉萍

(1. 四川师范大学计算机科学学院,四川 成都 610101;2. 电子科技大学网络与数据安全四川省重点实验室,四川 成都 610054)

1 引言

如今,越来越多的企业将数据外包存储在云中,越来越多的人将个人信息存储在社交网络。然而,频发的信息泄露事件,使安全性和隐私性成为服务提供商必须面临的问题。解决外包数据存储安全的一种简单做法是在数据上传前进行加密,但加密又使数据共享变得非常困难。解决方法是采用密文策略基于属性加密(CP-ABE, ciphertext-policy attribute-based encryption)算法[1],该算法因具有“一次加密,多人分享”和细粒度访问控制等优势受到人们的广泛关注[2-3]。

然而,现有的CP-ABE因加解密效率低和密文访问策略更改而导致的重加密效率低的问题,影响了其应用和推广。解决外包云数据重新加密的一般方案是用户先将密文数据从云服务器下载至本地,利用该用户私钥对密文数据执行一次解密算法从而得到明文数据,使用新的共享访问策略对明文数据再次加密后将新的密文数据上传至云服务器存储并共享。显然,这种方法不但加重了用户客户端的计算负担,而且增加了云服务器与用户之间的通信开销,使它难以应用于实际的环境中。为了更有效地进行数据共享,在CP-ABE中引入代理重加密技术(PRE, proxy re-encryption)。由于代理重加密技术允许一个半可信代理将一个用户能解密的密文转换成另一个用户能解密的具有相同明文的密文,而不会泄露数据的明文和授权者的私钥,整个过程不需要解密,不需要代理方之外的任何其他方参与,因此,用户仅需要计算一个重加密密钥,将大部分重加密工作外包给云服务器完成,使上述问题得到解决。然而,现有的代理重加密方案普遍存在以下2个明显问题。

1) 仅满足代理重加密方案要求的部分特性。一个理想的代理重加密方案应满足5个特性[4-5]:单向性、非交互性、可重复性、可控性和可验证性。然而现有的方案普遍只具有其中的2个或者3个,降低了在实际应用中的实用性。

2) 无法抵御替换攻击。在密文策略基于属性代理重加密的算法中,代理不仅能够利用用户提供的重加密密钥转换该用户希望重加密的密文,而且也能用此密钥转换其他密文数据,若一个满足新共享访问策略的其他用户与代理勾结,委托方的其他密文数据将被泄露。另一方面,满足新共享访问策略的其他用户采用一定手段截获到委托方的重加密密钥,该用户可以利用其私钥解密出嵌入重加密密钥中的随机因子,再结合委托方的重加密密钥也可以解密出委托方的其他密文数据。

针对以上问题,本文在Bethencourt等[1]提出的CP- ABE方案的基础上,结合线性整数秘密共享方案(LISS, linear integer secret-sharing scheme)[6],提出了一种支持多种特性的基于属性代理重加密方案。该方案的特点如下。

1) 满足理想代理重加密方案所要求的所有特性。除了具有现有代理重加密方案普遍有的单向性、非交互性和可重复性外,还通过在加密时选择是否生成重加密密文解密时需要的一个密文子项实现了可控性,通过在数据密文中增加验证项来确保可验证性。

2) 能够防止替换攻击。为每个文件分配一个数据唯一标识符,并将其嵌入重加密密钥和数据密文中,只有当重加密密钥和文件密文的唯一标识符相匹配时,代理才能进行重加密操作。

3) 显著减少了客户端的计算负担。加密时,云服务器分担了近一半共享访问策略对应密文子项的计算工作;而解密时,客户端仅需要3次指数运算就能完成一个数据密文的解密工作。

2 相关研究

2007年,Bethencourt等[1]首先提出密文策略基于属性加密(CP-ABE)算法,在该算法中,用户私钥与属性集合相关联,数据密文与秘密共享访问结构相关联,只有用户的属性集合满足密文的秘密共享访问策略才能解密出该密文的明文数据,该方案在一般群模型和随机预言模型下可以对抗选择明文攻击(CPA, chosen plaintext attack)[7-8]。2011年,Waters等[9]提出一个采用线性秘密共享方案(LSSS, linear secret sharing scheme)实现秘密共享的CP-ABE,相比Bethencourt等[1]的方案,该方案在效率上有所提升。2014年,Balu等[10]为了解决Waters等[9]提出的CP-ABE方案中属性出现次数有限制这一问题,提出用 LISS代替 LSSS实现CP-ABE方案,并给出构造矩阵的规则。LISS和LSSS具有相同的表达力且同样基于d-BDH假设,不同的是,LSSS是在有限群上实现秘密共享,而LISS是在整数区间上实现秘密共享,LISS比LSSS具有更高的效率。2004年,Canetti等[11]提出了一种将CPA安全转换为选择密文攻击(CCA, chosen ciphertext attack)的方法,该方法的核心是签名。2007年,Ling等[12]采用 Canetti等[11]提出的转换方法,提出了一种具有CCA安全的CP-ABE方案,但该方案在设计签名公钥的验证时,对公钥的每一个比特生成一个密文子项,这不但增加了密文空间的大小,而且加重了加解密过程中用户客户端的计算负担。2010年,Zhao等[13]也同样采用一次签名算法提出一种具有CCA安全的基于属性的条件代理重加密方案。2009年,Liang等[14]为了解决CP-ABE共享访问策略更新问题,首次将代理重加密技术引入 CP-ABE中,提出密文策略基于属性代理重加密方案,该方案允许一个代理将一种共享访问策略下的密文转换为另一种共享访问策略下具有相同明文的密文,而代理无法获取数据明文,但该方案仅具有单向性、非交互性和可重复性,无法对抗选择密文攻击。为了解决这一问题,2013年,Liang等[15]提出一个CP-ABE代理重加密方案,该方案能对抗选择明文攻击和选择密文攻击,然而重加密密钥的生成和重加密都需要很大的计算量,且密文空间与重加密次数呈线性关系。为了弥补一般服务器计算能力和存储能力不足的问题,2015年,Liang等[16]又提出了利用云服务器来进行代理重加密,采用强不可伪造一次签名(OTS, one-time signature)技术[11]实现 CCA安全,但该方案过于复杂且不支持密文的多次重加密,与前面方案一样,仅具有单向性、非交互性。2010年,Luo等[17]提出的面向 CP-ABE的代理重加密方案则较好地解决了这一问题,该方案允许用户在重加密密钥中嵌入一个随机的参数,并利用新的共享访问策略对该参数加密,代理重加密后,只有满足新共享访问策略的用户解密出该参数才能解密出数据明文,在密文中增加一个密文子项控制该密文是否能重加密,使只有在加密或重加密时生成了该密文子项的密文才能被重加密。该方案虽然具有单向性、非交互性、可控性和可重复性,但是其共享访问结构仅支持AND门,加解密计算量随重加密次数呈线性增长。2015年,Li等[18]受Luan等[19]的具有 CPA安全的CP-ABE方案的启发,提出了一种具有CCA安全的 CP-ABE代理重加密方案,该方案与 Luo等[17]的方案一样具有单向性、非交互性、可重复性和可控性,但无法控制用户利用其私钥的多个与属性相关的密钥子项构造出一个并不具有的密钥子项,用户无法控制代理利用重加密密钥重加密该用户的其他密文。同年,Kawai[20]为了解决现有代理重加密方案生成重加密密钥时给用户带来繁重的计算负担,提出由授权中心来完成重加密密钥的生成工作,用户只需少量计算并向授权中心提出生成重加密密钥请求,但该方案不仅会造成授权中心的计算“瓶颈”,还失去了用户对重加密的控制,此外,该方案也仅具有单向性、非交互性。Fu[21]也提出一种具有单向性、非交互性、可重复性的基于属性的代理重加密方案。2016年,一种具有隐藏访问策略的代理重加密方案被 Zhang等[22]首次提出,该方案引入一种称为匹配再重加密的新技术,即在重加密之前,先利用代理重加密密钥和数据密文的特殊组件进行匹配计算,以检测该用户是否有权限进行重加密操作。但在2017年,Yin等[23]发现该方案并不能实现访问策略的隐藏,因为存在敌手能利用部分密文组件及系统公钥测试随机选择的属性集合是否在密文属性集合中的问题。为了解决这一问题,Yin等[23]提出一种改进的具有隐藏访问策略的代理重加密方案,该方案与 Zhang等[22]提出的方案一样,具有单向性、非交互性、可重复性和可控性,但两者均采用AND门共享访问结构,致使其共享访问策略的表达力较低。2017年,Sepehri等[24]提出一种能实现数据安全共享的基于属性代理重加密方案,该方案将用户属性集合与密文共享访问策略均采用向量表示,当用户属性集合向量与密文共享访问策略向量内积为0时,该用户才能重加密该数据密文。该方案尽管具有单向性、非交互性和可重复性,但过于复杂,且用户私钥和数据密文占用存储空间较大。同年,Ma等[25]提出一种可验证的外包加密和解密方案,加密和解密的外包运算分别由加密服务器(ESP, encryption service provider)和解密服务器(DSP, decryption service provider)完成。后来,Xiong等[26]认为该方案并不具有可验证属性,证明该方案的 ESP可以将伪造的中间密文返回给用户而不被检测到。Feng等[27]提出一种完全安全的基于属性代理重加密方案,但仅支持AND门共享访问结构,缺乏表达力。2018年,Ge等[28]提出了一种具有CCA安全的密钥策略基于属性代理重加密方案,该方案的代理重加密过程与Liang等[16]的方案类似,同样仅具有单向性、非交互性。除上述文献外,文献[29-31]也对代理重加密问题进行了研究,但其方案与上面讨论的方案类似。

从上面的分析不难看出,现有的方案普遍只支持单向性、非交互性,已有较好的代理重加密方案(如文献[17-18,22-23])虽然支持可重复性和可控性,但是在效率、安全性和访问结构的表达力方面还需要进一步的提高,几种方案的特性对比如表 1所示。此外,现有的方案都存在代理能够利用用户提交的重加密密钥重加密该用户的其他密文的问题,并且在加密或重加密过程中,用户客户端承担了过多的计算量。

表1 几种方案的特性对比

3 基本知识

3.1 双线性映射

设G和GT都是阶为大素数p的乘法循环群,g为G的生成元,e为双线性映射,即双线性映射e具有以下性质。

1) 双线性。对于任意的u,v∈G和有

3) 可计算性。对于所有的u,v∈G,e(u,v)都能被有效计算。

3.2 线性整数秘密共享方案

1) 对共享访问策略P的每个属性ai表示为Mu。

在LISS访问结构(Μ,)ρ中,M是访问矩阵,ρ是矩阵每一行Mi到属性ρ(i)的映射关系。

4 代理重加密算法与安全模型

4.1 算法定义

定义1支持多种特性的代理重加密方案(CPABPRE)由以下10个算法构成,其关系如图1所示。

1) Setup(U,A,k)→(PK,MK):初始化算法由授权中心执行,输入属性空间U、系统用户共有的虚拟属性A和安全参数k,输出系统公钥PK和系统主密钥MK。

2) KeyGen(PK,MK,S)→(SK):私钥生成算法由授权中心执行,输入系统公钥 PK、系统主密钥MK和用户属性集合S⊆U,输出与属性集合S相关联的用户私钥SK。

3) Encrypt(m,(M,ρ),PK)→(CT′):加密算法

4) OutEncrypt(CT′,PK)→(CT):外包加密算法由云服务器执行,输入用户计算的部分密文CT′和系统公钥PK,输出数据m的完整密文CT。

5)ReKeyGen(PK,SK,(M′,ρ′))→(RK):重加密由用户执行,输入待加密数据m、线性整数秘密共享LISS访问结构(M,)ρ和系统公钥PK,输出数据m与LISS相关联的部分密文CT′。密钥生成算法由用户执行,输入系统公钥 PK、用户私钥SK和新的线性整数秘密共享LISS访问结构(M′,ρ′),输出一个重加密密钥RK。若重加密密钥RK在用户私钥SK对应用户属性集合S满足密文的访问结构(M,)ρ时,代理可以利用该重加密密钥RK将该密文的访问结构(M,)ρ转换为新的访问结构(M′,ρ′)。

6)ReEncrypt(PK,CT,RK)→(CT*):重加密算法由云服务器执行,输入系统公钥 PK、与访问结构(M,ρ)相关联的密文CT和与访问结构(M′,ρ′)相关联的重加密密钥RK,当密文CT被设置为不能重加密或S|≠(M,ρ)时,输出⊥,否则输出与访问结构(M′,ρ′)相关联的密文CT*。

图1 10个算法的关系

7) ReEncryptVerify(F,C′,C0′)→(true):重加密验证算法由用户执行,输入CT密文组件C′、C0′和云服务器代理重加密计算结果F,若验证通过,输出true,否则直接输出⊥。

8) OutKeyGen(SK)→(TK,DK):转换密钥生成算法由用户执行,输入用户私钥 SK,输出外包云服务器部分解密的转换密钥TK和最后用户完全解密时使用的密钥DK。

9)*

OutDecrypt(CT,TK)→(F):外包解密算法由云服务器执行,输入密文CT和转换密钥TK,当S|=(M,ρ)时,输出密文CT的部分解密密文F*,否则直接输出⊥。

10) Decrypt(CT,F*,DK)→ (m):解密算法由用户执行,输入密文 CT、云服务器代理计算的部分解密密文*

F和转换密钥中用户保留的密钥DK,输出明文数据m。

4.2 代理重加密方案特性

代理重加密方案首先要具有正确性,正确性的定义如下。

对于任意安全参数k∈N、任意属性集合S(S⊆U∪A)、由U中属性构建的任意访问结构(M,ρ)和任意数据m∈{0,1}k,若Setup(U,A,k)→(PK,MK)、KeyGen(PK,MK,S)→(SK)、OutKeyGen(SK)→(TK,DK),对在系统中使用的属性集合S,当S|=(M,ρ)和S|=(M′,ρ′)时,有

除正确性外,代理重加密方案通常具有以下特性。

1) 单向性:代理可以利用用户提交的重加密密钥将一种共享策略下的密文CT转换为另一种共享策略下具有相同明文的密文CT*,但不允许利用该重加密密钥将密文CT*转换为密文CT。

2) 非交互性:加密方在构造重加密密钥过程中,不需要其他信任的第三方和授权中心参与。

3) 可重复性:代理可以对同一密文进行多次重加密。

4) 可控性:由用户在加密或重加密时决定密文是否可以重新加密。

5) 可验证性:加密方可以对代理进行重加密后的计算结果进行正确性验证。

4.3 安全模型

接下来,定义 CP-ABPRE方案的针对性(selective)CPA安全模型。

定义 2如果没有一个概率多项式时间(PPT,probabilistic polynomial-time)敌手Adv能够以不可忽略的优势赢得下面的游戏,则代理重加密方案达到sCPA安全。在游戏中,C是挑战者,k、U和A分别是安全参数、属性空间和虚拟属性。

预备阶段Adv选择挑战的访问结构(M′′,ρ′′)。

初始化C运行(PK,MK)←Setup(U,A,k)获得系统公钥PK和系统主密钥MK,并将PK发送给Adv。

阶段1敌手可以重复执行以下任何查询。

1) 私钥查询Osk(S):Adv提交一个属性集合S,该属性集合S不满足挑战访问结构(M′′,ρ′′),C 返回用户私钥SK←KeyGen(PK,MK,S)给Adv。

2) 重加密密钥查询Ork(S,(M′,ρ′)):Adv提交一个属性集合S(该属性集合S不满足挑战访问结构(M′′,ρ′′))和一个访问结构(M′,ρ′),C 返回重加密密钥 RK←ReKeyGen(PK,SK,(M′,ρ′))给Adv,其中用户私钥SK←KeyGen(PK,MK,S)。

挑战阶段Adv向C提交2个等长的明文m0和m1,C随机选择b∈{0,1},返回CT′←OutEncrypt(CT′,PK)给 Adv,其中CT′←Encrypt(mb,(M′,ρ′),PK)。

阶段2Adv继续阶段1的查询。

猜测Adv输出一个猜测值b′∈{0,1},如果b=b′,Adv赢得游戏。Adv赢得游戏的优势被定义为

5 方案构造

方案包括初始化、私钥生成、加密、外包加密、重加密密钥生成、重加密、重加密验证、转换密钥生成、外包解密和解密共10个算法。

1) 初始化:Setup(U,A,k)

k为系统安全参数。授权中心选择阶为大素数p的双线性群G和GT,记g∈G为G的生成元,双线性映射e:G×G→GT。设属性空间为U,其中的虚拟属性A为所有用户共有。选择g2∈G,a,b,α,β∈Z*p,对虚拟属性A和任意i∈U,选择TA、Ti∈G,计算定义散列函数定义编码变换:{0,1}k EG→。授权中心将系统公钥PK向云服务器和所有用户公开,系统主密钥 MK由授权中心秘密保存。系统公钥PK为

2) 生成用户私钥:KeyGen(PK,MK,S)

其中,DA和′ 为虚拟属性密钥子项。

3) 加密:Encrypt(m,(M,ρ),PK)

加密算法输入数据{0,1}k m∈,LISS访问结构(M,)ρ,其中M是一个l×q的矩阵,ρ是矩阵每一行Mi到属性ρ(i)的映射关系。

若将该密文设置为不能被重加密,只需去掉密文子项即可。

4) 外包加密:OutEncrypt(CT′,PK)

生成重加密密钥算法使用用户私钥SK和新的LISS访问结构(M′,ρ′)生成重加密密钥 RK,其中M′是一个l′ ×q′的矩阵,ρ′是矩阵每一行到属性ρ′(i)的映射关系。

6) 重加密:ReEncrypt(PK,CT,RK)

对密文共享访问策略计算

最后计算F为

完整的重加密密文*CT为

8) 生成转换密钥:OutKeyGen(SK)

由用户保存的密钥为DK=<δ>。

9) 外包解密:OutDecrypt(CT,TK)属性计算

对密文共享访问策略计算

最后计算F*为

10) 解密:*

Decrypt(CT,F,DK)

对于未被重加密的密文,数据所有者或共享用户将密文子项C、C1及云服务器部分解密F*从云服务器下载到本地。解密R的算法为

对于被重加密的密文,按照上述算法对随机因子的密文Crk解密得到E(gd),解码得dg。将重加密前的密文子项C、C1、C0′及重加密时计算的F从云服务器下载到本地,解密R的算法为

对于被多次重加密的密文,采用第一种解密算法解密出最后一次重加密的数据,再重复使用第二种解密算法,最后得出明文数据m。

6 特性与安全性分析

6.1 特性分析

1) 单向性

重加密密钥由用户私钥嵌入随机因子后的数据及随机因子与新访问结构(M',ρ')相关联的密文数据构成,在重加密密钥满足访问结构(M,ρ)的情况下,代理利用该重加密密钥将密文的访问结构由(M,ρ)转换为(M',ρ')时能计算出一个包含随机因子的半解密密文(此时若知道随机因子,就可以解密出明文数据),但缺少随机因子与访问结构(M,ρ)相关联的密文而无法将密文的访问结构由(M',ρ')转换为(M,ρ)。

2) 非交互性

重加密密钥计算过程由两部分构成:在用户私钥中嵌入随机因子和生成随机因子与新访问结构相关联的密文数据。然而这两部分都可以由用户客户端独立完成,不需要其他信任的第三方和授权中心参与。

3) 可重复性

重加密密钥由用户私钥嵌入了随机因子后的数据及随机因子与新访问结构相关联的密文数据构成,代理利用该重加密密钥重加密时,将原始密文转换为含有随机因子的半解密密文(此时若知道随机因子,就可以解密出明文数据),重加密后的密文由原始密文(除了C0)、半解密密文和随机因子的密文构成。再次重加密时,对随机因子的密文数据进行相同的操作即可达到多次重加密的目的。

4) 可控性

重加密密文在解密时,需要原始密文的一个密文子项C0′的参与才能解密,但原始密文解密时并不需要该密文子项,故该密文子项控制了加密或重加密后的密文是否可以再次重加密。

5) 可验证性

①如果数据所有者想要验证云服务器代理重加密结果是否正确,只需将密文子项C′、C0′及云服务器代理重加密结果F传回用户客户端,此时用户客户端已知gd,故用户客户端可以计算

6.2 抗替换攻击

为防止云服务器利用数据所有者提交的重加密密钥重加密数据所有者其他密文数据,从而导致满足新共享策略的用户可以非法解密数据所有者其他密文数据,在外包数据时为每个数据分配一个数据唯一标识符η,并将其嵌入重加密密钥和数据密文中。云服务器代理重加密时,只有嵌入重加密密钥和数据密文的数据唯一标识符匹配时,才能进行重加密操作。

为避免云服务器能够将重加密密钥子项和密文子项中的数据唯一标识符η直接替换为其他的数据唯一标识符,该方案采用了随机化方法,即在重加密密钥子项rkD中,用A

② 如果数据所有者想要验证云服务器是否按要求进行外包加密,在将待计算密文项上传的同时计算挑战的密文项。在收到返回的密文子项后,将挑战密文项与返回的对应密文项进行对比,相等即通过验证。

③ 如果数据所有者想要验证云服务器是否按要求进行外包解密[33],待用户客户端解密出数据m对η进行随机化,再使用对随机化;在密文子项C′A中,用rA对η进行随机化,再使用对随机化。

6.3 机密性

定理 1本文所提出的方案,可抵御针对性选择明文攻击。

证明假设敌手 Adv1在一般群模型和随机预言模型能以不可忽略优势攻破本文所提出的方案,那么可以基于Adv1构建敌手Adv2,使其可以在同样模型下攻破BSW方案,这与在一般群模型和随机预言模型下BSW方案可以抵御选择明文攻击矛盾,故本文所提出的方案在一般群模型和随机预言模型下可抵御选择明文攻击。接下来,说明敌手Adv2的构建过程。

预备阶段模拟器Adv2启动敌手Adv1,Adv1选择一个挑战访问结构(M′′,ρ′′),Adv2将其对应的访问结构树T传递给BSW方案的挑战者。

初始化敌手 Adv2获取 BSW 方案的公钥并将其发送给Adv1。

阶段 1Adv2初始化空表T、T1、T2,Adv1能完成如下查询。

1)H1(R,m):若(R,m,s)已经在T1中,返回s;否则选择一个随机值将(R,m,s)记录在T1中并返回s。

2) 随机预言机散列函数H2(R):若(R,r)已经在T2中,返回r;否则选择一个随机值{0,1}k r∈,将(R,r)记录在T2中并返回r。

3) 私钥查询Osk(S):敌手 Adv1可重复发出查询请求。Adv1发出一次查询后,Adv2对查询进行如下处理。

① 属性集合S|≠(M′,ρ′)。将S发送给BSW方案挑战者,由BSW方案挑战者利用密钥生成算法生成与S对应的私钥SK′并返回给 Adv2。Adv2选择一个随机数,由SK′计算出转换密钥TK,计算SK=(n,TK)。将 SK返回给 Adv1,将(S,SK,TK)存入到表T中。

4) 重加密密钥查询Ork(S,(M′,ρ′)):Adv1提交一个属性集合S和一个访问结构(M′,ρ′)。若S|≠ (M′,ρ′),Adv2返回RK←ReKeyGen(PK,SK,(M′,ρ′))给Adv1,其中SK←KeyGen(PK,MK,S)。

挑战阶段Adv1向Adv2提交2个等长的数据明文m0和m1,Adv2执行如下操作。

阶段2Adv1继续阶段1的查询。

猜测Adv1输出猜测值b′∈{0,1},Adv2忽视Adv1的猜测值。Adv2检索T1和T2以确定R0或R1是否出现在表中,换言之,确定 Adv1是否发起过H1(R,⋅)或H2(R)的查询。如果这2个数都出现或都没有出现在这2个表中,Adv2随机输出猜测值b′;如果只出现Rb′,Adv2输出b′。

7 性能分析

7.1 理论分析

下面从计算和存储2个方面讨论本文所提方案的性能。

1) 计算性能

由于数据处理时,最耗费时间的运算依次是双线性运算B和指数运算E(EG、ET分别表示G群、GT群的指数运算),因此用这2个指标来衡量性能。为了方便比较,假设每次加密或重加密后的密文能再次被重加密。

云服务器重加密时,计算虚拟属性的代价为2B。在共享访问策略对应逻辑关系都为“AND”的情况下,计算共享访问策略的每个属性ρ(i)都要参与一次指数运算和2次双线性运算,计算共享访问策略的代价为NPET+2NPB。计算F需要执行一次双线性运算,云服务器为新的共享访问策略中每个属性ρ(i)、虚拟属性的CA执行一次指数运算的计算代价为(1+NP)EG,云服务器重加密时的计算代价为(1+NP)EG+NPET+(3+2NP)B。用户客户端验证云服务器是否正确执行重加密时的计算代价为EG+B,故在整个重加密过程中,用户客户端的计算代价为(11+NP)EG+ET+B。

原始密文解密时,用户客户端需要对*F执行一次指数运算,验证需要两次指数运算,计算代价为3ET。重加密密文解密时,用户客户端还需要执行一次双线性计算,用户客户端解密重加密密文的计算代价为4ET+B。云服务器代理解密过程与云服务器重加密过程类似(除重加密过程中计算E(gd)部分密文子项),计算代价为NPET+(3+2NP)B。

几种方案的计算开销对比如表2所示。其中,NP表示共享访问策略中属性数量,NS表示用户私钥属性数量,N表示系统属性空间属性数量,|SYM|表示执行一次对称加密算法的计算开销,|OTS|表示执行一次签名算法的计算开销。本文方案的加密和生成重加密密钥的计算开销与文献[21]方案接近,而2种解密方式的计算开销在对比的几种方案中是最低的且为固定值。

表2 几种方案的用户客户端计算开销对比

2) 存储性能

在本文方案中,用户私钥由用户秘密保存,而用户数据则外包给云服务器存储。用户私钥密钥子项D和DB,共2个G群元素,另外每个属性包括2个G群元素(包括虚拟属性),故用户私钥存储代价为(4+2NS)|G|。用户数据密文子项C、C0、C0′和C′,共一个GT群元素和3个G群元素存储空间,虚拟属性共2个G群元素,共享策略中每个属性包括2个G群元素,数据密文存储代价为(5+2NP)|G|+|GT|。对于重加密密文,对随机因子生成一个与原始密文相同大小的密文,而原始密文仅保留C、′以及新生成的密文子项F,故重加密一次后的重加密密文存储代价为3|GT|+(7+2NP)|G|。其中,|G|表示G中一个元素所需的存储空间,|GT|表示GT中一个元素所需的存储空间,|σ|表示签名数据所需的存储空间。

表3 几种方案的私钥与密文存储空间占用对比

几种方案存储空间占用对比如表3所示。本文方案与文献[1]方案相比,为了抵抗满足重加密共享策略的用户与代理之间的共谋攻击,用户私钥增加了3个G群元素,而用户数据密文增加了2个G群元素;为了实现重加密可控和可验证性,各自增加了一个G群元素。故用户数据密文共增加了7|G|。

7.2 实验分析

为了评估本文所提出的代理重加密方案的性能,在Hadoop环境下采用Java语言实现了本文所提出的算法并对其进行了性能实验。在实现的算法中,采用双线性对加密库和CP-ABE开发工具包作为基础开发包,双线性映射和幂运算等有关椭圆曲线加密的操作均来自双线性对加密库 JPBC。从素数阶y2=x3+x中选取群G1、G2、GT,采用对称双线性映射e(g,g),即G1=G2=G,群G和GT中的元素长度为1 024位。实验的用户客户端使用的虚拟机配置为一个Intel(R) Xeon(R) CPU (E5-2620 2.0 GHZ),内存为1 GB,系统为CentOS6.5 64位。

加密、重加密密钥生成、原始密文解密和重加密密文解密实验分别针对文献[1]方案(仅有加密、原始密文解密)、文献[14,18,22-23]方案和本文方案各进行 20轮,每轮使用相同大小的数据和属性数量相同的共享访问结构(为了方便比较,共享访问结构的逻辑关系均取为“AND”),分配给用户的属性数量8个;每轮实验进行50次,取50次实验结果的平均值为最终实验结果,共享访问结构的属性数量依次递增。

文献[1,14,18,22-23]方案及本文方案的用户客户端加密时间对比如图2所示,文献[14,18,22-23]方案与本文方案的重加密密钥生成时间对比如图3所示。在2种对比方式中,每种方案的用户客户端计算时间都随共享访问结构属性数量的不断增加呈线性增长,但与文献[1,22-23]方案的加密时间相比,本文方案的加密时间更短且增长较为缓慢;与文献[14,18]方案的加密时间相比,本文方案具有相同的增长趋势,加密时间分别仅多了90 ms和37 ms,但与其重加密密钥生成时间相比,本文方案的重加密密钥生成时间更短,而且随着共享访问结构属性数量的增加,其他方案与本文方案的差距逐渐增大。

文献[1,14,18,22-23]方案以及本文方案的用户客户端原始密文解密时间对比如图 4所示,文献[14,18,22-23]方案和本文方案的用户客户端重加密密文解密时间对比如图5所示。在2种对比方式中,其他方案的解密时间都随着访问结构的属性数量不断增加,解密时间与属性数量呈线性关系,而本文方案的解密时间比较稳定,原始密文解密时间约4.5 ms,重加密密文解密时间约30.9 ms。

图2 用户客户端加密时间对比

图3 重加密密钥生成时间对比

图4 用户客户端原始密文解密时间对比

图5 用户客户端重加密密文解密时间对比

8 结束语

代理重加密技术在代理无法获取明文的情况下,利用用户提供的重加密密钥将一种共享策略下的密文转换为另一种共享策略下的密文,不但降低了用户客户端的性能需求,而且减小了密文数据往返传输所带来的带宽和时间开销。然而,已有的基于CP-ABE的代理重加密方案存在仅支持2个或3个特性、客户端计算量过大、代理能够利用用户提供的重加密密钥重加密该用户所有的密文数据等问题。针对这些问题,本文提出了一种支持多种特性的密文策略基于属性代理重加密方案。该方案支持多种特性的同时将绝大多数计算工作外包给云服务器,用户客户端仅需少量的计算。所提方案构建于经典CP-ABE方案的基础之上,不但能对抗恶意用户的合谋攻击,而且还能抵御满足重加密共享策略的用户与云代理服务器之间的合谋攻击,防止满足重加密共享策略的用户非法解密共享者其他密文数据。安全分析表明,所提方案能抵御针对性选择明文攻击。

猜你喜欢

私钥密文解密
清扫机器人避障系统区块链私钥分片存储方法
一种支持动态更新的可排名密文搜索方案
比特币的安全性到底有多高
基于模糊数学的通信网络密文信息差错恢复
Spatially defined single-cell transcriptional profiling characterizes diverse chondrocyte subtypes and nucleus pulposus progenitors in human intervertebral discs
炫词解密
解密“一包三改”
基于网络报文流量的协议密文分析方法
密钥共享下跨用户密文数据去重挖掘方法*
炫词解密