Lec6 IND-CPA#
约 1331 个字 预计阅读时间 9 分钟
本讲中,延续上讲讲过的PRFs,对Multi-msg Secure进行讨论,同时介绍了一种重要的攻击:选择明文攻击(IND-CPA)。
Goal: Build a cryptosystem that yields Multi-Msg Secure.
本讲的核心逻辑是:
- 证明CPA的变种CPA2(强于CPA) \(\Rightarrow\) Multi-Msg Secure.
- 证明CPA \(\Rightarrow\) CPA2.
- 用PRFs构造CPA.
通过这条逻辑链,我们就实现了用PRFs yields Multi-Msg Secure.
Key words: Multi-Msg Secure; IND-CPA; PRFs
Reference: 3.5 3.6.2 3.6.3
IND-CPA(选择明文攻击)#
全称Indistinguishable-Chosen-Plaintext Attack.
\(Def\):
下证:CPA\(\Rightarrow\) Multi-Msg Secure.
CPA2 \(\Rightarrow\) Multi-Msg Secure#
由于根据CPA证明比较简单,课上老师选择定义更强的CPA变种CPA2,直接证明CPA2\(\Rightarrow\) Multi-Msg Secure.
即: CPA2 with respect to Multi-Msg Secure
Recall the Definition of Multi-Msg-Secure,
对于这个结论,我们不作严谨证明。考虑CPA2的定义,它代表的Adversary具有相当于能够根据上次密文选择下一次的明文的能力,也就是他选择明文的能力是 Adaptive 的,而相比起来,Multi-Msg Secure 中的Adversary只能一次性发完所有明文,即后面的信息必须在第一次发送前就产生好。显然,在CPA2下安全的定义可以得到在Multi-Msg Secure定义下的安全,即CPA2 \(\Rightarrow\) Multi-Msg Secure.我们逻辑链条的第一步达成。
CPA \(\Rightarrow\) CPA2#
The Power of A in IND-CPA can be trivially simulated in CPA2.
可以看到在直觉上CPA\(\Rightarrow\) CPA2是很自然的,只要把phase1,phase2中发送的能得到确定密文的单条信息用CPA2中多个Challenge phase发两条相同信息来代替即可。但是问题在于,这又是一个由少到多、由弱到强的证明,因为CPA只有一个challenge的机会,而CPA2有无穷的challenge机会,我们之前在证明PRG的指数扩展的时候也遇到过,是相对困难的。这时候,就可以再次请出强大的工具: Hybrid argument,用它来实现多项式个小片段证明的链接。
这个构造是非常巧妙的。前\(i\)个challenge用\(b=1\)处理,其余用\(b=0\)处理,相邻的Game相当于只有一次Challenge的区别,就相当于CPA,而最终的Game0和Gameq恰好相当于所有的信息对都是在做Challenge,这就成功地从多个CPA,链接、构造到了CPA2。至此,我们逻辑链条的第二步达成。
Why IND-CPA?#
In One Time Pad,We must keep \(\vert M\vert = \vert K\vert\),that means we only can encrypt the \(m\) of the same length. So,by using IND-CPA, Can we achieve encrypt all the messages of \(M=\{0,1\}^*\).i.e,can \(m=m_1 \vert\vert m_2 \cdots \vert\vert m_l\) leads to \(Enc(m)=Enc(m_1) \vert\vert Enc(m_2) \cdot \vert\vert Enc(m_l)\)?
Luckily,the answer is We Can! (It can be proved theoretically)
但是在同一个challenge phase 中,我们一般还是要做到两条信息等长
Further Discussion#
在IND-CPA下,Adversary只知道密文\(c\)的长度,不知道其他有关明文\(m\)的任何额外信息。回忆香农安全的定义:Adversary不会知道任何有关明文\(m\)的额外信息。那么我们自然要问,只泄露长度,是否可以接受?
答案是完全可以。因为对于任意确定性算法,要么无法隐藏长度,要么要使用非常非常大(一般是指数级的)Cost,并且在实际应用中,长度确实并没有多关键。
那么我们可以进一步回答为什么IND-CPA在现实应用中这么重要的原因,它是在攻击者只能窃听的情况下,保证efficiency下,能够做到最好的一种安全定义。
Use PRFs achieve IND-CPA#
这是逻辑链条的最后一步,我们预期实现:
Goal: how to build an IND-CPA Scheme in PRFs
首先要明确PRFs到底应该如何用来加密
\(Gen(1^*)\rightarrow sk\)中的\(sk\)等价于\(\{F\}_I\)中的index \(I\).具体地说, $$ Enc(sk,m:r)=r,F_{sk}(r) \oplus m\ Dec(sk,c_1,c_2)=c_2 \oplus F_{sk}(c_1) $$
其中,r是纯随机的,根据PRFs的性质,\(F_{sk}(r)\)是满足伪随机的
The security of PRFs#
可以看到,通过维护一张表,我们能保证A用相同的明文访问时得到纯随机的密文是一致的。由于这张表是动态创建的,当A有确实的明文发过来才会记录在这张表上,这种技术我们称之为 Lazy Sampling.
Proof: PRF\(\Rightarrow\) CPA#
Using Reduction:
PRFs vs PRG#
这是下一讲的核心,我们将证明PRFs和PRG完全等价,这一讲先证明简单的方向,即PRG \(\Leftarrow\) PRFs.然后再简单对另一个方向做一点尝试
PRG\(\Leftarrow\)PRFs#
老师授课时比较匆忙,没有特别详细地展开证明,简单介绍思路(以后我搞明白了再来补充) $$ PRG(k)=PRF_K(1) \vert\vert PRF_K(2) \cdots \vert\vert PRF_K(l) $$ 简单来说就是绑定index后,通过内嵌的形式再做extension.
PRG\(\Rightarrow\)PRFs#
非常复杂。
Attempt1#
一种很naive的想法是用PRG生成一串非常非常长(指数级)的字符串,再从中分割出\(K=1,K=2,\cdots ,k=2^r\)段的PRFs.正如前面所说的,这个字符串非常长,而且是线性的,效率非常低。所以我们在下一讲中会引入很好的一个想法,即用二叉树实现,具体见下一讲。