一些简称
- PPT: Probabilistic, Polynomial-Time.
- negl(κ): negligible,在安全参数 κ 下是可忽略的。
单向函数 (One-Way Function, OWF):“易计算,难求逆”。
- 易计算:存在 PT 算法 EvalF(x) 满足 ∀κ,∀x∈{0,1}κ,有 EvalF(x)=f(x);
单向函数族 (OWF Family). 一系列 OWF(根据加密级别选择使用的 OWF)。由 3 个 PPT 算法 GenF,SampleD,EvalF 组成,其中:
- i←GenF(1κ):根据安全参数选择使用的 OWF,得到其 index;
- x←SampleD(1κ,i):在 fi 的定义域中均匀随机选择原象 x←D(fi);
- y←EvalF(1κ,i,x):输出 y:=fi(x)∈R(fi),其中 i←GenF(1κ) 且 x∈D(fi)。
单向性实验:对于任意 PPT 算法 A:
公钥加密体系 (Public-Key Encryption, PKE). 分为三部分 (Gen,Enc,Dec):
- 密钥生成 pk,sk←Gen(1κ);
- 加密 c←Enc(pk,m);
- 解密 m′←Dec(sk,c)。
正确性要求:解密出来的明文应该和加密所用的明文相同(不相同的概率可忽略)。
安全性要求:利用选择明文攻击 (CPA) 描述。
选择明文攻击 (Chosen Plaintext Attack, CPA). 实验表述:对于任意的 PPT 敌手 A=(A1,A2)
CPA Game.
CPA Game (Experiments). ExpPKE,ACPA-b(κ);将原先游戏中抛硬币选择加密的 b 变成实验参数,省去抛硬币流程。同时,将游戏结果改为返回敌手 A 的猜测。
挑战者 C(pk,sk)←Gen(1κ)计算 c←Enc(pk,mb)返回 b′⟶pk⟵(m0,m1)⟶c⟵b′敌手 A选择 m0,m1猜挑战者抛硬币的结果 b′ CPA 安全的其他表述
∣∣Pr(A wins)−21∣∣=∣∣Pr(b=b′)−21∣∣=negl(κ)∣∣Pr(b′=1∣b=1)Pr(b=1)+Pr(b′=0∣b=0)Pr(b=0)−21∣∣=negl(κ)∣∣21Pr(b′=1∣b=1)+21(1−Pr(b′=1∣b=0))−21∣∣=negl(κ)∣Pr(b′=1∣b=1)−Pr(b′=1∣b=0)∣=2negl(κ)=negl(κ) 即
∣∣Pr[ExpPKE,ACPA-1(κ)=1]−Pr[ExpPKE,ACPA-0(κ)=1]∣∣=negl(κ) 定义 Advantage:
AdvPKE,ACPA(κ)=:∣∣Pr[ExpPKE,ACPA-1(κ)=1]−Pr[ExpPKE,ACPA-0(κ)=1]∣∣21AdvPKE,ACPA(κ)=∣∣Pr(A wins)−21∣∣
陷门单向函数(族) (Trapdoor Permutation (family), TDP). (Gen,Sample,Eval,Invert).
- (i,td)←Gen(1κ):根据安全参数选择所用的 TDP,返回其 index 与陷门 trapdoor;
- x←Sample(1κ,i):在 fi 的定义域中均匀随机选择原象 x←D(fi);
- y←EvalF(1κ,i,x):输出 y:=fi(x)∈R(fi);
- x′←Invert(1κ,i,td,y):使用陷门输出 x′:=fi−1(y)。
💡
置换 Permutation:定义域与值域相同。
正确性要求:Invert(1κ,i,td,y) 确实实现了 fi−1。
单向性要求:对于任意 PPT 敌手 A:
Pr[(i,td)←Gen(1κ);y←Sample(1κ,i);x′←A(1κ,i,y):Eval(1κ,i,x′)=y]=negl(κ) 直接随机采样象,敌手正确确定原象的概率是可忽略的。
通过 TDP 构造 PKE(非 CPA 安全版).
- PKE.Gen: (f,f−1)←Gen(1κ),其中 pk:=f,sk:=f−1;f−1 由陷门得到。
- PKE.Enc: c←f(m)。
- PKE.Dec: m←f−1(c)。
❗
这样构造的 PKE 是单向的,但不是 CPA 安全的(因为加密不具有随机性)。
Hard-core Function / Bit. 令 H={hκ:{0,1}κ→{0,1}} 是可以有效计算的一系列函数,令 F 是一个 TDP family。那么 H 是一个 hard-core function 当且仅当对于任意 PPT 敌手 A:
Pr[(f,f−1)←Gen(1κ);x←{0,1}κ;y=f(x);β←A(f,y):β=hκ(x)]=21±negl(κ) 那么,hκ(x) 被称为 hard-core bit。
Hard-core Game. 敌手的目标是:猜 hard-core bit,即原象通过 hκ 后的结果。
挑战者 C(f,f−1)←Gen(1κ)随机采样需明文 x←{0,1}κ计算 y←f(x)若 β=hκ(x),则敌手 A 获胜⟶f,y⟵β敌手 A计算 β
🔑
如果
f(⋅) 是一个 OWF(OWP),那么
g(x1∣∣x2)=(f(x1)∣∣x2) 也是一个 OWF(OWP)。
Goldreich-Levin 定理. 如果 f(⋅) 是一个 OWF(OWP),那么 g(x∣∣r)=(f(x)∣∣r) (其中 ∣x∣=∣r∣)有一个 hard-core function hGL(x,r)=x⋅r(向量内积)。
通过 TDP 构造 PKE(CPA 安全版,单比特).
- PKE.Gen: (f,f−1)←Gen(1κ);r←{0,1}κ,其中 pk:=(f,r),sk:=f−1。
- PKE.Enc: m∈{0,1},x∈{0,1}κ,y:=f(x),c:=(c1:=y,c2:=hGL(x,r)⊕m)。
- PKE.Dec: x′:=f−1(c1);m′:=hGL(x′,r)⊕c2,并返回 m′。
正确性. x′:=f−1(y)=x;m′:=hκ(x′)⊕c2=hκ(x′)⊕hκ(x)⊕m=m.
安全性.
💡
Theorem. 如果
F 是 TDF,那么这个版本的 PKE 就是 CPA 安全的。
【证明】(反证法,安全规约)我们证明:如果这个版本的 PKE 不是 CPA 安全的,那么 F 就不是 TDF,即敌手 A 赢得关于 hGL 的 hard-core game 的概率与 21 的差是不可忽略的。
规约:利用已知条件 (CPA game) 作为黑箱来达到我们所需要的目的(hard-core game)。
- Hard-core game 初始生成 (f,f−1),x,r,y=f(x);需敌手计算 β 估计 hGL(x)。
- CPA game 初始生成 (f,f−1),b;敌手需要 f 和加密后的 b 来猜 b。
那么,结合一下我们可以得到如下游戏:
C′(f,f−1)←Gen(1κ)x,r←{0,1}κy←f(x)A′ wins iff h′=hGL(x,r)⟶(f,r),y⟵h′A′/Cα←{0,1}h′=α⊕b′⟶(f,r),(y,α)⟵b′ACompute b′ 注意这里,我们假设中间者进行 α←{0,1} 时候是这么进行的:
b←{0,1};α←hGL(x,r)⊕b 由于 b 均匀随机选择 0/1,根据异或性质,α 也均匀随机选择 0/1。我们想调用 CPA game 的黑箱,需要对信息 b 进行加密,即需要 c1:=y,c2:=hGL(x,r)⊕b。由于我们不知道 hGL,我们干脆直接均匀选择象 c2(也就是这里的 α),让黑箱告诉我们这个 α 的原象 b 是什么,然后我们通过下面的等式返回 hGL(x,r) 的值,来得到 hard-core game 的结果。
α=hGL(x,r)⊕b⟹hGL(x,r)=α⊕b 因此,从概率的角度上说:
Pr[A wins]=Pr[b=b′]=Pr[b′=α⊕hGL(x,r)]=Pr[hGL(x,r)=α⊕b′]=Pr[A′ wins] 因此,如果 A 赢得 CPA game 的概率与 1/2 的差是不可忽略的,那么 A′ 赢得 hard-core game 的概率与 1/2 的差也是不可忽略的。
TODO: RSA PKE Scheme, Factor PKE Scheme.