Lec4 Stream Cipher#
约 1561 个字 预计阅读时间 10 分钟
在第三讲中,已经完成了前置知识的介绍,这一讲将集中于我们的主要目标
Goal: How To Design a Secure Cryptosystem with Shorter Secret Key.
具体地说,这一节的目标是如何通过一个短的seed来生成一个长的string,用这个string进行加密,但是又能保证安全性
Key Words: CIND; pseudo-random; PRG; Stream Cipher; EAV-secure
Reference: 3.3; 3.4.1
Computational Indistinguishability#
即计算不可区分性(CIND),课上并没有讲,但是是本节内容的重要前提,我选择对其做一个介绍
Let \(\{X_n\}_n\) and \(\{Y_n\}_n\) be two ensembles, we say \(\{X_n\}_n\) and \(\{Y_n\}_n\) are CIND.
if \(\forall\)parameter \(n\), \(\forall\)PPT(Attacker) \(A\), $$ \vert \Pr\limits_{x\leftarrow X_n}[A(x)=1]-\Pr\limits_{y\leftarrow Y_n}[A(y)=1]\vert \leq small $$
绝对值三角不等式: $$ \vert a-c\vert \leq \vert a-b\vert + \vert b-c\vert $$
Pseudo Random#
\(sk\) is Truly random; \(str\) is Random looking.
From Theoretical Perspection:
- The running time of adv.
- The size of “string”.
Defnition: (Pseudo-Random Generator)[PRG]#
Let \(\{G_n\}_n\) be a function that maps \(\{0,1\}^n \rightarrow \{0,1\}^{l(n)}\)
we say \(G\) is a PRG if
- \(l(n) > n\)
- let \(X_n\) be the ensemble “induced from” \(G\),let \(Y_n\) be the ensemble of uniform distribution on \(\{0,1\}^n\)
we have \(\{X_n\}_n \approx \{Y_n\}_n\)
1.代表扩展性 2.代表伪随机性,2的等价定义为:
对所有概率多项式时间的区分器\(D\)来说,存在可忽略的函数\(negl()\)满足 $$ \vert Pr[D(r)=1]-Pr[D(G(s))=1]\vert \leq negl(n) $$ 其中,\(r\)是从\(\{0,1\}^{l(n)}\)中均匀随机选择的,种子\(s\)是从\(\{0,1\}^n\)中均匀随机选择的,并且概率来源为\(D\)的随机性和对\(r,s\)的选择
\(l(\cdot)\)也称为\(G\)的扩展系数
Further Discussion of Pseudo-Random#
伪随机发生器的性能实际上并没有预期的好。考虑\(l(n)=2n\),此时对于\(\{0,1\}^{2n}\)的均匀分布,\(2^{2n}\)中每个字符串被选择的概率为\(2^{-2n}\);对于\(G\)生成的伪随机分布,因为\(G\)接收长度为\(n\)的输入,不同可能字符串最多有\(2^n\)个,所以目标字符串(长度为\(2n\))在其中的占比只有\(2^n /2^{2n}=2^{-n}\),这说明大部分字符串不会作为\(G\)的输出。
比较显然,对于一个指数时间的区分器\(D\),很容易能区分出随机字符串和伪随机字符串。但是因为我们只考虑多项式时间的Adversary,它还是比较安全的。
伪随机发生器的存在性#
进行了这么多理论上的分析,更重要的问题是它真的存在吗?
教材认为,基于“单向函数是存在的”这个假设,伪随机发生器是存在的。
只要数学上存在没有已知有效算法解决的困难问题,如大数分解,伪随机发生器就能依赖于这个假设被构造出来。
Security Game: 通过设计安全游戏来更好地描述和刻画安全有关的定义,是本节的重点之一,通常有ch(chanllenger)和A(adversary)两个主体构成.
Security Game of PRG:
这个Security Game 也被叫做 区分器 ,顾名思义,若能区分出密钥,返回1,不能则返回0
Define: $$ Adv(A)=P[Awins]-\frac{1}{2} $$ we say \(G\) is \(PRG\) if \(Adv(A)\) is small.
Stream Cipher#
Define a construction:
\(Gen(1^n)\rightarrow sk\leftarrow \{0,1\}^n\)
\(Enc(sk,m)\rightarrow G(sk)\oplus m\)
\(Dec(sk,c)\rightarrow G(sk)\oplus c\)
这种构造方式(加密方案)就叫做 Stream Cipher,即流密码。它完全脱胎于 One Time Pad,即加密过程依赖于异或操作,它的特点是首先生成一个伪随机比特流,然后让该比特流与明文做异或运算。
EAV-secure#
即窃听攻击安全,定义如下:
\(Adv(A)\)的定义与上面相同,当\(Adv(A)\)很小时,我们说这是满足EAV-secure的
Reduction#
用归约证明核心定理
\(Theorem\): Let \(\pi =(Gen,Enc,Dec)\) be a stream cipher,\(\pi\) is EAV-secure under the Assumption that \(G\) is \(PRG\).
By contriposition:
if \(\exists\) an efficient adversary \(A\) breaks EAV-secure, then we can build a Reduction \(R^A\) that breaks the Pseudo-Random.
Constuct a security game:
非常巧妙的归约方法,借助于R,假设\(A\)能攻破\(EAV\),推出\(R^A\)能攻破\(PR\),(攻破即\(Adv(A)\)较大,就是证明中的NonSmall)
Longer N#
上面的构造方法把密钥从\(n\)扩展到\(l(n)\),这个扩展的长度是定的。我们自然可以想到是否有可变扩展长度的构造方案。在这里,我们讨论的就是这个问题:
Given a \(G\) maps \(\{0,1\}^n \rightarrow \{0,1\}^{n+1}\), Design \(G^{\prime}\) maps \(\{0,1\}^n \rightarrow \{0,1\}^{2n}\)
这种构造方法被称为长度可变的伪随机发生器,它的定义为:
- 令\(s\)为一个字符串,整数\(l >0\),则\(G(s,1^l)\)输出一个长度为\(l\)的字符串
- \(\forall s,l,l^{\prime}\),\(l<l^{\prime}\),字符串\(G(s,1^l)\)是\(G(1^{l^{\prime}})\)的前缀
- 定义\(G_l(s)=G(s,1^{l(\vert s\vert)})\),\(\forall l(\cdot)\),有\(G_l\)是一个扩展因子为\(l\)的伪随机发生器
解决的方法很简单,就是跑\(2n\)次的\(G\),最后把每次扩展的1个bit拼接成\(2n\)个bit即可。难点在于证明,在大于1的运行中,输入的\(n\)本身是伪随机的,我们需要证明伪随机的这\(n\)个bit映射后仍然是伪随机的,并且满足无法区分性,即 $$ Game0 \approx Game1 \approx Game2 \cdots \approx Game2n $$
证明方法类似前面,利用归约证明。但过于复杂,讲义上也没做要求,就不证了
Weakness#
前面提到,Stream Cipher派生自One Time Pad,那么它自然也继承了One Time Pad的弊端,即它的密钥是唯一的.对于 $$ sk\oplus m_1=c_1\ sk\oplus m_2=c_2 $$ 由异或的性质 $$ c_1\oplus c_2=m_1\oplus m_2 $$ 显然泄露了额外有关明文的信息,它是不可靠的.
对于这个问题,将在下一讲中对多信息情境下的安全性给出构造方案与证明.