拟随机和之前理论密码学的伪随机其实原理一样,只是有些细微处的差别,首先伪随机听起来不像是真正的随机,像是人为构造的假的随机一样,但拟随机内容多一点,像是模拟一个真随机,所以真随机也可以叫成拟随机,但把伪随机叫成真随机是有些奇怪的,后面我们均考虑拟随机。另外无论是拟随机函数还是拟随机置换都是对一个函数族来说的,并不是一个单个的函数是拟随机。
函数族
设l1,l2>0是正整数,是安全参数λ的多项式,函数族F的定义如下:
F:={Fs}s∈S(1λ)⊆Γl1,l2其中Γl1,l2是从{0,1}l1到{0,1}l2的所有函数构成的集合,S是一个下标集合。
需要注意的是,这里l1,l2都是安全参数λ的多项式,所以不同的λ,Γl1,l2里的函数的定义域和值域都会发生变化,当然函数的个数也会发生变化,{0,1}l1→{0,1}l2上的函数一共有2l22l1个。另外函数族F的下标集合S必然也是与λ相关的,记为S(1λ),所以λ变化时,{Fs}s∈S(1λ)里函数的个数也在发生变化,当然,S与λ到底是什么关系就与具体的函数族的构造相关。
拟随机函数族
一个函数族F:={Fs}s∈S(1λ)⊆Γl1,l2称为是拟随机函数族,如果对于任意PPT敌手A,存在可忽略函数negl,使得:
AdvPRFA,F=|Pr[s←S:AFS(1λ)=1]−Pr[f←Γl1,l2:Af(1λ)=1]|≤negl(λ)这里的AFS和mathcalAf是说算法A黑盒地调用函数FS和f,即oracle形式的调用,算法A给函数oracle一个自变量,函数oracle返回一个函数值,且相同的询问回复相同的值。这个是非常显然的,因为FS和f都是{0,1}l1→{0,1}l2上的函数,光自变量的值就有2l1个,PPT的算法A根本无法完整存储这个函数,只能以oracle形式进行调用。
置换族
置换族的定义和函数族的定义完全类似,首先整数l=l1=l2,是安全参数λ的多项式,置换族P的定义如下:
P:={Pt}t∈T(1λ)⊆Πl其中π是置换,T与S一样是有效抽样的集合,或者说下标的集合,其余关于安全参数λ的东西都完全类似。
拟随机置换族
一个置换族P:={Pt}t∈T(1λ)⊆Πl称为是{0,1}l上的拟随机置换族,如果对于任意的PPT敌手A,存在可忽略函数negl,使得:
AdvPRFA,P=|Pr[t←T:APt(1λ)=1]−Pr[π←Πl:Aπ(1λ)=1]|≤negl(λ)由此我们给出了拟随机置换族和拟随机函数族的定义,实际上这两个概念是存在一定联系的,集中表现在下面的定理中。
对任意整数l>0,l是安全参数λ的一个多项式,集合{0,1}l上的拟随机置换族一定是拟随机函数族
接下来的主要工作就是证明这个定理,这个定理看起来也比较直观,本身置换就是函数的一种,那这个定理就是说当安全参数λ逐渐变大时,即使我们仅仅考虑置换函数构成的拟随机置换族,它也可以看成是一个拟随机的函数族,也就是说仅仅是占函数总量很少的置换构成的函数族,PPT的算法就已经无法有效分辨了它是置换还是普通函数了,PPT的算法能力还是太弱了。
首先对任意一个PPT的算法A,有下式成立:
根据拟随机置换族的定义,必有|Pr[t←T:APt(1λ)=1]−Pr[π←Πl:Aπ(1λ)=1]|≤negl1(λ),代入上式就有:
|Pr[t←T:APt(1λ)=1]−Pr[f←Γl:Af(1λ)=1]|≤|Pr[t←T:APt(1λ)=1]−Pr[π←Πl:Aπ(1λ)=1]|+|Pr[π←Πl:Aπ(1λ)=1]−Pr[f←Γl:Af(1λ)=1]|≤negl1(λ)+|Pr[π←Πl:Aπ(1λ)=1]−Pr[f←Γl:Af(1λ)=1]所以只需要证明有可忽略函数negl2(λ)使得|Pr[π←Πl:Aπ(1λ)=1]−Pr[f←Γl:Af(1λ)=1]|≤negl2(λ)成立即可,可以发现,这个式子代表着集合{0,1}l上的函数族和置换族是不可区分的,接下来就证这个式子。
要证明这个式子,就要用到实验序列的方法,首先算法A是多项式时间的算法,所以可以假设A至多询问q次oracle,q是一个多项式,因为用相同的值询问时,oracle必然返回相同的值,所以可以提前假设算法A的q次询问必不重复。由此我们给出实验序列如下:
Exp1(λ):π←Πlr←Rxi←A(1λ,r,Y1⋯i−1)∈{0,1}l(i=1⋯q)Yi←π(xi)(i=1⋯q)b←A(1λ,r,Y1⋯q)∈{0,1}outputb |
Exp2(λ):Y1⋯Yq←{0,1}lr←Rxi←A(1λ,r,Y1⋯i−1)∈{0,1}l(i=1⋯q)ifYi∉Y1⋯i−1thenYitoA,elseYi←{0,1}l∖Y1⋯i−1(i=1⋯q)b←A(1λ,r,Y1⋯q)∈{0,1}outputb |
Exp3(λ):π←Πlr←Rxi←A(1λ,r,Y1⋯i−1)∈{0,1}l(i=1⋯q)YitoAb←A(1λ,r,Y1⋯q)∈{0,1}outputb |
Exp4(λ):f←Γlr←Rxi←A(1λ,r,Y1⋯i−1)∈{0,1}l(i=1⋯q)Yi←f(xi)(i=1⋯q)b←A(1λ,r,Y1⋯q)∈{0,1}outputb |
这四个实验是相互联系的,首先Exp1(λ)是从Πl里随机挑选了一个置换作为oracle回复算法A的询问,因为假设算法A的询问不相同,根据置换的特点,可知oracle的回复必然也互不相同。然而Exp2(λ)是将挑选置换作为oracle这一步省略掉了,直接随机挑选了多项式个函数值Y1⋯Yq←{0,1}l,这些函数值可能有相同的,但Exp2(λ)里做了特殊处理,它在oracle的回复做了手脚,一般是直接以Yi回复xi的询问,但Exp2(λ)里会先比较Yi跟前i−1次的回复有没有重复的,如果有重复,就再重新随机挑选一个跟前i−1次回复不重复的Yi回复A,如果不重复,就直接回复原Yi。
所以Exp2(λ)最终得到的q次回复完全就是q个互不相同的随机串,这与Exp1(λ)实际上得到的结果是相同的,首先Exp1(λ)得到的结果必不相同,这是由置换的性质决定的,但为什么是随机的呢?因为在Exp1(λ)的oracle里,置换π←Πl是随机选的,那A得到任何一个随机串r的概率都是等可能的:
所以Exp2(λ)与Exp1(λ)这两个实验里算法A能见到的东西是一模一样的,所以必有:
Pr[Exp1(λ)=1]=Pr[Exp2(λ)=1]再考虑Exp3(λ),实际上Exp3(λ)和Exp2(λ)是非常相似的,Y1⋯Yq都是随机取的,但Exp3(λ)并没有考虑里面有重复的情况,直接以Yi回复xi的询问,而Exp2(λ)却对出现重复时给了一个新的要求。所以,如果Y1⋯Yq里面不出现重复,Exp3(λ)和Exp2(λ)是完全一样的,都直接以Yi回复xi的询问,设事件F表示:存在i≠j,Yi=Yj,即F=∪i≠j(Yi=Yj),则有:
(Exp2(λ)=1)∧¬F=(Exp3(λ)=1)∧¬F根据概率差引理有:
|Pr[Exp2(λ)=1]−Pr[Exp3(λ)=1]|≤Pr[F]这里的三个事件Exp2(λ)=1,Exp3(λ)=1,F确实是在同一个概率空间里的,因为底层都是Y1⋯Yq和随机数r的选择,在这些选择的基础下,Exp2(λ)=1与Exp3(λ)=1可能发生也可能不发生,事件F也是可能发生或者不发生。
再考虑Exp4(λ),实际上Exp4(λ)和Exp3(λ)是非常相似的,Exp3(λ)里的Y1⋯Yq是随机取的,但Exp4(λ)只是随机从Γl里挑选了一个函数f,直接以f(xi)回复xi的询问。我们如果能证明对任意的xi,oracle的回复f(xi)都是一个随机值,那Exp4(λ)和Exp3(λ)本质上就完全没有区别,只是随机回复选取的方式不同,一个是直接选,一个是利用函数族,先随机挑选函数,再计算回复(函数值)。首先对任意的y∈0,1l:
Pr[y=f(xi)]=Pr[f1]Pr[y=f(xi)|f=f1]+⋯+Pr[fn]Pr[y=f(xi)|f=fn]=Pr[f1]Pr[y=f1(xi)]+⋯+Pr[fn]Pr[y=fn(xi)]=Pr[f1]+⋯Pr[f2l2l−l]=2l2l−l2l2l=12l所以显然oracle的回复f(xi)是一个随机值,Exp4(λ)和Exp3(λ)就是一模一样的,也就是:
Pr[Exp3(λ)=1]=Pr[Exp4(λ)=1]另外为什么有:
Pr[f1]Pr[y=f1(xi)]+⋯+Pr[fn]Pr[y=fn(xi)]=Pr[f1]+⋯Pr[f2l2l−l]此式成立呢?实际上也非常简单,因为f1⋯fn是函数族Γl里的所有元素,可以想象成一个函数对应着一个长为l2l的二进制串,而上面的式子就是说xi固定,fi固定,y固定,则此时的Pr[y=f(xi)]要么等于0,要么等于1,什么时候等于1呢?就是f对应的这个二进制串在xi处对应的l个比特必须是y,因为y是固定的,这样的比特串一共有2l2l−l个,所以就对应着2l2l−l个1,另外f是随机选取的函数,所以一定有Pr[f]=12l2l,进而就有上面的等式成立了。其实这些在之前的理论密码学里老师也讲到过一些,只是没有给出标准的证明而已。
所以根据上面标红的几个概率等式,我们可以得到下面的概率等式:
|Pr[Exp1(λ)=1]−Pr[Exp4(λ)=1]|≤Pr[F]另外显然有:
Pr[π←Πl:Aπ(1λ)=1]=Pr[Exp1(λ)=1]Pr[f←Γl:Af(1λ)=1]=Pr[Exp4(λ)=1]带入上式既有:
|Pr[π←Πl:Aπ(1λ)=1]−Pr[f←Γl:Af(1λ)=1]|≤Pr[F]这就非常接近我们的目标了,只要我们能证明Pr[F]是一个可忽略的函数就可以了,实际上有:
Pr[F]=Pr[∪i≠j(Yi=Yj)]≤∑i≠jPr[(Yi=Yj)]=∑i≠j2−l=C2q⋅2−l≤q22l+1这里q是多项式大小的,则显然q22l+1是关于安全参数λ的可忽略函数,至此,全部证毕。
总结
这个定理看上去非常简单,实际上理论密码学课上老师也证明过,但是老师并没有详细的证明,但现在我明白了这个定理的详细证明,也是利用了实验序列的思想,并没有那么的直白。本质上是利用了不可区分的传递性搭建了桥梁,但困难的地方在于,如何把一个模糊的认为正确的证明过程用标准的密码学语言和数学语言表述出来,这也是需要慢慢培养的。
- 本文作者: sklois-gjx
- 本文链接: http://yoursite.com/2020/04/29/拟随机置换与拟随机函数/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!