如果关于 G 的 DDH 假设成立,且 H 是抗碰撞的,那么CS-PKE 是 CCA2 安全的。【证明】安全规约。
Game 0. 即为 ExpPKE,ACCA2(κ).
Game 1. 修改 Game 0 的 Enc 中的表述为 sk 表示的等价表述,见棕色部分;从敌手角度来看 Game 0 和 Game 1 完全相同.
Cpp←Setup(1κ)(pk,sk)←KeyGen(1κ)x1,x2,y1,y2,z1,z2←Zqc=g1x1g2x2,d=g1y1g2y2,h=g1z1g2z2pk=(c,d,h)sk=(x1,x2,y1,y2,z1,z2)m/⊥←Dec(sk,C)α=H(u1,u2,e);if u1x1+αy1u2x2+αy2=v then return ⊥else m=e⋅u1−z1u2−z2b←{0,1}C∗←Enc(pk,mb)r∗←Zq;u1∗=g1r∗,u2∗=g2r∗e∗=mb⋅hr∗=m⋅u1∗z1u2∗z2α∗=H(u1∗,u2∗,e∗)v∗=cr∗dα∗r∗=u1∗x1+y1α∗u2∗x2+y2α∗C∗=(u1∗,u2∗,e∗,v∗)m/⊥←Dec(sk,C)α=H(u1,u2,e);if u1x1+αy1u2x2+αy2=v then return ⊥else m=e⋅u1−z1u2−z2A wins iff b′=b⟶pp,pk⟵C=(u1,u2,e,v)⟶m/⊥⟵(m0,m1)⟶C∗=(u1∗,u2∗,e∗,v∗)⟵C=(u1,u2,e,v)=C∗⟶m/⊥⟵b′Adecryption querieschoose m0,m1decryption queriescompute b′ Game 2. 处理哈希碰撞,当哈希值相等时不做处理;此时 Game 1 和 Game 2 的差别可以被哈希的抗碰撞性 bound,即 Game 1≈CRGame 2.
Cpp←Setup(1κ)(pk,sk)←KeyGen(1κ)x1,x2,y1,y2,z1,z2←Zqc=g1x1g2x2,d=g1y1g2y2,h=g1z1g2z2pk=(c,d,h)sk=(x1,x2,y1,y2,z1,z2)m/⊥←Dec(sk,C)α=H(u1,u2,e);if u1x1+αy1u2x2+αy2=v then return ⊥else m=e⋅u1−z1u2−z2b←{0,1}C∗←Enc(pk,mb)r∗←Zq;u1∗=g1r∗,u2∗=g2r∗e∗=m⋅u1∗z1u2∗z2α∗=H(u1∗,u2∗,e∗)v∗=u1∗x1+y1α∗u2∗x2+y2α∗C∗=(u1∗,u2∗,e∗,v∗)m/⊥←Dec(sk,C)α=H(u1,u2,e);if α=α∗ then return ⊥if u1x1+αy1u2x2+αy2=v then return ⊥else m=e⋅u1−z1u2−z2A wins iff b′=b⟶pp,pk⟵C=(u1,u2,e,v)⟶m/⊥⟵(m0,m1)⟶C∗=(u1∗,u2∗,e∗,v∗)⟵C=(u1,u2,e,v)=C∗⟶m/⊥⟵b′Adecryption querieschoose m0,m1decryption queriescompute b′ Game 3. 将 DDH couple 换成随机 couple,参考 CPA 安全的 Game 2,类似的可以说明 Game 2≈DDHGame 3.
Cpp←Setup(1κ)(pk,sk)←KeyGen(1κ)x1,x2,y1,y2,z1,z2←Zqc=g1x1g2x2,d=g1y1g2y2,h=g1z1g2z2pk=(c,d,h)sk=(x1,x2,y1,y2,z1,z2)m/⊥←Dec(sk,C)α=H(u1,u2,e);if u1x1+αy1u2x2+αy2=v then return ⊥else m=e⋅u1−z1u2−z2b←{0,1}C∗←Enc(pk,mb)r1,2∗←Zq;u1∗=g1r1∗,u2∗=g2r2∗e∗=m⋅u1∗z1u2∗z2α∗=H(u1∗,u2∗,e∗)v∗=u1∗x1+y1α∗u2∗x2+y2α∗C∗=(u1∗,u2∗,e∗,v∗)m/⊥←Dec(sk,C)α=H(u1,u2,e);if α=α∗ then return ⊥if u1x1+αy1u2x2+αy2=v then return ⊥else m=e⋅u1−z1u2−z2A wins iff b′=b⟶pp,pk⟵C=(u1,u2,e,v)⟶m/⊥⟵(m0,m1)⟶C∗=(u1∗,u2∗,e∗,v∗)⟵C=(u1,u2,e,v)=C∗⟶m/⊥⟵b′Adecryption querieschoose m0,m1decryption queriescompute b′ Game 4 [Oracle]. 在解密时,如果不是 DDH couple,那么拒绝之(注意挑战者不一定需要 PPT,其可以是 oracle,因为后面没有规约了,都是信息论的角度)。从信息论意义上,敌手无法察觉这种改变,换句话说,就算在这个位置不添加拒绝条件,在下面检测 u1x1+αy1u2x2+αy2=v 时也会拒绝的。
Cpp←Setup(1κ)(pk,sk)←KeyGen(1κ)x1,x2,y1,y2,z1,z2←Zqc=g1x1g2x2,d=g1y1g2y2,h=g1z1g2z2pk=(c,d,h)sk=(x1,x2,y1,y2,z1,z2)m/⊥←Dec(sk,C)if logg1u1=logg2u2 then return ⊥α=H(u1,u2,e);if u1x1+αy1u2x2+αy2=v then return ⊥else m=e⋅u1−z1u2−z2b←{0,1}C∗←Enc(pk,mb)r1,2∗←Zq;u1∗=g1r1∗,u2∗=g2r2∗e∗=m⋅u1∗z1u2∗z2α∗=H(u1∗,u2∗,e∗)v∗=u1∗x1+y1α∗u2∗x2+y2α∗C∗=(u1∗,u2∗,e∗,v∗)m/⊥←Dec(sk,C)α=H(u1,u2,e);if α=α∗ then return ⊥⋯A wins iff b′=b⟶pp,pk⟵C=(u1,u2,e,v)⟶m/⊥⟵(m0,m1)⟶C∗=(u1∗,u2∗,e∗,v∗)⟵C=(u1,u2,e,v)=C∗⟶m/⊥⟵b′Adecryption querieschoose m0,m1decryption queriescompute b′ 类似地,写成方程组的形式,敌人原来只有 c,d,v 三个方程组,有 x1,x2,y1,y2 四个未知数,解空间为 1 维大小为 q。
loggc=x1+ax2loggd=y1+ay2loggv∗=r1∗x1+r1∗α∗y1+ar2∗x2+ar2∗α∗y2 即
⎣⎡1r1∗aar2∗1r1∗α∗aar2∗α∗⎦⎤⎣⎡x1x2y1y2⎦⎤=⎣⎡loggcloggdloggv∗⎦⎤ 如果 r1=logg1u1=logg2u2=r2 但 u1x1+αy1u2x2+αy2=v,那么就可以把这个方程组补充成 4 个,即
⎣⎡1r1∗r1aar2∗ar21r1∗α∗r1αaar2∗α∗ar2α⎦⎤⎣⎡x1x2y1y2⎦⎤=⎣⎡loggcloggdloggv∗loggv⎦⎤ 系数矩阵的行列式满秩,就能解出来 x1,x2,y1,y2;相当于在原来 1 维的解空间中直接猜到了答案,由于解空间大小 q 很大,这样的概率是可忽略的;因此可以视为没有这种情况,进而添加这个判断后,敌手也察觉不到区别,即 Game 3≈Game 4。
Game 5 [Oracle]. 即然挑战者有无限的能力,我们自然可以不用私钥解密,直接解离散对数问题。显然从挑战者的角度来说 Game 4=Game 5。
Cpp←Setup(1κ)(pk,sk)←KeyGen(1κ)x1,x2,y1,y2,z1,z2←Zqc=g1x1g2x2,d=g1y1g2y2,h=g1z1g2z2pk=(c,d,h)sk=(x1,x2,y1,y2,z1,z2)m/⊥←Dec(sk,C)if logg1u1=logg2u2 then return ⊥α=H(u1,u2,e);if u1x1+αy1u2x2+αy2=v then return ⊥else r=logg1u1;m=e⋅hrb←{0,1}C∗←Enc(pk,mb)r1,2∗←Zq;u1∗=g1r1∗,u2∗=g2r2∗e∗=m⋅u1∗z1u2∗z2α∗=H(u1∗,u2∗,e∗)v∗=u1∗x1+y1α∗u2∗x2+y2α∗C∗=(u1∗,u2∗,e∗,v∗)m/⊥←Dec(sk,C)α=H(u1,u2,e);if α=α∗ then return ⊥⋯A wins iff b′=b⟶pp,pk⟵C=(u1,u2,e,v)⟶m/⊥⟵(m0,m1)⟶C∗=(u1∗,u2∗,e∗,v∗)⟵C=(u1,u2,e,v)=C∗⟶m/⊥⟵b′Adecryption querieschoose m0,m1decryption queriescompute b′ Game 6 [Oracle]. 观察到本来 e∗ 也是均匀分布的(由循环群的性质保证),因此将 e∗ 直接替换成均匀采样,敌手也无法识别,得到 Game 6。于是 Game 5≈Game 6;另外,在 Game 6 中,显然 Pr[A wins]=0.5(因为挑战者根本就没看 mb)。
Cpp←Setup(1κ)(pk,sk)←KeyGen(1κ)x1,x2,y1,y2,z1,z2←Zqc=g1x1g2x2,d=g1y1g2y2,h=g1z1g2z2pk=(c,d,h)sk=(x1,x2,y1,y2,z1,z2)m/⊥←Dec(sk,C)if logg1u1=logg2u2 then return ⊥α=H(u1,u2,e);if u1x1+αy1u2x2+αy2=v then return ⊥else r=logg1u1;m=e⋅hrb←{0,1}C∗←Enc(pk,mb)r1,2∗←Zq;u1∗=g1r1∗,u2∗=g2r2∗e∗←Gα∗=H(u1∗,u2∗,e∗)v∗=u1∗x1+y1α∗u2∗x2+y2α∗C∗=(u1∗,u2∗,e∗,v∗)m/⊥←Dec(sk,C)α=H(u1,u2,e);if α=α∗ then return ⊥⋯A wins iff b′=b⟶pp,pk⟵C=(u1,u2,e,v)⟶m/⊥⟵(m0,m1)⟶C∗=(u1∗,u2∗,e∗,v∗)⟵C=(u1,u2,e,v)=C∗⟶m/⊥⟵b′Adecryption querieschoose m0,m1decryption queriescompute b′ 综上,
Game 0=Game 1≈CRGame 2≈DDHGame 3≈Game 4=Game 5≈Game 6=21 即 CS-PKE 是 CCA2 安全的。