Cramer-Shoup方案的CCA安全性证明在之前的博文里已经证明过了,但由于Cramer-Shoup方案的证明太过繁琐,那篇博文也写了近七千字才草草完结,里面遗留了一个命题未证明,这里新开一篇博文将此命题的证明完整给出。另外我在证明这个命题时发现老师关于此命题的原证明存在一些问题,我一直没有完全弄明白,老师的讲义里也没有完整叙述,这篇博文我主要给出一个我认为比较合适的证法。
预备知识
Cramer-Shoup方案使用了抗目标碰撞的摘要函数(弱Hash函数)HASH=(HGen,T),假设G是一个群生成算法,λ是安全参数。
Cramer-Shoup加密方案:CS=(Gen,Enc,Dec)
Gen:输入1λ,生成(G,q,g1)←G(1λ),随机生成Zq中的元素x1,x2,y1,y2,z1,z2和a←Z∗q,计算
输出pk=(g1,g2,X,Y,Z,Ts(⋅))和sk=(x1,x2,y1,y2,z1,z2)
Enc:对于输入pk和消息m∈G,随机选取r←Zq,r≠0,计算
输出密文(u1,u2,v,c)
Dec:输入密文(u1,u2,v,c)和私钥sk=(x1,x2,y1,y2,z1,z2),顺序计算
如果v=v′输出m,否则输出⊥
这个方案的正确性是非常显然的,如果消息m诚如上述方式进行加密,则一定能够通过v=v′的检测且最后解密一定能成功解密出m。
之前的博文未解决的一个命题就是
Pr[E6]≤Qq其中Q表示敌手A询问应答器的次数,当然为多项式次,事件E5,E6的定义为
讲义中的证明存在疑问
首先给出实验的具体情况,即Expt3,Expt5,Expt6的详细对比,这里Expt3永远是最基础的实验,Expt5,Expt6均是在Expt3基础上添加新的验证得来的。
Exp3:input1λpk,sk←CSschemepk=(g1,g2,X,Y,Z,Ts(⋅))sk=(x1,x2,y1,y2,z1,z2)A(pk)askDecsk(⋅)(m0.m1)←A(1λ,pk)r∗1,r∗2←Zq,r∗1≠r∗2u∗1=gr∗11,u∗2=gr∗22δ←{0,1},c∗:=(u∗1)z1(u∗2)z2⋅mδα∗:=Ts(u∗1,u∗2,c∗)v∗:=(u∗1)x1+α∗y1(u∗2)x2+α∗y2A(pk,u∗1,u∗1,v∗,c∗)askDec∗sk(⋅)δ′←A(pk,u∗1,u∗1,v∗,c∗)ifδ′=δoutput1else0 |
Exp5:input1λpk,sk←CSschemepk=(g1,g2,X,Y,Z,Ts(⋅))sk=(x1,x2,y1,y2,z1,z2)A(pk)ask¯Decsk(⋅)(m0.m1)←A(1λ,pk)r∗1,r∗2←Zq,r∗1≠r∗2u∗1=gr∗11,u∗2=gr∗22δ←{0,1}c∗←G,α∗:=Ts(u∗1,u∗2,c∗)v∗:=(u∗1)x1+α∗y1(u∗2)x2+α∗y2A(pk,u∗1,u∗1,v∗,c∗)ask¯Dec∗sk(⋅)δ′←A(pk,u∗1,u∗1,v∗,c∗)ifδ′=δoutput1else0 |
这里Expt3与Expt5的区别是Expt5两个阶段的解密应答器都多了一个条件,若u2=ua1∧v=ux+α1,则输出c(uz1)−1,否则输出⊥,其中
g2=ga1x:=x1+ax2y:=y1+ay2z:=z1+az2通过简单的计算之后可以发现,这里的检验和Expt3中的检验仅仅是多了一个u2=ua1而已。
我们要研究E6这个事件,首先来看Expt3与Expt6的对比
Exp3:input1λpk,sk←CSschemepk=(g1,g2,X,Y,Z,Ts(⋅))sk=(x1,x2,y1,y2,z1,z2)A(pk)askDecsk(⋅)(m0.m1)←A(1λ,pk)r∗1,r∗2←Zq,r∗1≠r∗2u∗1=gr∗11,u∗2=gr∗22δ←{0,1},c∗:=(u∗1)z1(u∗2)z2⋅mδα∗:=Ts(u∗1,u∗2,c∗)v∗:=(u∗1)x1+α∗y1(u∗2)x2+α∗y2A(pk,u∗1,u∗1,v∗,c∗)askDec∗sk(⋅)δ′←A(pk,u∗1,u∗1,v∗,c∗)ifδ′=δoutput1else0 |
Exp6:input1λpk,sk←CSschemepk=(g1,g2,X,Y,Z,Ts(⋅))sk=(x1,x2,y1,y2,z1,z2)A(pk)ask¯Decsk(⋅)(m0.m1)←A(1λ,pk)r∗1,r∗2←Zq,r∗1≠r∗2u∗1=gr∗11,u∗2=gr∗22δ←{0,1}c∗←G,α∗:=Ts(u∗1,u∗2,c∗)v∗:=(u∗1)x1+α∗y1(u∗2)x2+α∗y2A(pk,u∗1,u∗1,v∗,c∗)ask^Dec∗sk(⋅)δ′←A(pk,u∗1,u∗1,v∗,c∗)ifδ′=δoutput1else0 |
Expt6的要求其实是更多的,它也依托于Expt5,结合Expt5可知Expt3与Expt6的区别有两个,一是Expt6的两个阶段的解密应答器都要验证u2=ua1,不满足就直接输出⊥;二是Expt6的第二阶段的解密应答器还要求若有敌手询问的密文(u1,u2,v,c)满足(u1,u2,c)≠(u∗1,u∗2,c∗)但是α=α∗,则直接回答⊥并停机,故第一阶段多了一个规则,第二阶段多了两个规则。
Expt3与Expt6就这两点区别, 但讲义里说E6发生一定有u2≠ua1且v=ux1+αy11ux2+αy22,这个我认为并不正确。首先E6发生,则敌手构造的密文必通过Expt3的验证,通不过Expt6的验证,既然通过Expt3的验证,则只需v=ux1+αy11ux2+αy22即可,u2是否等于ua1对Expt3来说是无所谓的,因为它只验证v;既然通不过Expt6的验证,可以分别在第一阶段与第二阶段考虑,若在Expt6的第一阶段无法通过验证,必有u2≠ua1,可以发现此时敌手构造的密文满足u2≠ua1且v=ux1+αy11ux2+αy22,此时讲义的断言就是正确的。
但若敌手构造的密文在Expt6的第二阶段无法通过验证,第二阶段是有两个规则的,如果u2≠ua1,输出⊥;如果(u1,u2,c)≠(u∗1,u∗2,c∗)但是α=α∗输出⊥。这两个规则只要满足一个就输出⊥,如果满足的是第二个,一定有u2≠ua1吗?我觉得是不一定的,比如令u1=u∗1,u2=u∗2,c≠c∗,此时必有u2=ua1,但此时只要控制c≠c∗使得摘要函数Ts出现碰撞
α=Ts(u1,u2,c)=Ts(u∗1,u∗2,c∗)=α∗即可使得敌手构造的密文满足第二个规则,应答器输出⊥,事件E6发生,但此时u2=ua1。
注意这里的碰撞,我们不关注于怎么找到具体的α,我们只关注于这种碰撞出现的可能性,这种可能性现在当然不为0,也就是说有可能出现,那就足够了,所以我觉得讲义里说 E6发生一定有u2≠ua1且v=ux1+αy11ux2+αy22是存在疑问的。
个人感觉较为合理的证明
这里给出一个我认为比较合理的证明,首先原命题是要证明Pr[E6]≤Qq,即事件E6发生的概率是可忽略的,有了这个可忽略就可以利用其它一些命题证明Cramer-Shoup方案是CCA安全的,推导如下
AdvccaA,CS(λ)=|Pr[E1s]−12|=|Pr[E2s]−12|=|Pr[E2s]−Pr[E3s]+Pr[E3s]−Pr[E4s]+Pr[E4s]−12|≤|Pr[E2s]−Pr[E3s]|+|Pr[E3s]−Pr[E4s]|+|Pr[E4s]−12|≤3q+2AdvddhA1,G(λ)+Pr[E4]=3q+2AdvddhA1,G(λ)+Pr[E5]=3q+2AdvddhA1,G(λ)+|Pr[E5]−Pr[E6]+Pr[E6]|≤3q+2AdvddhA1,G(λ)+|Pr[E5]−Pr[E6]|+Pr[E6]≤3q+2AdvddhA1,G(λ)+Pr[F6]+Qq≤2AdvddhA1,G(λ)+2AdvtcrA2,HASH+3+Qq但实际上,仔细观察这个推导过程,如果我们能够证明事件E5发生的概率是可忽略的,就可以达到和事件E6发生概率可忽略一样的效果,一样可以证明Cramer-Shoup方案是CCA安全的,所以这里我们转向推导事件E5发生的概率是可忽略的,但实际上这个推导过程里依旧要用到事件F6,其定义为
但由于Expt5第二阶段的应答器并不是^Dec∗sk(⋅),故需要对F6做一些修改,具体如下
实际上这个F6发生的概率也是可忽略的,证明方法与原来的证明一模一样,只需要将构造的寻找第二原像的敌手中的Expt6换成Expt5即可。
首先对事件E5发生的概率进行分析
首先F6发生的概率是可忽略的,故只要证明Pr[E5|¬F6]是可忽略的即可,实际上这也是后面的主要工作。
Expt5的解密应答器拒绝解密有两种情况,一是在第一阶段不满足某个规则而拒绝,二是在第二阶段不满足某个规则而拒绝,只要我们能证明在¬F6的条件下无论是第一阶段还是第二阶段拒绝的概率都是可忽略的即可。
第一阶段
首先来看第一阶段,注意F6是对第二阶段的应答器做出的限制,所以¬F6对第一阶段完全没有影响,故此时的E5出现意味着敌手提供的密文(u1,u2,v,c)满足u2≠ua1且v=ux1+αy11ux2+αy22,分别用指数形式表示有
r1:=logg1u1,r2:=logg2u2,α:=Ts(u1,u2,c),β:=logg1v则u2≠ua1等价于r1≠r2,v=ux1+αy11ux2+αy22等价于γ=β。注意(u1,u2,v,c)是敌手构造的密文,所以u2≠ua1是完全可能的,则此时有
Pr[E5|¬F6]=Pr[E5]≤Pr[u2≠ua1∧v=ux1+αy11ux2+αy22]=Pr[r1≠r2∧γ=β]=Pr[r1≠r2]Pr[γ=β|r1≠r2]≤Pr[γ=β|r1≠r2]接下来就要考虑r1≠r2的情况下,γ=β的概率,首先对γ=β的意义做一下分析,γ=β等价于v=ux1+αy11ux2+αy22,实际上对于敌手而言,如果敌手使用标准的加密生成(u1,u2,v,c),则v=ux1+αy11ux2+αy22是显然成立的,但注意这里要求r1≠r2,也就是u2≠ua1,这与标准的加密是相背离的,所以就相当于敌手在规则之外构造了一个密文,然后交给解密应答器,解密应答器再验证v等不等于ux1+αy11ux2+αy22,也就是γ是不是等于β,那这是就不一定成功了,这里β可以理解为敌手生成的,γ是解密应答器根据私钥生成的。
下面考虑x1,x2,y1,y2与γ的关系,可以得到如下线性方程组
(xyγ)=(1a00001ar1ar2αr1aαr2)(x1x2y1y2)注意r1≠r2,a≠0,故此方程系数矩阵的秩一定为3,可对其进行初等行变换得到如下结果
(xyγ−r1x−r1y)=(1a00001a0a(r2−r1)0aα(r2−r1))(x1x2y1y2)上面方程中的r1,r2是敌手给的,α也相当于是敌手给的,至于a,解密应答器在生成公私钥对时可以将a固定,故一旦敌手给出密文,上述方程的系数矩阵就是确定的,另外对一个解密应答器而言,一旦公钥确定,那么x=x1+ax2,y=y1+ay2就是确定的,但即便如此,我们也可以合理假设x2,y2是Zq中的随机元素。
在这样的情况下,考虑上述方程组的第三个等式
γ−r1x−r1y=a(r2−r1)x2+aα(r2−r1)y2显然在敌手给出密文后,上面的式子只有x2,y2是Zq中的随机元素,其余都是确定的值,故对任一个γ∈Zq,可以固定y2的值,由于a≠0,r1≠r2,故一定存在唯一的一个x2∈Zq使得上式成立,故x2,y2随机取时,γ也一定随机选取,故在这样的情况下,γ等于β这个定值的概率就是1q,显然为可忽略的。
第二阶段
再来看第二阶段,第二阶段敌手得到了挑战密文(u∗1,u∗2,v∗,c∗),下设
r∗1:=logg1u∗1,r∗2:=logg2u∗2,β∗:=logg1v∗,r∗:=logg1c∗然后敌手以密文(u1,u2,v,c)向第二阶段的解密应答器进行询问,实际敌手此时给出的u1,u2,c必满足
α=Ts(u1,u2,c)≠Ts(u∗1,u∗2,c∗)=α∗这是非常显然的,分析如下
1,若α=α∗且(u1,u2,c)=(u∗1,u∗2,c∗)成立,则由v∗计算的形式v=ux1+αy11ux2+αy22=(u∗1)x1+α∗y1(u∗2)x2+α∗y2=v∗,则(u1,u2,v,c)=(u∗1,u∗2,v∗,c∗),此时Expt3不可能验证通过,故此事件不可能出现。
2,若α=α∗且(u1,u2,c)≠(u∗1,u∗2,c∗)成立,非常显然这就是事件F6发生,但前面已经提过,我们的分析都是在¬F6条件下的,所以这种情况不会出现。
所以可以认为α≠α∗,则有下面方程组成立
(xyβ∗γ)=(1a00001ar∗1ar∗2α∗r∗1aα∗r∗2r1ar2αr1aαr2)⋅(x1x2y1y2)当敌手得到挑战密文后,a,r∗1,r∗2,r∗,α∗也就确定了,当敌手以(u1,u2,v,c)询问解密应答器时,r1,r2也就确定了,故此时系数矩阵完全确定,矩阵的行列式为
det(M)=a2(r2−r1)(r∗2−r∗1)(α∗−α)≠0显然系数矩阵是可逆矩阵,则设s=−a(r2−r1)[a(r∗2−r∗1)]−1,t=(αr1+α∗r∗1s)y,对上述方程组进行初等行变换可得
(xyβ∗−r∗1xγ−r1x+s(β∗−r∗1x)−t)=(1a00001a0a(r∗2−r∗1)α∗r∗1aα∗r∗2000−a(αr1+α∗r∗1s)+aαr2+saα∗r∗2)⋅(x1x2y1y2)考虑第四个等式,则有
γ=−s(β∗−r∗1x)+r1x+t+y2(−a(αr1+α∗r∗1s)+aαr2+saα∗r∗2)非常显然的是上式y2的系数−a(αr1+α∗r∗1s)+aαr2+saα∗r∗2必不为0,否则根据上面化简的矩阵可知,此矩阵不可逆,与原矩阵可逆矛盾。接下来的分析就与阶段一的分析类似,当敌手以(u1,u2,v,c)询问第二阶段的解密应答器后,上式的右边只有y2是Zq上的随机元素,其余均为定值,且由于y2的系数不为0,则γ也一定是Zq上的随机元素,则此时的γ等于一个确定的β的概率就是1q,显然为可忽略的。
两个阶段的合并
综上,我们证明了两个阶段都成立Pr[E5|¬F6]=1q,故整体的一次实验中当然有Pr[E5|¬F6]=1q,当然这是单次询问下的概率,E5发生是指总共Q次询问中,只要有某一次询问时发生即可认为E5在整体上发生,则可知在总共Q次询问中Pr[E5|¬F6]=Qq,由此有
Pr[E5]=Pr[F6]Pr[E5|F6]+Pr[¬F6]Pr[E5|¬F6]≤Pr[F6]+Pr[E5|¬F6]≤2AdvtcrA2,HASH+Qq显然E5发生的概率可忽略,则原来博文里最后Cramer-Shoup方案CCA实验总的区分优势AdvccaA,CS(λ)可以改写为
AdvccaA,CS(λ)=|Pr[E1s]−12|=|Pr[E2s]−12|=|Pr[E2s]−Pr[E3s]+Pr[E3s]−Pr[E4s]+Pr[E4s]−12|≤|Pr[E2s]−Pr[E3s]|+|Pr[E3s]−Pr[E4s]|+|Pr[E4s]−12|≤3q+2AdvddhA1,G(λ)+Pr[E4]=3q+2AdvddhA1,G(λ)+Pr[E5]≤3q+2AdvddhA1,G(λ)+2AdvtcrA2,HASH+Qq=2AdvddhA1,G(λ)+2AdvtcrA2,HASH+3+Qq这也就证明了最后的结论。
总结
至此,Cramer-Shoup方案的CCA安全性就完全证明了,这个证明非常的繁琐,但非常的有规律,一步一步往下走即可,从中也能体会到原作者为什么要在加密方案里设置一些特殊的步骤。其实最有意思的部分还是这篇博文给出的证明,利用一些代数的性质,也巧妙利用了私钥的不同形式,居然真的完成了证明。
- 本文作者: sklois-gjx
- 本文链接: http://yoursite.com/2020/05/16/Cramer-Shoup方案中的一个未证明的命题/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!