摘要

条件代理广播重加密(CPBRE)是一种半信任代理,可以将满足一定条件的Alice密文转换为一组用户密文。但是,代理不能了解有关底层明文的任何信息。传统的CPBRE方案不支持对条件的灵活控制。本文提出了一种新的基于细粒度策略的条件代理广播重加密算法(CPBRE-FG)。在CPBRE-FG方案中,用访问树生成重加密密钥,并在一组描述条件下构造密文。当且仅当这些条件满足访问树时,代理才能对密文进行转换。我们将CPBRE-FG的概念形式化,并提出一个有效的CPBRE-FG方案。最后,我们在随机预言模型中证明了它对选择密文攻击(CCA)的安全性。

关键词:条件代理重加密;代理广播重加密;访问政策;随机预言模型。

引言

代理重加密(PRE)是Blaze、Bleumer和Strauss在Eurocrypt98 (Blaze et al., 1998)中提出的,它使半信任代理能够将爱丽丝的密文转换为鲍勃的密文。但是,代理不能了解关于Alice的私钥和底层明文的任何信息。Alice可能不需要对所有密文进行转换,而只需要代理对满足一定条件的密文进行转换。为了捕捉这种情况,Weng等人(2009)引入了条件代理重加密(C-PRE)的概念。在他们的工作之后,Chu等人(2009)将C-PRE的概念扩展到CPBRE,其中代理可以将Alice的密文转换为一组用户的密文,例如她的整个员工。
然而,以前的C-PRE和CPBRE方案不支持任何条件上的布尔组合。例如,在一个教育行政管理系统中,教学秘书的密文被加密在一组关键词“日期:7月”、“地点:罗马201”、“主题:信息安全报告”和“参与者:教授”下。秘书收到密文后,如果密文满足以下条件,就可能会转发给整个系的老师:
本文引入了细粒度策略的条件代理广播重加密的概念。在CPBRE-FG方案中,密文用一组关键字W加密,用访问树T生成重加密密钥,当且仅当W满足T时,代理可以将Alice的密文转换为一组用户的密文。

相关工作

代理重加密

代理重新加密是由Blaze、Bleumer和Strauss在Eurocrypt98 (Blaze et al., 1998)中首次提出的,它允许代理将Alice的密文转换为Bob的密文,而不暴露底层的明文。他们提出了双向PRE方案,通过代理将密文从Alice转换到Bob,或者从Bob转换到Alice。在ACM CCS 2005中,Ateniese等人(2005)提出了第一个使用双线性映射的具有CPA安全性的单向PRE方案。在PKC08中,Libert和Vergnaud(2008)提出了一个没有随机预言的可重放的CCA安全单向PRE方案。然而,上述所有方案仅在选择模型中是安全的。为了填补这一空白,Weng等人(2010)在自适应模型中提出了第一个cca安全的单向PRE方案。在CANS 2008中,Deng等人(2008)提出了一种没有配对的双向PRE方案。在此之后,Shao和Cao(2009)和Chow等人(2010)提出了不配对的单向PRE方案。

条件代理重加密

为了实现对加密密文的灵活控制,Weng等人(2009)引入了条件代理重加密的概念,即只有满足Alice设定的某个条件的密文才能被重新加密。类似地,Libert和Vergnaud(2008)在PKC 2008中提出了一个PRE方案,支持基于授权和基于关键字的授权。在prosec 2009中,Fang等人(2009)提出了一种匿名条件代理重加密方案。之后,在2012年,Fang等人(2012)提出了一种模糊条件代理重加密方案,该方案支持条件容错。在ACISP 2009中,Chu等人(2009)提出了一种新的原语——条件代理广播重加密,代理可以将Alice的密文转换为一组用户的密文,只要该密文满足特定的条件。

我们的贡献

本文首次引入了细粒度策略的条件代理广播重加密的概念。在本文中,我们首先定义了一个访问树,并提出了一个CPBRE方案。最后,在决策n-BDHE假设下,证明了该方案对自适应访问树和自适应身份攻击是安全的。

路线图

我们将在第2节中提供定义和复杂性假设。随后,我们提出了我们的CPBRE-FG方案,并在第三节中证明了它的CCA安全性。最后,在第4部分,我们总结了我们的论文。

预备知识

双线性映射

设G和GT是两个具有相同素数阶p的可乘循环群,g是G的生成子,双线性配对是一个双线性映射,具有以下性质(Boneh和Boyen, 2004;Boneh和Franklin, 2001):
  1. 对于所有的,都有

  2. 对于所有的,有一个高效地计算的算法。

n-BDHE假设

我们系统的安全性是基于一个称为决策双线性Diffie-Hellman指数(BDHE)的复杂性假设(Boneh et al., 2005)。

和元素T 2 GT时,对手的任务是确定标记是否为gi,并定义对手A的优势为:
其中是随机选择的。如果对于所有的概率多项式时间(PPT)对手A是可忽略的,我们说相对于(G,GT)的n-BDHE假设成立。

细粒度策略的条件代理广播重加密

在本节中,我们将给出细粒度策略的条件代理广播重加密的定义及其安全模型。我们借用了基于密钥策略属性的加密的概念。我们使用访问树来描述访问策略,其中每个内部节点是一个阈值门,叶子与关键字相关联。使用这种方法,我们可以分别使用n-out- n和1-out- n阈值门来表示具有“与”和“或”门的树。当且仅当密文对树的节点分配了满足树的条件时,用户将能够使用提供的重新加密密钥重新加密密文。

定义1 [访问树(Goyal等人,2006)]。访问树T:我们在Goyal等人(2006)中加入了访问树的定义。设T是表示一个访问结构的树。树的每个非叶节点表示一个阈值门,由其子节点描述一个阈值。设numx为节点x的子节点数,kx为其阈值,则有0 <kx≤numx。当kx = numx时,它是一个与门,当kx = 1时,阈值是一个或门。树的每个叶节点x由一个条件关键字和一个阈值kx = 1描述。我们将访问树的根设为深度0。设为所有非叶节点的集合,LNT为所有叶节点的集合。我们表示树p(x)中节点x的父结点。函数关键字(x)仅在时定义,它表示与树中的叶节点x关联的条件关键字。访问树T还定义了每个节点的子节点之间的排序,即节点的子节点编号从1到num。函数inex(z)返回一个与节点z相关联的索引,其中索引值是唯一分配给访问树中的节点的。
满足访问树:设T是根为r的访问树,Tr是根在节点x的子树,因此T与Tr相同。Tx(W)=1表示一组条件W满足访问树Tx。如果,那么Tx(W)=1当且仅当,如果,计算节点x的所有子z的Tz(W), Tx(W)返回1当且仅当至少kx孩子返回1。

定义2 (CPBRE-FG):一种(一次性)细粒度策略的代理广播重加密方案,由以下算法组成::
Setup(λ,n):在输入安全参数λ和最大用户数n时,输出公钥PK和主密钥msk。
  • Extract(PK, msk, i):输入公钥PK,主密钥msk和一个用户,输出用户i的秘密密钥ski
  • Encrypt(PK, S, m, W):对输入的公钥PK,一个用户集,消息m和一个描述性关键字集W,输出用户集S的条件集W的密文C。
  • RKGen(PK, ski, S', T):输入公钥PK,用户i的秘密密钥ski,一个用户集和一个访问树T,输出重加密密钥
  • :输入公钥PK,重加密密钥,用户i,两个用户集S,S'和一个原始密文C,如果T(W)=1,输出重加密的密文CR,否则输出错误符号
  • :Decrypt2表示原密文解密算法。在输入公钥PK、用户i的私钥ski、用户i、用户集S和用户集S的密文C时,输出明文m或错误符号
  • :Decrypt1表示重新加密的密文解密算法。输入公钥PK,用户j的私钥skj,两个用户i, j,两个用户集S,S'和一个重新加密的密文CR。输出明文m,或一个错误符号
正确性:CPBRE-FG方案的正确性意味着,对于任意用户集S, S',条件集W, W',C=Encrypt(PK,S,m,W)
如果,则有
如果,则有
下面我们将提供CPBRE-FG方案的基于博弈的安全模型。我们在选择集模型中考虑了CCA的安全性。在选择集模型中,对手应该在挑战用户集S*和条件集W*之前提交。

定义3 (IND-sSet-CCA博弈):接下来我们考虑以下两个在对手A和挑战者C之间的安全博弈。
博弈1:IND-O-CCA博弈,考虑原始密文的不可区分性。
1. Init:对手A选择一个目标用户集和条件集W*
2. Setup:挑战者C运行Setup(n)获取公钥PK和主密钥msk,并将PK交给A。
3. 查询阶段1:对手A进行以下查询:
  • Extract(i):挑战者运行,将ski返回给a,否则返回
  • :挑战者运行,其中,返回到A。
  • :挑战者运行,其中 和,将结果返回给A。
  • Decrypt2(i, S, C):挑战者运行Decrypt2(PK, ski, i, S, C),其中ski = KeyGen(PK, msk, i),将结果返回给A。
  • Decrypt1(i, j, S, S', CR):挑战者运行Decrypt1(PK, skj, i, j, S, S', CR),其中skj=KeyGen(PK, msk, j),将结果返回给A。
在查询阶段1,A有以下限制:
  • 对于任意, A都不能满足Extract(i),
  • 如果,A不能使RKGen(i, T, S')和Extract(j)成立。
4. 挑战:一旦A决定查询阶段1结束,它输出两个相等长度的消息(m0;m1)。挑战者C选择位,挑战密文为。最后,将C*返回给对手A。
5. 查询阶段2:A继续执行查询阶段1中的查询,具有以下限制:
  • 对于任意i∈S*, A不能取Extract(i);
  • 如果I∈S*, j∈S',T (W*)∈1,A不能使RKGen(I, S', T)和Extract(j);
  • 如果i∈S*, j∈S', A不能使ReEnc(i, S*, S', C*)和Extract(j);
  • 对于任意i∈S*,A不能生成
  • 如果,且, A不能生成
6. 猜测:A输出猜b。如果b'=b,对手获胜。
我们将上述对手A称为IND-O-CCA对手。其优势定义为:

博弈2:IND-Re-CCA博弈,考虑重新加密的密文的不可区分性。
博弈2考虑重新加密的密文的安全性。安全的补充定义也捕获了他们无法区分重加密的密文。对于单一使用方案,对手可以访问所有重加密密钥,因此重加密预言将变得无用。而且Decrypt2预言也没必要了。
1. Init:对手A选择一个目标用户集和条件集W*
2. Setup:挑战者C运行Setup(n)获取公钥PK和主密钥msk,并将PK交给A。
3. 查询阶段1:对手A进行以下查询:
  • Extract(i):挑战者运行,返回ski给A,否则返回,注意,A不能对任何做Extract(i)。
  • RKGen(i, S', T):挑战者运行,其中,返回到A。
  • Decrypt1(i, j, S, S', CR):挑战者运行Decrypt1(PK, skj, i, j, S, S', CR),其中skj=KeyGen(PK, msk, j),将结果返回给A。
4. 挑战:一旦A决定查询阶段1结束,它就输出两个相等长度的消息(m0, m1)。挑战者C选择一个比特b∈{0,1},设置挑战密文为,其中i∈S,i∉S*, C=Encrypt(PK,mb, S, W*), T(W) = 1。最后,将C*返回给对手A。
5. 查询阶段2:A继续执行查询阶段1中的查询,具有以下限制:
  • 对于任意i∈S*, A不能取Extract(i);
  • 如果i∈S,j∈S*, A不能生成Decrypt1(i, j, S, S*, C*)。
6. 猜想。A输出b'。如果b' = b,对手获胜。
我们将上述对手A称为IND-Re-CCA对手。其优势定义为:
如果一个模糊条件代理广播重加密方案对所有的PPT对手都可以忽略,则该方案是IND-sSet-CCA安全的。

提出CPBRE方案

我们的构建

我们首先定义ω∈Zp的拉格朗日系数Δω,F(x)和Zp中的元素集合F:
我们的构造由以下算法组成:
Setup(λ,n):设(p, g, g, GT, e)为一个双线性映射参数。M={0,1}k表示消息空间。随机选择α,γ∈Zp,Z∈G和计算,i=1,2,…,n,n+2,…,2n。设为抗合谋哈希函数。计算v=gγ。输出公钥PK和主密钥msk如下:,msk = y。
KeyGen(PK;msk;i):用户i的私钥计算如下:
  • Encrypt(PK, S, m, W):加密消息m∈M为用户集,条件集W。随机选取R∈GT,计算t=H1(m,R),输出密文C=(W,C1,C2,C3,C4,C5,C6)。



RKGen(PK, ski, S', T):在输入,S'∈{1,2,…,n}和T。首先,对于树T中每个非叶节点x,随机选择σ∈{0,1}k和一个多项式qx。这些多项式从根节点r开始,按照如下自上自下的方式选择。它调用过程RKG(T;H5(σ)),其中过程RKG(T;H5(σ))定义如下:
对于树中的每个节点x,设置多项式qx的度dx比注的阈值kx小1,即dx=kx-1。对于根r,取多项式qr的qr(0)=H5(σ)和dr的其他点,随机确定其完整。对于任意其他节点x,设qx(0) = qp(x)(index(x)),随机选择其他点dx来完全定义qx,一旦多项式确定,对于每个叶节点x,设ω=keyword(x)。因此,给代理重加密密钥的计算方法如下:
选择一个随机值,计算
设a ={ax: x∈LNT}, b={bx: x∈LNT}。
选取随机值,计算和集合:


输出重加密密钥
  • :输入一个重加密密钥rki,T,S'=(T, a, b, rk1, rk2, rk3, rk4, rk5)和一个密文C =(W,C1,C2,C3,C4,C5,C6)。检查以下等式是否成立:


否则,定义递归算法NodeReEnc(C,rki,T,S',x),它接受原始密文C,重加密密钥rki,T,S'和树中的一个注释x作为输入。
1. 对于叶节点x,设ω=keyword(x),如果ω∈W,则
否则,输出
2. 如果x是一个非叶节点,考虑递归情况,对于x的所有子节点z,它调用NodeReEnc(C, rki,T,j, z)并将输出存储为Tz。设Fx为任意kx大小的子注z集合,且。如果不存在该集合,则节点不满足,函数不满足则返回。否则,让,并且计算:




并返回结果。
最后,计算:

输出重加密的密文:
  • Decrypt2(PK,ski,i,S,C):输入一个私钥ski和一个原始密文C=(W, C1, C2, C3, C4, C5, C6),按如下步骤进行:
首先检查方程(1)-(3)是否成立。如果不是,输出并终止。否则,
计算:,并检查以下

是否成立。如果是,返回m,否则返回
  • :输入私钥skj和重新加密的密文,处理如下:
首先检查方程是否成立:


如果不是,输出。否则,计算


检查是否满足


如果不,返回,否则计算

检查是否满足。如果是,返回m;否则返回
正确性:我们现在解释上述方案的正确性:
对于原始密文C=(C1, C2, C3, C4, C5, C6),我们有:



对于重新加密的密文CR=(C1, C2, C5, rk1, rk2, rk3, rk4, rk5, rk6),我们有



我们PBRE方案的安全性

在本小节中,我们将证明我们的方案的IND-sSet-CCA安全性。安全博弈分析如下。
定理1:如果H1, H2, H3, H4, H5是目标抗碰撞哈希函数,那么在决定n-BDHE假设下,上述方案在随机预言模型中是安全的IND-sSet-CCA。
引理1:如果存在一个可以破坏我们方案的IND-O-CCA对手A,那么我们可以构造一个可以解决确定性n-BDHE假设的模拟器B。
证明:给B一个决定n-BDHE实例,并决定或T是GT中的随机元素。初始为空的随机预言H1, H2, H3, H4, H5由B控制如下:
如果A查询(m, R)到随机预言H1,B在H1列表中搜索一个条目(m, R, t),如果存在,返回t给A。否则,B随机选择一个,返回s到A,并将(m, R, t)添加到H1列表中。
如果A查询(R)到随机预言H2,B在H2列表中搜索一个条目(R, k),如果这个条目存在,返回k给A。否则,B选择一个随机k∈{0,1}k,返回k给A',并将(R, k)添加到H2列表中。
如果A查询到随机预言H3,B搜索H3列表的条目。如果存在,则将返回到A。否则,B随机选取一个,计算。返回ψ为A,并将加到H3列表中。
如果A查询(ω)到随机预言H4,B在H4列表中搜索一个条目,如果存在该条目,则返回给A,否则B选择一个随机计算。返回到A,并添加H4列表。
如果A查询()到随机预言H5,B搜索H5列表中的条目()。如果存在这样的条目,则返回到A。否则,B随机选择。返回到A,并添加()到H5列表。
B接下来维护以下最初为空的表。
  • KeyList:记录元组,这是秘密密钥的信息;
  • ReKeyList:记录元组(β1, i, S', T, rki,T,S', σ, R, flag1),存储查询RKGen(ski, S', T)的信息。注意,flag1=1表示重新加密密钥是有效的,否则flag1=0表示重新加密密钥是一个随机值。
  • ReEncList:记录元组(β1, S, S', C, CR, flag2),存储查询ReEnc(i, S, S', C)的信息。注意:flag2=1表示重新加密的密文是通过有效的重加密密钥生成的,否则flag2=0表示重加密的密文是随机重加密密钥生成的。
1. Init:对手任意选择一个挑战用户集,条件集
2. Setup:模拟器B随机选取μ,∈Zp,Z∈G和集合。B设置公钥为。B把PK给了A。
3. 查询阶段1:A发出一系列查询,B响应如下:
  • Extract(i):如果i∈S*, B终止。否则B首先搜索KeyList,如果(β, i, ski)存在于KeyList,返回结果为ski。否则,B产生一个偏置的硬币β,使Pr[β=1]=δ为一些δ,这将在稍后确定。
  • 如果β=0,B输出一个随机位并终止。
  • 如果β=1,B计算。注意,我们有:
  • RKGen(i, S',  T):B检查KeyList中没有元组(*, j, skj),如果i∈S*, j∈S'和T(W*)=1,其中*是通配符。如果检查不成立,B终止。否则,B将搜索ReKeyList中是否有元组(*, i, S',T, rki,T,S', σ,  R,  *)。如果是,B返回rki,S',T,作为结果。否则,B进行如下操作:
如果KeyList中存在(1,i,ski),B使用ski生成真实方案中的重加密密钥rki,S',W'签证算法RKGen。返回重加密密钥给A,并添加到ReKeyList,其中σ, R在RKeyGen算法中是随机选择的。
否则,B抛一个有偏差的硬币。如果β=1,B查询Extract(i)预言机获得滑雪,然后生成rki,T,S'签证算法RKGen在真实的方案。返回重加密密钥rki,T,S'到A和(1,i,ski)和(*,i,S',T,rki,T,S',σ,R,1)到KeyList和ReKeyList。如果β=0,B设{a=(aωω), b=(bω=ρω):ω∈keyword(ω)}为随机选择的,则B构造为加密随机σ, R为真实方案。B将重加密密钥转发给A,并将(*,i,S',T,rki,T,S',σ,R,0)添加到ReKeyList
  • ReEnc(i, S, S', C):B首先搜索ReEncList中是否有元组(i, S, S', C, CR, *)。如果是,B返回结果为CR,其中*为通配符。否则,B进行如下操作:
如果ReKeyList中存在, B使用rki,T,S'生成真实方案中的CR签证算法ReEnc。返回CR到A,并添加(i, S, S', C, CR, *)到ReEncList。注意,C=Encrypt(PK, S, m, W),T(W)=1。
否则,B首先发出查询,获得重加密密钥rki,T,S'。接下来,B生成CR并添加(i, S, S',C, CR, *)到ReEncList
  • Decrypt2(i,S,C):B首先验证方程(1)-(3)。如果方程不成立,输出并终止。否则,B收益:
如果(1,i,ski)存在于KeyList中,使用ski来恢复m。
否则,B发出Extract(i)查询来获取ski,并使用ski来恢复m。
  • Decrypt1(i,j,S,S',CR):B首先验证方程(4)-(5)。如果方程不成立,输出并终止。否则,B收益:
如果KeyList中存在(1,j,skj),则使用skj恢复m。
否则,B发出Extract(j)查询来获取skj,并使用skj来恢复m。
4. Challenge:一旦A决定查询阶段1结束,它就输出两个相等长度的消息(m0, m1)。B随机选取B∈{0,1},R*∈GT。设任意选取的t*, h = gt*。B计算:







其中B查询到随机预言H3的条目。B返回到a。注意,如果T=e(gn+1, h),我们有。因此C*是一个有效的挑战密文。否则,如果T是G2中的一个随机值,那么在对手的视图中C*与b是独立的。
5. 查询阶段2:A使用IND-O-CCA博弈中描述的限制继续查询阶段1中的查询。
6. 猜想:A输出猜b,如果b'=b,则输出1,意思是T=e(gn+1, h);否则输出0,表示T是G2中的一个随机值。
概率分析:如果B不中止,则A的视图与实际方案相同。我们将Abort定义为在模拟查询过程中B终止的事件。让q表示所有查询的总数,我们有,在处最大。使用δopt,概率至少是,其中e是自然对数的基数。因此,我们有:

这就完成了引理1的证明。
引理2:如果存在一个可以破坏我们方案的IND-Re-CCA对手A,那么我们可以构造一个可以解决确定n-BDHE假设的模拟器B。
证明:引理2的证明与引理1的证明几乎相同,只是在挑战阶段,挑战者按以下方式构造挑战重加密的密文。B随机选取。设任意选取的t*, h=gt*。B计算:



然后B构建,方法与博弈1相同。

结论和未决问题

在本文中,我们引入了细粒度策略的条件代理广播重加密的概念,它允许代理一次将用户的密文转换为一组用户的密文,只要密文中的关键字满足访问树。提出了一种细粒度策略的有条件代理广播重加密方案,并证明了该方案在随机oracle中抗选择密文攻击的安全性。这项工作激发了许多有趣的问题,例如标准模型中的CCA安全CPBRE-FG方案和没有随机预言的CPBRE-FG方案。