-
在已有文献中门限方案大都是CPA安全的[1-3],而真正达到CCA安全的门限方案很少.文献[4]中分析了门限方案很难达到CCA安全的原因,也就是在门限方案中每一次部分解密之前先要进行密文份额有效性检验,而检验需要用到整体私钥,但是门限方案中每个解密服务器不可能拥有私钥(它们有的只是部分私钥),因此我们希望解密过程中的有效性可以公开检验,使得每个解密服务器都可以独立进行检验.虽然文献[5]中的门限方案做到了这一点,但解密并不高效.本文构造了一个既能达到CCA安全,又能公开验证密文有效性的高效的基于身份的非交互门限加密方案(TIBE).
全文HTML
-
为了清楚地描述加密方案的安全性概念,密码学中经常会提到一个交互游戏.游戏有两个参与者,一个称为挑战者,另一个是攻击者.挑战者作为加密方案的所有者建立系统,攻击者对系统发起挑战,挑战者接受攻击者的挑战.
一个公钥密码方案的安全性概念可以由弱到强分为选择明文攻击安全(简称CPA安全),非适应性选择密文攻击安全(简称CCA1)以及适应性选择密文攻击安全(简称CCA2)3个级别.若非特别说明,下文中提到CCA安全均指CCA2安全.
-
下面介绍基于身份的公钥密码体制的形式化定义及其安全模型.基于身份的加密方案的安全性定义最早由文献[6]提出,我们这里采用文献[7]中更为简洁的定义.
-
一个基于身份的加密方案IBE=(Setup,KeyD,Enc,Dec)由4个多项式时间算法构成.
Setup(k)算法中可信机构PKG输入安全参数k,输出一个二元组(PK,msk).其中PK是主公钥,msk是主私钥. PKG公开PK,保密msk.记为(PK,msk)←Setup(1k).
KeyD(ID,msk)算法中PKG收到用户ID后,为ID分发私钥SKID,记为SKID←KeyDmsk(ID).
Enc(PK,ID,M)算法中信息发送方用ID加密信息M,输出密文C,记为C←EncPK(ID,M).
Dec(ID,SKID,C)算法中拥有身份ID的用户用私钥SKID解密,记为M←DecSKID(ID,C).
-
IBE的选择身份安全性定义可以通过以下挑战者
$\mathscr{C}$ 和攻击者$\mathscr{A}$ 之间的游戏来描述,对于该安全性的定义具体可见文献[6-8].攻击者$\mathscr{A}$ 在选择身份CPA安全游戏中的成功优势[6]定义为Adv$\mathscr{A}$ ,IBEIND-ID-CPA(k)=$\left| {\mathit{Pr}_\mathscr{A}^{IBE}\left[{b = b'} \right] - \frac{1}{2}} \right|$ .如果对任何多项式时间的攻击者
$\mathscr{A}$ ,存在一个可忽略的函数negl(k),使得Adv$\mathscr{A}$ ,IBEIND-ID-CPA(k)≤negl(k),那么就称这个基于身份的加密方案在选择身份攻击下具有不可区分性,或者称为选择身份CPA安全.基于身份的加密方案的CCA安全定义与CPA安全定义最大的不同是攻击者除了可以询问私钥,还能对除了挑战密文之外的密文做解密询问. -
接下来简单介绍基于身份的门限密码(简记为TIBE)的形式化定义及其安全模型.
-
一个基于身份的门限加密方案包括以下7个算法:
Setup(n,t,k)算法中输入解密服务器个数n,门限值t,安全参数k,输出一个三元组(PK,VK,Kmsk),其中PK是系统参数,VK是验证密钥. Kmsk=(msk1,msk2,…,mskn)是n个主密钥份额组成的向量,解密服务器i拥有(i,mski)用于获得私钥份额.
ShareKeyGen(PK,i,mski,ID)算法中输入系统参数PK,身份ID以及主密钥份额(i,mski),输出ID的第i个解密私钥份额dki=(i,
$\mathop {dk}\limits^ \wedge $ i).ShareVerify(PK,VK,ID,dki)算法中验证dki是否是身份ID的有效解密份额,输出“Valid”或者“Invalid”.
Combine(PK,VK,ID,{dk1,dk2,…,dkt})输出身份ID对应的私钥SKID或者“⊥”.
Encrypt(PK,ID,M)算法中输入系统参数PK,身份ID和信息M,输出密文C.
ValidateCT(PK,ID,C)算法验证C是否为有效密文,输出“Valid”或者“Invalid”.
Decrypt(PK,ID,SKID,C)算法解密输出明文M或者“⊥”.
-
TIBE的安全性需要考虑选择身份攻击CPA安全以及密钥生成一致性两方面.可以用两个游戏来描述:选择身份攻击CPA安全游戏和密钥生成一致性游戏[5].
在选择身份攻击CPA安全游戏中攻击者的优势定义为Adv
$\mathscr{A}$ ,TIBEIND-ID-CPA(k)=$\left| {\mathit{Pr}\left[{b = b'} \right] -\frac{1}{2}} \right|$ ;密钥生成一致性游戏中攻击者的优势定义为Adv$\mathscr{A}$ ,TIBECD-ID(k)=Pr[攻击者获胜].如果对任何多项式时间的攻击者
$\mathscr{A}$ 以及任意的n和t(0<t≤n),存在可忽略的函数negl(k),使得Adv$\mathscr{A}$ ,TIBEIND-ID-CPA(k)≤negl(k)和Adv$\mathscr{A}$ ,TIBECD-ID(k)≤negl(k)都成立,那么就说TIBE方案是选择身份攻击CPA安全的.
1.1. 安全性概念
1.2. 基于身份的公钥密码体制及其安全性
1.2.1. 基于身份的加密方案的形式化定义
1.2.2. 基于身份的加密方案的安全性
1.3. 基于身份的门限密码体制及其安全性
1.3.1. 基于身份的门限加密方案的形式化定义
1.3.2. 基于身份的门限加密方案的安全性
-
目前CCA2被认为是公钥加密方案的安全性概念中最强的,为了实现加密方案的CCA安全,文献[9]提出一个将CPA安全的加密方案转化成CCA安全的加密方案的简单方法,转化方法如下:
设∏:=(
$\mathscr{K}$ ,$\mathscr{E}$ ,$\mathscr{D}$ )是一个CPA安全的加密方案,H:{0,1}k$\xrightarrow{{}}$ {0,1}l是一个Hash函数.1)
$\overline{\mathscr{K}}$ (1k):=$\mathscr{K}$ (1k)2)
$\overline{\mathscr{E}}$ pkH:{0,1}k-k0×{0,1}k0$\xrightarrow{{}}$ {0,1}*,定义为:$\overline{\mathscr{E}}$ pkH(x,r):=$\mathscr{E}$ pk((x||r),H(x||r)),其中x∈{0,1}k-k0且r∈{0,1}k0.3)
$\overline{\mathscr{D}}$ skH(y):{0,1}$\xrightarrow{{}}$ * {0,1}k-k0∪{null}定义如下其中:[
$\mathscr{D}$ sk(y)]k-k0指的是$\mathscr{D}$ sk(y)的前(k-k0)比特,“*”指存在$\mathscr{D}$ sk(y)使得y=$\mathscr{E}$ pk($\mathscr{D}$ sk(y),H($\mathscr{D}$ sk(y))).文献[9]证明了通过这样的转化,CPA安全的解密方案确实能达到CCA安全,得到了如下的CCA安全转化定理.定理1 假设∏=(
$\mathscr{K}$ ,$\mathscr{E}$ ,$\mathscr{D}$ )是一个CPA安全的加密方案,则$\overline{\Pi }$ =($\overline{\mathscr{K}}$ ,$\overline{\mathscr{E}}$ ,$\overline{\mathscr{D}}$ )是随机预言器模型下CCA2安全的加密方案. -
下面将上述转化方法应用到一个选择身份攻击CPA安全的IBE中得到一个随机预言器模型下CCA安全的IBE.
假设∏=(Setup,KeyD,
$\mathscr{E}$ ,$\mathscr{D}$ )是一个选择身份CPA安全的IBE方案,H:{0,1}k+k0$\xrightarrow{{}}$ {0,1}l是一个安全Hash函数,下面构造∏′=(Setup,KeyD,Enc,Dec).Setup(k)算法中可信机构PKG输入安全参数k,输出一个二元组(PK,msk),其中PK是主公钥,msk是主私钥. PKG公开PK,保密msk,记为(PK,msk)←Setup(1k).
KeyD(ID,msk)算法中PKG在收到身份ID后,为身份ID分发私钥SKID,记为SKID←KeyDmsk(ID).
Enc(PK,ID,M)算法中对于信息m∈{0,1}k,随机选择r∈{0,1}k0,同样用主公钥和身份ID加密,记为C←
$\overline{\mathscr{E}}$ PK,IDH(m,r)=$\mathscr{E}$ PK,ID((m||r),H(m||r))=(y1,y2).Dec(ID,SKID,C)算法中拥有身份ID的用户先检查密文是否有效.若有效,用私钥SKID解密,记为m←
$\overline{\mathscr{D}}$ SKIDH(ID,C)=[DSKID(ID,C)]k,其中[DSKID(ID,C)]k表示DSKID(ID,C)的前k个比特.否则,拒绝解密,并输出“null”.定理1保证了∏′是一个CCA安全的IBE.
2.1. CPA转CCA的简单方法
2.2. 构造CCA安全的IBE
-
下面构造一个CCA安全的TIBE方案实例.
-
设BDH假设成立,H:{0,1}k→
$\mathbb{Z}$ p是一个安全的Hash函数,再假设e:$\mathbb{G}$ ×$\mathbb{G}$ →$\mathbb{G}$ 1是一个双线性映射[10],其中群$\mathbb{G}$ 1中元素的二进制长度不超过k.Setup(n,t,k)算法设
$\mathbb{G}$ 是p阶群,在$\mathbb{G}$ 中随机选择生成元g,g2,h1以及一个t-1次随机多项式f∈$\mathbb{Z}$ p[X].令α=f(0),g1=gα,mski=g2f(i).服务器i的主密钥份额为(i,mski).设置系统参数PK=($\mathbb{G}$ ,g,g1,g2,h1),主密钥份额集Kmsk=(msk1,…,mskn),公开的验证密钥为VK=(gf(1),…,gf(n))=(u1,…,un).ShareKeyGen(PK,i,mski,ID)算法随机选r∈
$\mathbb{Z}$ p,计算wi,0=mski·(g1IDh1)r,wi,1=gr,然后输出身份ID的第i个会话私钥份额dki=(i,(wi,0,wi,1)).ShareVerify(PK,VK,ID,dki)算法中为了验证dki是身份ID的有效会话私钥份额,判断e(ui,g2)·e(g1IDh1,wi,1)=e(g,wi,0)是否成立,若成立,输出“Valid”;否则,输出“Invalid”.
Combine(PK,VK,ID,{dk1,dk2,…,dkt})算法中如果上一步验证未通过,输出“⊥”并退出,否则选择λ1,…,λt∈
$\mathbb{Z}$ p,使得α=f(0)$\sum\limits_{i=1}^{t}{{{\lambda }_{i}}f\left( i \right)}$ ,然后计算w0=$\prod\limits_{i=1}^{t}{{}}$ wi,0λi,w1=$\prod\limits_{i=1}^{t}{{}}$ wi,1λi,输出身份ID对应的会话私钥dID=(w0,w1).Encrypt(PK,ID,M)算法中为了加密M∈{0,1}k-k0,进行以下两步
(a) 随机选v∈{0,1}k0,令s=H(M||v);
(b) 计算并输出密文C=(y1,y2,y3)=(e(g1,g2)s
$\oplus $ (M||v),gs,g1s·IDh1s).ValidateCT(PK,ID,C)算法中为了验证C=(y1,y2,y3)是否为有效密文,判断e(y2,g1IDh1)=e(y3,g)是否成立,若成立,输出“Valid”;否则,输出“Invalid”.
Decrypt(PK,ID,dID,C)算法中如果密钥有效性或者密文有效性检验有一个通不过,那么拒绝解密;否则,输出明文M′=
${{\left[{{y}_{1}}\oplus \frac{e\left( {{y}_{2}}, {{w}_{0}} \right)}{e\left( {{y}_{3}}, {{w}_{1}} \right)} \right]}^{k-{{k}_{0}}}}$ . -
如果C=(y1,y2,y3)是ID加密的有效密文,并且dID是ID的有效会话私钥,那么解密一定是正确的,因为(w0,w1)=(g2α(g1IDh1)r,gr),其中r=r(λ1+…+λt).进一步,利用双线性性质就有
假设BDH问题是难解的,本文构造中所使用的文献[5]中的基于身份的门限方案已经被证明了是选择身份CPA安全的,按照文献[9]中的方法转化得到我们构造的基于身份的门限方案,于是结合定理1不难得到下面的定理.
定理2 假设BDH问题是难解的,那么上述构造得到的TIBE是CCA安全的.
3.1. 方案描述
3.2. 方案的正确性与安全性
-
本文利用文献[9]中提高安全性的方法,提出一个既能达到CCA安全,解密私钥份额的有效性又能公开验证的基于身份的门限加密方案(TIBE),比文献[5, 7]中提高安全性的方法更加高效.因为已有文献中CPA安全到CCA安全的转化需要在加密时额外加入一个一次签名,导致传输密文长度增大(密文多了验证密钥和签名两部分).在传输效率上本文的构造比之前的方法至少提高了两倍.