如何定义一个PRG是否安全?
PRG是将一个从{0,1}s中随机 抽取的字符串k映射到{0,1}n上的算法。
当然,由于{0,1}s的数量(2^s)远远小于{0,1}n的数量(2^n),PRG又是一一映射,因此G(k)只是{0,1}n的极小一部分。
因此,如果G(k)的分布和真正的{0,1}n上的均匀分布无法分辨(indistinguishable),就称 PRG是一种安全的算法。因为在这种情况下,G(k)的每一位和其他位都是独立的,无法根据几位推测出另一位。
如何让G(k)伪装成{0,1}n上的均匀分布?
检验标准:找不到对于G有效的分辨算法A。
何为分辨算法A?
判断一个{0,1}n是否是随机生成的
A(x)={10A think x is randomA think x is not random(56) (56) A ( x ) = { 1 A t h i n k x i s r a n d o m 0 A t h i n k x i s n o t r a n d o m
何为有效的分辨算法?
衡量指标:advantange
Adv(A,G)=|P(A(x:x∈G(k)))−P(A(x:x∈0,1n))| A d v ( A , G ) = | P ( A ( x : x ∈ G ( k ) ) ) − P ( A ( x : x ∈ 0 , 1 n ) ) |
Adv(A,G)∈[0,1] A d v ( A , G ) ∈ [ 0 , 1 ]
越靠近0,说明分辨算法A越难将经过G加密的key和随机生成的{0,1}n分辨开来。
越靠近1,越容易分辨,说明A对于G这种PRG是有效的。
绝对安全的PRG,是找不到能够将其和均匀分布分辨开来的这样的算法A的。
是否存在这样绝对安全的PRG?
布吉岛。
存在绝对安全的PRG=>P!=NP
某个PRG是安全的,当且仅当它是不可预测的
回顾定义:
安全:不存在能够将其与均匀分布分辨的方法
不可预测:无法从前i位推测第i+1位
可预测=>不安全的证明:
如果一个PRG是可预测的,那么存在某个整数i(1<=i<=n)和某种算法A,使得第1,2,……i位可以预测第i+1位,即:
P(A(x|1,2,3……i)=xi+1)=1/2+ϵϵ is non−neg P ( A ( x | 1 , 2 , 3 … … i ) = x i + 1 ) = 1 / 2 + ϵ ϵ i s n o n − n e g
那么,存在相应的分辨算法B,能够将这个PRG映射之后的G(k)和普通的均匀分布分辨出来:
B(x)={10if B(x|1,2,……i)=xi+1else(266) (266) B ( x ) = { 1 i f B ( x | 1 , 2 , … … i ) = x i + 1 0 e l s e
直观地理解:B算法根据A算法的结果决定自己的输出。如果A算法成功预测,则当前的{0,1}n来自一个人工制造的PRG可能性更大;反之,更可能来自均匀分布。
于是:
P(B(G(k))=1)=1/2+ϵ P ( B ( G ( k ) ) = 1 ) = 1 / 2 + ϵ ,而对于随机生成的字符串r,由于
x1,2,……,i和xi+1独立,因此A(x1,2……,i)与xi+1独立,所以 x 1 , 2 , … … , i 和 x i + 1 独 立 , 因 此 A ( x 1 , 2 … … , i ) 与 x i + 1 独 立 , 所 以
P(B(r)=1)=1/2 P ( B ( r ) = 1 ) = 1 / 2
两者相差
ϵ ϵ ,这不是一个可以忽略的量。于是B就是那个可以把G(k)和r分辨的算法。
直观地理解:如果存在一个足够好的预测算法A,就存在一个足够好的分辨算法B。
如果不存在一个足够好的分辨算法B,就不存在一个足够好的预测算法A。
不安全->不可测:
描述:如果一个{0,1}n,对于
∀i∈[1,n],都无法通过x|1,2,……i预测xi+1 ∀ i ∈ [ 1 , n ] , 都 无 法 通 过 x | 1 , 2 , … … i 预 测 x i + 1 ,那么也不存在一个算法能够证明这个01串是来自PRG制造还是随机生成的。
证明:略。