Theorem. 使用 Noar-Yung 构造的 PKE’ 具有 CCA1 安全。
【证明】
Game 0. 即 ExpPKE′,ACCA1-0(κ)。在游戏中我们对 Noar-Yung 构造进行了展开(小字体)。
C(pk,sk)←Gen′(1κ)r←{0,1}poly(κ);(pk1,sk1)←Gen(1κ);(pk2,sk2)←Gen(1κ);pk:=(pk1,pk2,r);sk:=sk1m/⊥←Dec′(sk,c)if V(r,(c1,c2),π)=0,m:=⊥else,m←Dec(sk1,c1)c∗←Enc′(pk,m0;w∗)c1∗←Enc(pk1,m0;w1∗);c2∗←Enc(pk2,m0;w2∗);π∗←P(r,(c1∗,c2∗),(m0,w1∗,w2∗))return b′⟶pk⟵c=(c1,c2,π)⟶m/⊥⟵(m0,m1)⟶c∗=(c1∗,c2∗,π∗)⟵b′Adecryption querieschoose m0,m1compute b′
Game 1. 修改 Game 0 中的 Gen′ 和 Enc′,使用仿真器 Sim。
C(pk,sk)←Gen′(1κ)r←Sim1(1κ);(pk1,sk1)←Gen(1κ);(pk2,sk2)←Gen(1κ);pk:=(pk1,pk2,r);sk:=sk1m/⊥←Dec′(sk,c)if V(r,(c1,c2),π)=0,m:=⊥else,m←Dec(sk1,c1)c∗←Enc′(pk,m0;w∗)c1∗←Enc(pk1,m0;w1∗);c2∗←Enc(pk2,m0;w2∗);π∗←Sim2(r,(c1∗,c2∗))return b′⟶pk⟵c=(c1,c2,π)⟶m/⊥⟵(m0,m1)⟶c∗=(c1∗,c2∗,π∗)⟵b′Adecryption querieschoose m0,m1compute b′ 接下来,我们假设敌手 A 拥有区分 Game 0 和 Game 1 的能力(返回 1 的概率不可忽略的不同),我们运用其打破 aNIZK 的 Zero-Knowledge 性质。
C′b←{0,1}r0←{0,1}poly(κ)r1←Sim1(1κ)r:=rbπ0∗←P(r,(c1∗,c2∗),(m0,w1∗,w2∗))π1∗←Sim2(r,(c1∗,c2∗))π∗←πb∗⟶r⟵w1,2∗,c1,2∗,m0⟶π∗←b′A′/C(pk1,sk1)←Gen(1κ);(pk2,sk2)←Gen(1κ);pk:=(pk1,pk2,r);sk:=sk1m/⊥←Dec′(sk,c)c1∗←Enc(pk1,m0;w1∗)c2∗←Enc(pk2,m0;w2∗)c∗:=(c1,c2,π∗)⟶pk⟵c=(c1,c2,π)⟶m/⊥⟵(m0,m1)⟶c∗←b′Acm0,m1b′ 于是,
= = ≤ ∣Pr[Game 1=1]−Pr[Game 0=1]∣∣Pr[b′=1∣b=0]−Pr[b′=1∣b=1]∣AdvaNIZK,A′ZK(κ)AdvaNIZKZK(κ)
Game 2. 修改 Game 1 中的 c2∗,加密 m1。
- 我们要逐渐把 m0 改成 m1,因此这里我们先改变一个。
C(pk,sk)←Gen′(1κ)r←Sim1(1κ);(pk1,sk1)←Gen(1κ);(pk2,sk2)←Gen(1κ);pk:=(pk1,pk2,r);sk:=sk1m/⊥←Dec′(sk,c)if V(r,(c1,c2),π)=0,m:=⊥else,m←Dec(sk1,c1)c∗←Enc′(pk,m0/m1;w∗)c1∗←Enc(pk1,m0;w1∗);c2∗←Enc(pk2,m1;w2∗);π∗←Sim2(r,(c1∗,c2∗))return b′⟶pk⟵c=(c1,c2,π)⟶m/⊥⟵(m0,m1)⟶c∗=(c1∗,c2∗,π∗)⟵b′Adecryption querieschoose m0,m1compute b′ 如果存在敌手 A 拥有区分 Game 1 和 Game 2 的能力(返回 1 的概率不可忽略的不同),那么我们可以利用其打破 PKE 的 CPA 安全性(挑战者接手 (pk2,sk2) 这对公私钥,中间敌手模拟 (pk1,sk1) 这对公私钥的结果,给敌手 A 创造环境,即可打破 CPA 安全性),即
C′b←{0,1}(pk2,sk2)←Gen(1κ)c2∗←Enc(pk2,mb;w2∗)⟶pk1⟵(m0,m1)⟶c2∗⟵b′A′/C(pk1,sk1)←Gen(1κ)r←Sim1(1κ)pk:=(pk1,pk2)sk:=sk1m/⊥←Dec′(sk,c)c1∗←Enc(pk1,m0;w1∗)π∗←Sim2(r,(c1∗,c2∗))⟶pk⟵c=(c1,c2,π)⟶m/⊥⟵(m0,m1)⟶c∗=(c1∗,c2∗,π∗)⟵b′Acm0,m1b′ 当 b=0 时,模拟的即为 Game 1;当 b=1 时,模拟的是 Game 2。因此,
= = ≤ ∣Pr[Game 2=1]−Pr[Game 1=1]∣∣Pr[b′=1∣b=1]−Pr[b′=1∣b=0]∣AdvPKE,A′CPA(κ)AdvPKECPA(κ)
Game 3. 交换 Game 2 中的密钥,使用 sk2。
C(pk,sk)←Gen′(1κ)r←Sim1(1κ);(pk1,sk1)←Gen(1κ);(pk2,sk2)←Gen(1κ);pk:=(pk1,pk2,r);sk:=sk2m/⊥←Dec′(sk,c)if V(r,(c1,c2),π)=0,m:=⊥else,m←Dec(sk2,c2)c∗←Enc′(pk,m0/m1;w∗)c1∗←Enc(pk1,m0;w1∗);c2∗←Enc(pk2,m1;w2∗);π∗←Sim2(r,(c1∗,c2∗))return b′⟶pk⟵c=(c1,c2,π)⟶m/⊥⟵(m0,m1)⟶c∗=(c1∗,c2∗,π∗)⟵b′Adecryption querieschoose m0,m1compute b′ 定义 Fakei 表示 Game i 中,敌手 A 提交了 (c1,c2,π),该密文通过了 Verifier V 的检测,但是用两把私钥解出来的结果不同;也就是说 (c1,c2) 不在语言里,Verifier V 却输出了 1 的情况;即
(Dec(sk1,c1)=Dec(sk2,c2))∧(V(r,(c1,c2),π)=1) 如果这个事件不发生(也就是说,不存在通过了 Verifier V 的检测,但是用两把私钥解出来的结果不同的情况),那么 Game 2 和 Game 3 就完全一样,即 (Game 3=1∣¬Fake3)=(Game 2=1∣¬Fake2).
🔑
Shoup, Difference Lemma. 设有事件
A,B,C,且
Pr[A∣¬C]=Pr[B∣¬C],那么
∣Pr[A]−Pr[B]∣≤Pr[C]。
【证明】
∣Pr[A]−Pr[B]∣=∣Pr[A∧C]+Pr[A∧¬C]−Pr[B∧C]−Pr[B∧¬C]∣=∣Pr[A∧C]−Pr[B∧C]∣=∣Pr[A∣C]Pr[C]−Pr[B∣C]Pr[C]∣=∣Pr[C](Pr[A∣C]−Pr[B∣C])∣≤∣Pr[C]∣⋅∣Pr[A∣C]−Pr[B∣C]∣≤Pr[C] 【推论】设有事件 A,B,A′,B′,且 Pr[A∣¬A′]=Pr[B∣¬B′],Pr[A′]=Pr[B′]=p,那么 ∣Pr[A]−Pr[B]∣≤c。(证明方法和上面完全相同)
那么,我们知道,对于 Game 2 和 Game 3 来说,Fake 事件发生的概率完全一样(因为只是换了两个一模一样的加密方法的钥匙,从敌手层面完全看不出来区别),即 Pr[Fake2]=Pr[Fake3],那么根据上述 lemma 的推论,我们知道
∣Pr[Game 3=1]−Pr[Game 2=1]∣≤Pr[Fake2]=Pr[Fake3] 对于 Game 2 和 Game 1 来说,因为 Fake 事件发生在第一阶段 (Decryption Phase I),而这两个游戏的第一阶段完全一样,因此
Pr[Fake2]=Pr[Fake1] 对于 Game 1 和 Game 0 来说,两个游戏的第一阶段的区别就是把 CRS 生成器换成了仿真的生成器,因此 Fake 事件发生的概率之差由 adaptive zero-knowledge 性质保证,即
∣Pr[Fake1]−Pr[Fake0]∣≤AdvaNIZKZK(κ) 对于 Game 0 来说,Fake 事件发生的概率由 adaptive soundness 性质保证,即
Pr[Fake0]≤AdvaNIZKsound(κ) 综上,
∣Pr[Game 3=1]−Pr[Game 2=1]∣≤Pr[Fake2]=Pr[Fake1]≤Pr[Fake0]+∣Pr[Fake1]−Pr[Fake0]∣≤AdvaNIZKZK(κ)+AdvaNIZKsound(κ)
Game 4. 类似 Game 2,把另一个 m0 改成 m1。
C(pk,sk)←Gen′(1κ)r←Sim1(1κ);(pk1,sk1)←Gen(1κ);(pk2,sk2)←Gen(1κ);pk:=(pk1,pk2,r);sk:=sk2m/⊥←Dec′(sk,c)if V(r,(c1,c2),π)=0,m:=⊥else,m←Dec(sk2,c2)c∗←Enc′(pk,m1;w∗)c1∗←Enc(pk1,m1;w1∗);c2∗←Enc(pk2,m1;w2∗);π∗←Sim2(r,(c1∗,c2∗))return b′⟶pk⟵c=(c1,c2,π)⟶m/⊥⟵(m0,m1)⟶c∗=(c1∗,c2∗,π∗)⟵b′Adecryption querieschoose m0,m1compute b′ 类似从 Game 1 到 Game 2 的推导,有
∣Pr[Game 4=1]−Pr[Game 3=1]∣≤AdvPKECPA(κ)
Game 5. 类似 Game 1 的逆操作,将仿真器变回原始情况。
C(pk,sk)←Gen′(1κ)r←{0,1}poly(κ);(pk1,sk1)←Gen(1κ);(pk2,sk2)←Gen(1κ);pk:=(pk1,pk2,r);sk:=sk2m/⊥←Dec′(sk,c)if V(r,(c1,c2),π)=0,m:=⊥else,m←Dec(sk2,c2)c∗←Enc′(pk,m1;w∗)c1∗←Enc(pk1,m1;w1∗);c2∗←Enc(pk2,m1;w2∗);π∗←P(r,(c1∗,c2∗),(m1,w1∗,w2∗))return b′⟶pk⟵c=(c1,c2,π)⟶m/⊥⟵(m0,m1)⟶c∗=(c1∗,c2∗,π∗)⟵b′Adecryption querieschoose m0,m1compute b′ 类似从 Game 0 到 Game 1 的推导,有
∣Pr[Game 5=1]−Pr[Game 4=1]∣≤AdvaNIZKZK(κ)
Game 6. 交换 Game 5 中的密钥,用回 sk1;即为 ExpPKE′,ACCA1-1(κ)。
C(pk,sk)←Gen′(1κ)r←{0,1}poly(κ);(pk1,sk1)←Gen(1κ);(pk2,sk2)←Gen(1κ);pk:=(pk1,pk2,r);sk:=sk1m/⊥←Dec′(sk,c)if V(r,(c1,c2),π)=0,m:=⊥else,m←Dec(sk1,c1)c∗←Enc′(pk,m1;w∗)c1∗←Enc(pk1,m1;w1∗);c2∗←Enc(pk2,m1;w2∗);π∗←P(r,(c1∗,c2∗),(m1,w1∗,w2∗))return b′⟶pk⟵c=(c1,c2,π)⟶m/⊥⟵(m0,m1)⟶c∗=(c1∗,c2∗,π∗)⟵b′Adecryption querieschoose m0,m1compute b′ 类似 Game 3 中的推导,我们有
∣Pr[Game 6=1]−Pr[Game 5=1]∣≤Pr[Fake6]=Pr[Fake5] 在 Game 6 中,Fake 事件发生的概率由 aNIZK 的 adaptive soundness 保证,因此
∣Pr[Game 6=1]−Pr[Game 5=1]∣≤Pr[Fake6]≤AdvaNIZKsound(κ)
综上
= = ≤ ≤ = = = AdvPKE′,ACCA-1(κ)∣∣Pr[ExpPKE′,ACCA1-1(κ)=1]−Pr[ExpPKE′,ACCA1-0(κ)=1]∣∣∣Pr[Game 6=1]−Pr[Game 0=1]∣i=0∑5∣Pr[Game i+1=1]−Pr[Game i=1]∣AdvaNIZKZK(κ)+AdvPKECPA(κ)+(AdvaNIZKZK(κ)+AdvaNIZKsound(κ))+AdvPKECPA(κ)+AdvaNIZKZK(κ)+AdvaNIZKsound(κ)2AdvPKECPA(κ)+2AdvaNIZKsound(κ)+3AdvaNIZKZK(κ)7negl(κ)negl(κ) 于是,使用 Noar-Yung 构造的 PKE’ 具有 CCA1 安全。
一些疑问与解答:
- 为什么要先在 Game 1 转换成仿真器,再在 Game 5 转换回来?因为不用仿真器的话, π∗←P(r,(c1∗,c2∗),(m0,w1∗,w2∗)) 会用到 m0,没法直接替换成 m1;而仿真器允许我们在不用到 m0 的时候生成 π∗,即 π∗←Sim2(r,(c1∗,c2∗)),方便后续替换。
- 为什么要两把钥匙?因为在 Game 1 规约 Game 2 的时候,如果没有两把钥匙,没办法通过另一把已知的钥匙来回答 CCA1 的问题。因此规约无法进行下去。