Lecture 1. PKE to TDP


一些简称


单向函数 (One-Way Function, OWF):“易计算,难求逆”。

f:{0,1}{0,1}f:\{0,1\}^*\rightarrow \{0,1\}^*

单向函数族 (OWF Family). 一系列 OWF(根据加密级别选择使用的 OWF)。由 3 个 PPT 算法 GenF,SampleD,EvalF\text{GenF}, \text{SampleD}, \text{EvalF} 组成,其中:

单向性实验:对于任意 PPT 算法 A\mathcal{A}

Pr[iGenF(1κ);xD(fi);y:=fi(x);xA(1κ,i,y):fi(x)=y]=negl(κ)\text{Pr}[i\leftarrow\text{GenF}(1^\kappa);x\leftarrow \mathcal{D}(f_i);y:=f_i(x);x'\leftarrow \mathcal{A}(1^\kappa,i,y):f_i(x')=y]=\text{negl}(\kappa)

公钥加密体系 (Public-Key Encryption, PKE). 分为三部分 (Gen,Enc,Dec)(\text{Gen},\text{Enc},\text{Dec})

正确性要求:解密出来的明文应该和加密所用的明文相同(不相同的概率可忽略)。

Pr[(pk,sk)Gen(1κ);cEnc(pk,m);mDec(sk,c):m=m]=1negl(κ)\text{Pr}\left[\begin{matrix}(pk,sk) \leftarrow \text{Gen}(1^\kappa); \\ c\leftarrow \text{Enc}(pk,m);m'\leftarrow \text{Dec}(sk,c)\end{matrix}:m'=m\right] = 1-\text{negl}(\kappa)

安全性要求:利用选择明文攻击 (CPA) 描述。


选择明文攻击 (Chosen Plaintext Attack, CPA). 实验表述:对于任意的 PPT 敌手 A=(A1,A2)\mathcal{A}=(\mathcal{A}_1,\mathcal{A}_2)

Pr[(pk,sk)Gen(1κ);(s,m0,m1)A1(pk);b{0,1};cEnc(pk,mb);bA2(s,c):b=b]=12±negl(κ)\text{Pr}\left[\begin{matrix}(pk,sk) \leftarrow \text{Gen}(1^\kappa); (s,m_0,m_1)\leftarrow \mathcal{A}_1(pk); \\ b\leftarrow \{0,1\};c\leftarrow \text{Enc}(pk,m_b);b'\leftarrow \mathcal{A}_2(s,c)\end{matrix}:b'=b\right] = \frac{1}{2}\pm\text{negl}(\kappa)
注意:确定性加密算法不是 CPA 安全的。因为可以把两个明文都用公钥加密一下进行比对,即可知道挑战者加密了哪个密文。

CPA Game.

挑战者 C敌手 A(pk,sk)Gen(1κ)pk(m0,m1)选择 m0,m1抛硬币随机选择加密 b{0,1}计算 cEnc(pk,mb)c若 b=b,则敌手 A 获胜b猜挑战者抛硬币的结果 b\color{darkblue}\begin{matrix}\textbf{挑战者 } \mathcal{C} & & \textbf{敌手 }\mathcal{A} \\ (pk,sk)\leftarrow\text{Gen}(1^\kappa) & \stackrel{pk}{\longrightarrow} & \\ & \stackrel{(m_0,m_1)}{\longleftarrow}& \text{选择 } m_0,m_1 \\ \text{抛硬币随机选择加密 }b\leftarrow \{0,1\}& \\ \text{计算 } c\leftarrow \text{Enc}(pk,m_b) & \stackrel{c}{\longrightarrow} \\ \text{若 }b'=b\text{,则敌手 }\mathcal{A} \text{ 获胜} & \stackrel{b'}{\longleftarrow} & \text{猜挑战者抛硬币的结果 }b' \\\end{matrix}
💡
CPA Game with a Single Bit (单比特 CPA Game).
挑战者 C敌手 A(pk,sk)Gen(1κ)pk抛硬币随机选择加密 b{0,1}计算 cEnc(pk,b)c若 b=b,则敌手 A 获胜b猜挑战者抛硬币的结果 b\color{darkblue}\begin{matrix}\textbf{挑战者 } \mathcal{C} & & \textbf{敌手 }\mathcal{A} \\ (pk,sk)\leftarrow\text{Gen}(1^\kappa) & \stackrel{pk}{\longrightarrow} & \\\text{抛硬币随机选择加密 }b\leftarrow \{0,1\}& \\ \text{计算 } c\leftarrow \text{Enc}(pk,b) & \stackrel{c}{\longrightarrow} \\ \text{若 }b'=b\text{,则敌手 }\mathcal{A} \text{ 获胜} & \stackrel{b'}{\longleftarrow} & \text{猜挑战者抛硬币的结果 }b' \\\end{matrix}

在单比特游戏中,敌手 A\mathcal{A} 选择两个明文 m0,m1m_0,m_1 不可能是 m0=m1m_0=m_1;因为这样对敌手一定不优,无法得到多余的信息,因此可以省略该过程。

CPA Game (Experiments). ExpPKE,ACPA-b(κ)\textbf{Exp}_{\text{PKE},\mathcal{A}}^\text{CPA-b}(\kappa);将原先游戏中抛硬币选择加密的 bb 变成实验参数,省去抛硬币流程。同时,将游戏结果改为返回敌手 A\mathcal{A} 的猜测。

挑战者 C敌手 A(pk,sk)Gen(1κ)pk(m0,m1)选择 m0,m1计算 cEnc(pk,mb)c返回 bb猜挑战者抛硬币的结果 b\color{darkblue}\begin{matrix}\textbf{挑战者 } \mathcal{C} & & \textbf{敌手 }\mathcal{A} \\ (pk,sk)\leftarrow\text{Gen}(1^\kappa) & \stackrel{pk}{\longrightarrow} & \\ & \stackrel{(m_0,m_1)}{\longleftarrow}& \text{选择 } m_0,m_1 \\ \text{计算 } c\leftarrow \text{Enc}(pk,m_b) & \stackrel{c}{\longrightarrow} \\ \text{返回 }b'& \stackrel{b'}{\longleftarrow} & \text{猜挑战者抛硬币的结果 }b' \\\end{matrix}

CPA 安全的其他表述

Pr(A wins)12=Pr(b=b)12=negl(κ)Pr(b=1b=1)Pr(b=1)+Pr(b=0b=0)Pr(b=0)12=negl(κ)12Pr(b=1b=1)+12(1Pr(b=1b=0))12=negl(κ)Pr(b=1b=1)Pr(b=1b=0)=2negl(κ)=negl(κ)\left|\text{Pr}(\mathcal{A}\text{ wins})-\frac{1}{2}\right| = \left|\text{Pr}(b=b')-\frac{1}{2}\right| = \text{negl}(\kappa) \\ \left|\text{Pr}(b'=1|b=1)\text{Pr}(b=1)+\text{Pr}(b'=0|b=0)\text{Pr}(b=0)-\frac{1}{2}\right| = \text{negl}(\kappa) \\ \left|\frac{1}{2}\text{Pr}(b'=1|b=1)+\frac{1}{2}(1-\text{Pr}(b'=1|b=0))-\frac{1}{2}\right| = \text{negl}(\kappa) \\ \color{red}\left|\text{Pr}(b'=1|b=1)-\text{Pr}(b'=1|b=0)\right|= 2\text{negl}(\kappa)= \text{negl}(\kappa)

Pr[ExpPKE,ACPA-1(κ)=1]Pr[ExpPKE,ACPA-0(κ)=1]=negl(κ)\color{red}\left|\text{Pr}[\textbf{Exp}_{\text{PKE},\mathcal{A}}^\text{CPA-1}(\kappa)=1]-\text{Pr}[\textbf{Exp}_{\text{PKE},\mathcal{A}}^\text{CPA-0}(\kappa)=1]\right|=\text{negl}(\kappa)

定义 Advantage:

AdvPKE,ACPA(κ)=:Pr[ExpPKE,ACPA-1(κ)=1]Pr[ExpPKE,ACPA-0(κ)=1]12AdvPKE,ACPA(κ)=Pr(A wins)12\textbf{Adv}_{\text{PKE},\mathcal{A}}^{\text{CPA}}(\kappa) =:\left|\text{Pr}[\textbf{Exp}_{\text{PKE},\mathcal{A}}^\text{CPA-1}(\kappa)=1]-\text{Pr}[\textbf{Exp}_{\text{PKE},\mathcal{A}}^\text{CPA-0}(\kappa)=1]\right|\\\frac{1}{2}\textbf{Adv}_{\text{PKE},\mathcal{A}}^{\text{CPA}}(\kappa)= \left|\text{Pr}(\mathcal{A}\text{ wins})-\frac{1}{2}\right| \\

陷门单向函数(族) (Trapdoor Permutation (family), TDP). (Gen,Sample,Eval,Invert)(\text{Gen},\text{Sample},\text{Eval},\text{Invert}).

💡
置换 Permutation:定义域与值域相同。

正确性要求Invert(1κ,i,td,y)\text{Invert}(1^\kappa,i,td,y) 确实实现了 fi1f_i^{-1}

单向性要求:对于任意 PPT 敌手 A\mathcal{A}

Pr[(i,td)Gen(1κ);ySample(1κ,i);xA(1κ,i,y):Eval(1κ,i,x)=y]=negl(κ)\text{Pr}\left[\begin{matrix}(i,td) \leftarrow \text{Gen}(1^\kappa); y\leftarrow\text{Sample}(1^\kappa,i); \\x'\leftarrow\mathcal{A}(1^\kappa,i,y)\end{matrix}:\text{Eval}(1^\kappa,i,x')=y\right] = \text{negl}(\kappa)

直接随机采样象,敌手正确确定原象的概率是可忽略的。


通过 TDP 构造 PKE(非 CPA 安全版).

这样构造的 PKE 是单向的,但不是 CPA 安全的(因为加密不具有随机性)。

Hard-core Function / Bit. 令 H={hκ:{0,1}κ{0,1}}H=\{h_\kappa:\{0,1\}^\kappa\rightarrow\{0,1\}\} 是可以有效计算的一系列函数,令 FF 是一个 TDP family。那么 HH 是一个 hard-core function 当且仅当对于任意 PPT 敌手 A\mathcal{A}

Pr[(f,f1)Gen(1κ);x{0,1}κ;y=f(x);βA(f,y):β=hκ(x)]=12±negl(κ)\text{Pr}\left[\begin{matrix}(f,f^{-1}) \leftarrow \text{Gen}(1^\kappa); x\leftarrow\{0,1\}^\kappa; \\y=f(x);\beta\leftarrow\mathcal{A}(f,y)\end{matrix}:\beta=h_\kappa(x)\right] = \frac{1}{2}\pm\text{negl}(\kappa)

那么,hκ(x)h_\kappa(x) 被称为 hard-core bit。

Hard-core Game. 敌手的目标是:猜 hard-core bit,即原象通过 hκh_\kappa 后的结果。

挑战者 C敌手 A(f,f1)Gen(1κ)随机采样需明文 x{0,1}κ计算 yf(x)f,y若 β=hκ(x),则敌手 A 获胜β计算 β\color{darkblue}\begin{matrix}\textbf{挑战者 } \mathcal{C} & & \textbf{敌手 }\mathcal{A} \\ (f,f^{-1}) \leftarrow\text{Gen}(1^\kappa) \\\text{随机采样需明文 }x\leftarrow \{0,1\}^\kappa\\\text{计算 }y\leftarrow f(x)& \stackrel{f,y}{\longrightarrow} & \\ \text{若 }\beta=h_\kappa(x)\text{,则敌手 }\mathcal{A} \text{ 获胜}& \stackrel{\beta}{\longleftarrow}& \text{计算 } \beta\end{matrix}

🔑
如果 f()f(\cdot) 是一个 OWF(OWP),那么 g(x1x2)=(f(x1)x2)g(x_1||x_2)=(f(x_1)||x_2) 也是一个 OWF(OWP)。

Goldreich-Levin 定理. 如果 f()f(\cdot) 是一个 OWF(OWP),那么 g(xr)=(f(x)r)g(x||r)=(f(x)||r) (其中 x=r|x|=|r|)有一个 hard-core function hGL(x,r)=xrh_{GL}(x,r)=x\cdot r(向量内积)。


通过 TDP 构造 PKE(CPA 安全版,单比特).

正确性. x:=f1(y)=x;m:=hκ(x)c2=hκ(x)hκ(x)m=mx':=f^{-1}(y)=x;m':=h_\kappa(x')\oplus c_2=h_\kappa(x')\oplus h_\kappa(x) \oplus m = m.

安全性.

💡
Theorem. 如果 FF 是 TDF,那么这个版本的 PKE 就是 CPA 安全的。

【证明】(反证法,安全规约)我们证明:如果这个版本的 PKE 不是 CPA 安全的,那么 FF 就不是 TDF,即敌手 A\mathcal{A} 赢得关于 hGLh_{GL} 的 hard-core game 的概率与 12\frac{1}{2} 的差是不可忽略的。

规约:利用已知条件 (CPA game) 作为黑箱来达到我们所需要的目的(hard-core game)。

  • Hard-core game 初始生成 (f,f1),x,r,y=f(x)(f,f^{-1}), x, r, y=f(x);需敌手计算 β\beta 估计 hGL(x)h_{GL}(x)
  • CPA game 初始生成 (f,f1),b(f,f^{-1}),b;敌手需要 ff 和加密后的 bb 来猜 bb

那么,结合一下我们可以得到如下游戏:

CA/CA(f,f1)Gen(1κ)x,r{0,1}κyf(x)(f,r),yα{0,1}(f,r),(y,α)A wins iff h=hGL(x,r)hh=αbbCompute b\color{darkblue}\begin{matrix}\mathcal{C'} & & \mathcal{A'}/\mathcal{C} & & \mathcal{A}\\ (f,f^{-1}) \leftarrow\text{Gen}(1^\kappa) \\x,r\leftarrow \{0,1\}^\kappa \\y\leftarrow f(x) &\stackrel{(f,r),y}{\longrightarrow} & \alpha\leftarrow\{0,1\}&\stackrel{(f,r),(y,\alpha)}{\longrightarrow}{}\\ \mathcal{A'}\text{ wins iff }h'=h_{GL}(x,r) &\stackrel{h'}{\longleftarrow}{}& h'=\alpha\oplus b'& \stackrel{b'}{\longleftarrow}{}& \text{Compute }b'\end{matrix}

注意这里,我们假设中间者进行 α{0,1}\alpha\leftarrow \{0,1\} 时候是这么进行的:

b{0,1};αhGL(x,r)bb\leftarrow \{0,1\};\alpha\leftarrow h_{GL}(x,r)\oplus b

由于 bb 均匀随机选择 0/1,根据异或性质,α\alpha 也均匀随机选择 0/1。我们想调用 CPA game 的黑箱,需要对信息 bb 进行加密,即需要 c1:=y,c2:=hGL(x,r)bc_1:=y, c_2:=h_{GL}(x,r)\oplus b。由于我们不知道 hGLh_{GL},我们干脆直接均匀选择象 c2c_2(也就是这里的 α\alpha),让黑箱告诉我们这个 α\alpha 的原象 bb 是什么,然后我们通过下面的等式返回 hGL(x,r)h_{GL}(x,r) 的值,来得到 hard-core game 的结果。

α=hGL(x,r)bhGL(x,r)=αb\alpha =h_{GL}(x,r) \oplus b \quad \Longrightarrow\quad h_{GL}(x,r)=\alpha\oplus b

因此,从概率的角度上说:

Pr[A wins]=Pr[b=b]=Pr[b=αhGL(x,r)]=Pr[hGL(x,r)=αb]=Pr[A wins]\text{Pr}[\mathcal{A} \text{ wins}]=\text{Pr}[b=b']=\text{Pr}[b'=\alpha\oplus h_{GL}(x,r)]\\=\text{Pr}[h_{GL}(x,r)=\alpha\oplus b']=\text{Pr}[\mathcal{A'} \text{ wins}]

因此,如果 A\mathcal{A} 赢得 CPA game 的概率与 1/2 的差是不可忽略的,那么 A\mathcal{A'} 赢得 hard-core game 的概率与 1/2 的差也是不可忽略的。


TODO: RSA PKE Scheme, Factor PKE Scheme.