原视频链接:安全规约
起因是最近对安全规约的过程很感兴趣,想着找一些资源学习下。
这里感谢知友的分享:放上原帖:在巨人肩头赏风景
话不多说,直接开始。
正文
密码学中的大多数证明都从规约开始。
如果想证明一个规约:
如果 Y Y Y是安全的,那么 X X X也是安全的。
可以使用矛盾来证明:
如果 X X X不安全,那么 Y Y Y也不安全。
我们将展示,如果存在一个PPT(概率多项式事件敌手) A \mathcal A A可以打破 X X X,那么我们可以构造一个PPT敌手 B \mathcal B B来打破 Y Y Y。
证明到最后,因为不存在PPT敌手 B \mathcal B B打破 Y Y Y,所以也就不存在一个PPT敌手 A \mathcal A A可以打破 X X X。
附上原图:

下面就是规约的过程是如何构造的。
大多数的规约证明都很相似。
可以把 B \mathcal B B画成一个大盒子,然后 B \mathcal B B可以使用 A \mathcal A A的能力,作为一个子盒子, B \mathcal B B可以呼叫(call) A \mathcal A A,与 A A A进行交互
回想一下, A A A是用来打破困难问题 X X X的,我们不知道它是如何进行工作的,但是假设他有很高的概率可以破解问题 X X X。

B \mathcal B B需要去模拟挑战者X的挑战者 C X \mathcal C_X CX 与敌手 A \mathcal A A进行游戏交互。
现在 B \mathcal B B扮演敌手角色,跟 Y Y Y的挑战者 C Y \mathcal C_Y CY进行游戏交互。

左侧蓝线部分交互是 C Y \mathcal C_Y CY与在问题实例 Y Y Y下与 B \mathcal B B进行,而右侧绿线部分的交互是 B \mathcal B B作为挑战者 C X \mathcal C_X CX在问题实例 X X X下与敌手 A \mathcal A A进行。要注意 B \mathcal B B不同角色的转换。

需要注意的是所有的计算都是在PPT时间内进行的。
其次是关于模拟的。因为 B \mathcal B B需要模拟问题实例 X X X的挑战者与 A \mathcal A A进行交互。所以这个交互过程,对 A \mathcal A A而言必须跟真实的挑战者一样是不可区分(我的理解是此时 B \mathcal B B的角色就相当于一个模拟器simulator)。
最后需要注意的是赢得游戏的概率。假如 A A A打破 X X X的概率为二分之一加上可忽略的概率,那么 B B B打破 Y Y Y的概率也是可忽略的。同理假如 A A A打破 X X X的概率不可忽略,那么 B B B打破 Y Y Y的概率也不可忽略。

下面尝试使用伪随机生成器PRG来举个例子。
先说明什么是伪随机生成器(pseudorandom generator):
令 G G G为一个函数,定义 G : { 0 , 1 } n → { 0 , 1 } n ′ , n ′ > n , n ′ = p o l y ( n ) G:\{0,1\}^n \rightarrow\{0,1\}^{n'},n'>n,n'=poly(n) G:{0,1}n→{0,1}n′,n′>n,n′=poly(n),同时 G G G是一个多项式时间确定型算法。他并不是随机的,而是通过算法生成的伪随机数。
对于所有概率多项式时间敌手 A \mathcal A A或者区分器 D \mathcal D D,存在一个可忽略函数 n e g ( n ) neg(n) neg(n), n n n为安全参数,使得:
P r s ← { 0 , 1 } n ; r = G ( s ) : D ( 1 n , r ) → R = P r r ← { 0 , 1 } n : D ( 1 n , r ) → R ∓ n e q ( n ) (1) \begin{aligned} &Prs\\leftarrow\\{0,1\\}\^n; r=G(s):D(1\^n,r)\\rightarrow R \\ &= Prr\\leftarrow\\{0,1\\}\^n:D(1\^n,r)\\rightarrow R \mp neq(n) \end{aligned} \tag{1} Prs←{0,1}n;r=G(s):D(1n,r)→R=Prr←{0,1}n:D(1n,r)→R∓neq(n)(1)
html
加一段分析,上述就是PRG安全的定义。
就是让区分器$\mathcal D$来区分值r究竟是通过伪随机生成器得到的,还是随机选择得到的。
有时候看着公式很多,但是里面的每一个公式都有特别的意义,能理解的话会发现这比用大白话讲出来更省空间。
下面就可以使用PRG的特性来进行加密了。
基于PRG的加密
秘钥生成算法: G e n ( 1 n ) → k : k ← { 0 , 1 } n Gen(1^n)\rightarrow k:k\leftarrow\{0,1\}^n Gen(1n)→k:k←{0,1}n
加密算法: E n c ( k , m ) → c : c = G ( k ) ⊕ m Enc(k,m) \rightarrow c:c=G(k) \oplus m Enc(k,m)→c:c=G(k)⊕m
解密算法: D e c ( k , c ) → m ′ : m ′ = G ( k ) ⊕ c Dec(k,c)\rightarrow m':m'=G(k)\oplus c Dec(k,c)→m′:m′=G(k)⊕c
把上面的加密方案定义为 X X X。
那么可以得出以下结论:
如果 G G G是一个安全的 P R G PRG PRG,那么 X X X在单消息窃听游戏中将会是一个安全的加密 E N C ENC ENC
如何证明?矛盾证明
如果存在一个PPT敌手 A \mathcal A A可以攻破加密方案 X X X,那么我们可以构造另一个PPT敌手 B \mathcal B B去攻破 G G G
html
插一条分析
攻破加密方案的优势就是二分之一加上一个不可忽略的概率。
攻破G的意思就是可以区分消息是随机的还是伪随机的。
下面就可以再画一个盒子 B \mathcal B B它想要去玩 P R G PRG PRG游戏。

P R G PRG PRG游戏的定义是挑战者会首先给与 B \mathcal B B一个安全参数和值 1 n , r 1^n,r 1n,r,这里的 r r r正如上面介绍的有两种生成方式,一种是随机生成,另一种是通过函数 G G G产生。
然后 B \mathcal B B会返回给挑战者一个应答 R / P R R/PR R/PR
B \mathcal B B盒子内部的运行机制如下:

敌手 A \mathcal A A与 B \mathcal B B玩加密游戏。加密游戏的定义是 B \mathcal B B与 A \mathcal A A交互,将安全参数 1 n 1^n 1n发给 A \mathcal A A,然后 A \mathcal A A会发送给 B \mathcal B B两条消息,分别是 { m 0 , m 1 } \{m_0,m_1\} {m0,m1}; B \mathcal B B在返回给 A \mathcal A A一个消息 c c c(它可能是 m 0 m_0 m0或者 m 1 m_1 m1的密文);然后 A \mathcal A A再返回给 B \mathcal B B一个猜测比特 b ′ b' b′(猜测 c c c是哪一条消息的密文)。
此时 B \mathcal B B的行为跟加密游戏的挑战者一样,他需要跟加密游戏中的敌手 A \mathcal A A进行交互。
那如何将盒子内外的交互建立联系呢?

- B \mathcal B B首先将盒子内外的安全参数建立链接。
- 当接收到 A \mathcal A A发来的两条消息 m 0 , m 1 m_0,m_1 m0,m1之后, B \mathcal B B会选择一个随机比特 b ← { 0 , 1 } b\leftarrow\{0,1\} b←{0,1},对 m b m_b mb进行加密;下面使用外部挑战者给与的随机值 r r r(此时的 r r r可能是随机的也可能是伪随机的)进行加密得到 c = m b ⊕ r c=m_b \oplus r c=mb⊕r;然后将 c c c发送给敌手 A \mathcal A A。
- 当接收到来自 A \mathcal A A的比特 b ′ b' b′时有两种情况:case 1: b ′ = b b'=b b′=b,此时敌手猜测正确,返回 P R PR PR给外部的挑战者作为输出;case 2: b ′ ≠ b b' \neq b b′=b,此时返回 R R R给外部的挑战者。
html
插一条分析,如果r是伪随机的,那么B计算的c是通过r跟m异或得到的,他也是伪随机的。
如果r是随机的,c也是随机的,根据一次一密,方案是完美安全的。
还需要分析三件事情:

首先是b是PPT的。
其实是证明 B \mathcal B B的模拟与真实加密中的挑战者对 A \mathcal A A而言是不可区分的。
需要去说明如果 A \mathcal A A可以以不可忽略的概率去猜测比特 b ′ b' b′,这也就意味着
P r b ′ = b = 1 / 2 + non-negl ( n ) (2) \begin{aligned} Prb'=b=1/2+\text{non-negl}(n) \end{aligned} \tag{2} Prb′=b=1/2+non-negl(n)(2)
,因此
P r B → R ∣ r is R = P r B → R ∣ r is P R ∓ 1 / 2 + non-negl ( n ) (3) \begin{aligned} PrB \\rightarrow R\|\\text{r is }R= PrB \\rightarrow R\|\\text{r is } PR\\\mp 1/2+\text{non-negl}(n) \end{aligned} \tag{3} PrB→R∣r is R=PrB→R∣r is PR∓1/2+non-negl(n)(3)
当 r r r为随机值的时候,敌手 A \mathcal A A只能以 1 / 2 1/2 1/2的概率去猜,此时:
P r b ′ ≠ b ∣ r is R = 1 / 2 (4) \begin{aligned} Prb'\\neq b\|\\text{r is }R=1/2 \end{aligned} \tag{4} Prb′=b∣r is R=1/2(4)
当 r r r为伪随机值的时候,敌手 A \mathcal A A能以 1 / 2 1/2 1/2加上不可忽略的概率去猜,也就是猜对( b ′ = b b'=b b′=b)的可能性很大,那么 b ′ ≠ b b'\neq b b′=b:
P r b ′ ≠ b ∣ r is P R = 1 / 2 − non-negl ( n ) (5) \begin{aligned} Prb'\\neq b\|\\text{r is }PR=1/2-\text{non-negl}(n) \end{aligned} \tag{5} Prb′=b∣r is PR=1/2−non-negl(n)(5)
公式(4)-(5)可以得到 b ′ ≠ b b'\neq b b′=b的两种情况是不可忽略的。
1 / 2 − ( 1 / 2 − non-negl ( n ) ) = non-negl ( n ) (6) \begin{aligned} 1/2-(1/2-\text{non-negl}(n)) \\=\text{non-negl}(n) \end{aligned} \tag{6} 1/2−(1/2−non-negl(n))=non-negl(n)(6)
因此如果敌手 A \mathcal A A在猜测 b ′ b' b′时有不可忽略的优势,那么敌手 B \mathcal B B就有不可忽略的优势可以区分 R / P R R/PR R/PR
因为我们假设 G G G是一个安全的伪随机生成器,所以加密方案 X X X也是安全的。