Chapter 4 基于难解计算(Intractable Computation)的密码学
John Nash提出一个观点:如果破解一个密码算法的计算耗费时间很长,那么这个密码算法从实用的角度上是安全的。这里的安全并非某种攻击无法发生,而是即使发生了要破解密码也开销极大,也就是”难解“。这一观点是超越是跨时代的,在现代密码学中十分重要。
文章目录
一、”难解“(Computationally Infeasible)的定义
这里关注的是攻击算法的时间开销,定量上用渐进运行时间来衡量。
定义4.1 多项式时间算法是指存在一个常数 c , c > 0 c,c>0 c,c>0,对于所有输入(字符串) x x x,算法都能在 O ( ∣ x ∣ c ) O(|x|^c) O(∣x∣c)步内完成。
多项式时间算法具有封闭性:一个多项式时间算法运行多项式次,整个过程依然是多项式时间。
密码算法拥有一个安全参数 λ \lambda λ(security parameter),一般指的是密钥长度是 λ \lambda λ-bit,用于衡量破解该算法的复杂度。值得注意的是,一个大小为N的数,在计算机中只需要用 log 2 N \log_2N log2N-bit表示。
二、”成功概率极低“(negligible)的定义
在安全性上,我们既无需考虑时间开销大的攻击,也不需要考虑成功概率极低的攻击。下面将对成功概率极低(negligible)进行正式定义。
定义4.2 一个函数 f f f是成功概率极低的(negligible),当且仅当对所有的多项式 p ( λ ) p(\lambda) p(λ),都有 lim λ → ∞ p ( λ ) f ( λ ) = 0 \lim_{\lambda \rightarrow\infin}p(\lambda)f(\lambda)=0 limλ→∞p(λ)f(λ)=0。
这里的 f ( λ ) f(\lambda) f(λ)就是函数的成功概率。这个定义意味着 f ( λ ) f(\lambda) f(λ)比多项式更快速趋向0(比如 1 2 λ \frac{1}{2^\lambda} 2λ1),因此可以视为非常小。
推论:如果对任意整数 c c c,有 lim λ → ∞ λ c f ( λ ) = 0 \lim_{\lambda \rightarrow\infin}\lambda^cf(\lambda)=0 limλ→∞λcf(λ)=0,那么 f f f是成功概率极低的(negligible)。
**推论证明:**假设 f f f满足 lim λ → ∞ λ c f ( λ ) = 0 \lim_{\lambda \rightarrow\infin}\lambda^cf(\lambda)=0 limλ→∞λcf(λ)=0这一性质,那么对于每一个多项式 p p p,记其最高次为 d d d,有 lim λ → ∞ p ( λ ) f ( λ ) = lim λ → ∞ p ( λ ) λ d + 1 ⋅ λ d + 1 f ( λ ) = ( lim λ → ∞ p ( λ ) λ d + 1 ) ⋅ ( lim λ → ∞ λ d + 1 f ( λ ) ) = 0 \lim_{\lambda \rightarrow\infin}p(\lambda)f(\lambda)=\lim_{\lambda \rightarrow\infin} \frac{p(\lambda)}{\lambda^{d+1}}\cdot\lambda^{d+1}f(\lambda) =(\lim_{\lambda \rightarrow\infin} \frac{p(\lambda)}{\lambda^{d+1}})\cdot(\lim_{\lambda \rightarrow\infin}\lambda^{d+1}f(\lambda))=0 limλ→∞p(λ)f(λ)=limλ→∞λd+1p(λ)⋅λd+1f(λ)=(limλ→∞λd+1p(λ))⋅(limλ→∞λd+1f(λ))=0。因此根据定义4.2, f f f是negligible。
在此基础上,我们认为如果两个函数的成功概率之差极低(也就是两者发生概率极其相似),那么这两个函数是近似的。
定义4.3 如果 f , g : N → R f,g:N\rightarrow R f,g:N→R是两个函数, f ≈ g f\approx g f≈g当且仅当 ∣ f ( λ ) − g ( λ ) ∣ |f(\lambda)-g(\lambda)| ∣f(λ)−g(λ)∣是negligible的。
这里的 ∣ f ( λ ) − g ( λ ) ∣ |f(\lambda)-g(\lambda)| ∣f(λ)−g(λ)∣又称为用于区分这两个函数的advantage(没有找到合适的中文翻译)。
三、不可区分(Indistinguishability)的定义
1、定义
在第二章时定义过库的等价性(Interchangeable),那么在定义了negligible之后就可以定义库的不可区分性——虽然不可区分比等价的条件稍弱,但是在考虑negligible的安全性上是足够的。
定义4.4 两个库是不可区分的(Indistinguishable, L l e f t ≈ ~ L r i g h t L_{left}\widetilde\approx L_{right} Lleft≈ Lright),当且仅当对于所有多项式时间的程序 A A A都有 P r [ A ⋄ L l e f t ⇒ t r u e ] ≈ P r [ A ⋄ L r i g h t ⇒ t r u e ] Pr[A\diamond L_{left} \Rightarrow true]\approx Pr[A\diamond L_{right} \Rightarrow true] Pr[A⋄Lleft⇒true]≈Pr[A⋄Lright⇒true]。
与等价性类似,不可区分也有传递性,以及一个连接的性质:如果 L l e f t ≈ ~ L r i g h t L_{left}\widetilde\approx L_{right} Lleft≈ Lright,则 L ∗ ⋄ L l e f t ≈ ~ L ∗ ⋄ L r i g h t L^*\diamond L_{left}\widetilde\approx L^*\diamond L_{right} L∗⋄Lleft≈ L∗⋄Lright。
2、Bad-Event引理
引理4.1(Bad-Event) 两个库各加入一个名为bad的变量并初始化为0。若两个库的代码除了bad=1时的部分外完全相同,那么
∣
P
r
[
A
⋄
L
l
e
f
t
⇒
1
]
−
P
r
[
A
⋄
L
r
i
g
h
t
⇒
1
]
∣
≤
P
r
[
A
⋄
L
l
e
f
t
s
e
t
s
b
a
d
=
1
]
.
|Pr[A \diamond L_{left} ⇒ 1] − Pr[A \diamond L_{right} ⇒ 1]|\le Pr[A \diamond L_{left} \quad sets\quad bad = 1].
∣Pr[A⋄Lleft⇒1]−Pr[A⋄Lright⇒1]∣≤Pr[A⋄Lleftsetsbad=1].
其实这里bad的引入只是为了更形象地说明,如果两个库运行不一致时就是bad event。实际上,这里可以理解为,两个库运行结果不一样的概率,小于等于某个库的代码运行到导致结果不一样的地方(sets bad)的概率,因为此外所有代码都是相同的。
比如下面这两个库,可以发现导致结果不一样的就是return true那里,因此可以标注为set bad=1。由于是均匀采样,可以知道set bad的概率为 1 2 λ \frac{1}{2^\lambda} 2λ1。利用上述引理,可以发现这两个库的概率之差小于等于 1 2 λ \frac{1}{2^\lambda} 2λ1,根据定义4.4和定义4.2,这两个库不可区分——也就是盲猜(左边随机猜x)基本上是猜不中(右边永远return false)的。
引理证明:下面使用条件概率进行证明。定义事件
B
l
e
f
t
B_{left}
Bleft是
L
l
e
f
t
L_{left}
Lleft在运行中设置bad=1,
B
r
i
g
h
t
B_{right}
Bright是
L
r
i
g
h
t
L_{right}
Lright在运行中设置bad=1。对于任何一个程序
A
A
A,根据全概率公式有
P
r
[
A
⋄
L
l
e
f
t
⇒
1
]
=
P
r
[
A
⋄
L
l
e
f
t
⇒
1
∣
B
l
e
f
t
]
P
r
[
B
l
e
f
t
]
+
P
r
[
A
⋄
L
l
e
f
t
⇒
1
∣
B
l
e
f
t
‾
]
P
r
[
B
l
e
f
t
‾
]
P
r
[
A
⋄
L
r
i
g
h
t
⇒
1
]
=
P
r
[
A
⋄
L
r
i
g
h
t
⇒
1
∣
B
r
i
g
h
t
]
P
r
[
B
r
i
g
h
t
]
+
P
r
[
A
⋄
L
r
i
g
h
t
⇒
1
∣
B
r
i
g
h
t
‾
]
P
r
[
B
r
i
g
h
t
‾
]
Pr[A \diamond L_{left} \Rightarrow 1]=Pr[A \diamond L_{left} \Rightarrow 1|B_{left}]Pr[B_{left}]+Pr[A \diamond L_{left} \Rightarrow 1|\overline{B_{left}}]Pr[\overline{B_{left}}]\\ Pr[A \diamond L_{right} \Rightarrow 1]=Pr[A \diamond L_{right} \Rightarrow 1|B_{right}]Pr[B_{right}]+Pr[A \diamond L_{right} \Rightarrow 1|\overline{B_{right}}]Pr[\overline{B_{right}}]\\
Pr[A⋄Lleft⇒1]=Pr[A⋄Lleft⇒1∣Bleft]Pr[Bleft]+Pr[A⋄Lleft⇒1∣Bleft]Pr[Bleft]Pr[A⋄Lright⇒1]=Pr[A⋄Lright⇒1∣Bright]Pr[Bright]+Pr[A⋄Lright⇒1∣Bright]Pr[Bright]
其中
P
r
[
B
l
e
f
t
]
=
P
r
[
B
r
i
g
h
t
]
Pr[B_{left}]=Pr[B_{right}]
Pr[Bleft]=Pr[Bright],这是因为在进入bad=1之前所有代码都是一样的。故记
p
∗
=
d
e
f
P
r
[
B
l
e
f
t
]
=
P
r
[
B
r
i
g
h
t
]
p^*\overset{def}=Pr[B_{left}]=Pr[B_{right}]
p∗=defPr[Bleft]=Pr[Bright],这个概率正是运行到bad=1即bad event发生的概率。因此advantage计算如下:
∣
P
r
[
A
⋄
L
l
e
f
t
⇒
1
]
−
P
r
[
A
⋄
L
r
i
g
h
t
⇒
1
]
∣
=
∣
P
r
[
A
⋄
L
l
e
f
t
⇒
1
∣
B
l
e
f
t
]
P
r
[
B
l
e
f
t
]
+
P
r
[
A
⋄
L
l
e
f
t
⇒
1
∣
B
l
e
f
t
‾
]
P
r
[
B
l
e
f
t
‾
]
−
P
r
[
A
⋄
L
r
i
g
h
t
⇒
1
∣
B
r
i
g
h
t
]
P
r
[
B
r
i
g
h
t
]
+
P
r
[
A
⋄
L
r
i
g
h
t
⇒
1
∣
B
r
i
g
h
t
‾
]
P
r
[
B
r
i
g
h
t
‾
]
∣
=
∣
p
∗
(
P
r
[
A
⋄
L
l
e
f
t
⇒
1
∣
B
l
e
f
t
]
−
P
r
[
A
⋄
L
r
i
g
h
t
⇒
1
∣
B
r
i
g
h
t
]
)
+
(
1
−
p
∗
)
(
P
r
[
A
⋄
L
l
e
f
t
⇒
1
∣
B
l
e
f
t
‾
]
−
P
r
[
A
⋄
L
r
i
g
h
t
⇒
1
∣
B
r
i
g
h
t
‾
]
)
∣
=
p
∗
∣
P
r
[
A
⋄
L
l
e
f
t
⇒
1
∣
B
l
e
f
t
]
−
P
r
[
A
⋄
L
r
i
g
h
t
⇒
1
∣
B
r
i
g
h
t
]
∣
\begin{aligned} |Pr[A \diamond L_{left} ⇒ 1] − Pr[A \diamond L_{right} ⇒ 1]|=&|Pr[A \diamond L_{left} \Rightarrow 1|B_{left}]Pr[B_{left}]+Pr[A \diamond L_{left} \Rightarrow 1|\overline{B_{left}}]Pr[\overline{B_{left}}]\\ &-Pr[A \diamond L_{right} \Rightarrow 1|B_{right}]Pr[B_{right}]+Pr[A \diamond L_{right} \Rightarrow 1|\overline{B_{right}}]Pr[\overline{B_{right}}]|\\ \\ =&|p^*(Pr[A \diamond L_{left} \Rightarrow 1|B_{left}]-Pr[A \diamond L_{right} \Rightarrow 1|B_{right}])\\ &+(1-p^*)(Pr[A \diamond L_{left} \Rightarrow 1|\overline{B_{left}}]-Pr[A \diamond L_{right} \Rightarrow 1|\overline{B_{right}}])|\\\\ =&p^*|Pr[A \diamond L_{left} \Rightarrow 1|B_{left}]-Pr[A \diamond L_{right} \Rightarrow 1|B_{right}]| \end{aligned}
∣Pr[A⋄Lleft⇒1]−Pr[A⋄Lright⇒1]∣===∣Pr[A⋄Lleft⇒1∣Bleft]Pr[Bleft]+Pr[A⋄Lleft⇒1∣Bleft]Pr[Bleft]−Pr[A⋄Lright⇒1∣Bright]Pr[Bright]+Pr[A⋄Lright⇒1∣Bright]Pr[Bright]∣∣p∗(Pr[A⋄Lleft⇒1∣Bleft]−Pr[A⋄Lright⇒1∣Bright])+(1−p∗)(Pr[A⋄Lleft⇒1∣Bleft]−Pr[A⋄Lright⇒1∣Bright])∣p∗∣Pr[A⋄Lleft⇒1∣Bleft]−Pr[A⋄Lright⇒1∣Bright]∣
最后一步的化简是因为
P
r
[
A
⋄
L
l
e
f
t
⇒
1
∣
B
l
e
f
t
‾
]
−
P
r
[
A
⋄
L
r
i
g
h
t
⇒
1
∣
B
r
i
g
h
t
‾
]
=
0
Pr[A \diamond L_{left} \Rightarrow 1|\overline{B_{left}}]-Pr[A \diamond L_{right} \Rightarrow 1|\overline{B_{right}}]=0
Pr[A⋄Lleft⇒1∣Bleft]−Pr[A⋄Lright⇒1∣Bright]=0:在没有bad=1的条件下,两个库的代码时一致的,因此两个概率相等。至此,由于
∣
P
r
[
A
⋄
L
l
e
f
t
⇒
1
∣
B
l
e
f
t
]
−
P
r
[
A
⋄
L
r
i
g
h
t
⇒
1
∣
B
r
i
g
h
t
]
∣
≤
1
|Pr[A \diamond L_{left} \Rightarrow 1|B_{left}]-Pr[A \diamond L_{right} \Rightarrow 1|B_{right}]|\le1
∣Pr[A⋄Lleft⇒1∣Bleft]−Pr[A⋄Lright⇒1∣Bright]∣≤1,因此得到
∣
P
r
[
A
⋄
L
l
e
f
t
⇒
1
]
−
P
r
[
A
⋄
L
r
i
g
h
t
⇒
1
]
∣
≤
p
∗
=
d
e
f
P
r
[
A
⋄
L
l
e
f
t
s
e
t
s
b
a
d
=
1
]
|Pr[A \diamond L_{left} ⇒ 1] − Pr[A \diamond L_{right} ⇒ 1]|\le p^*\overset{def}= Pr[A \diamond L_{left} \quad sets\quad bad = 1]
∣Pr[A⋄Lleft⇒1]−Pr[A⋄Lright⇒1]∣≤p∗=defPr[A⋄Lleftsetsbad=1]
证毕。
四、不可区分的实例
许多密码算法需要均匀采样字符串,而在前几章中并没有说明如果均匀采样的密钥重复了能否保证安全性。因此在此将证明均匀采样和不重复选取这个两种方法(可以视为两个库)是不可区分的。不过在此之前,先介绍生日悖论(birthday problem)。
1、生日悖论(birthday problem)
生日悖论是指在 q q q个人(相当于在一年的日期中均匀采样)中存在两人生日相同的概率有多大。一般人认为这个概率很小,但事实上随着 q q q的增大,这个概率很快就已经较高( q = 70 q=70 q=70的时候概率已达到99.9%!)。
我们将这样的概率称之为生日概率(birthday probability),并记为 B i r t h d a y P r o b ( q , N ) BirthdayProb(q,N) BirthdayProb(q,N),其中 q q q就是总人数, N N N是取值数(在生日问题下 N = 365 N=365 N=365)。那么上述概率也等价于下面这个程序返回值为1的概率:
定理4.2 B i r t h d a y P r o b ( q , N ) = 1 − ∏ i = 1 q − 1 ( 1 − i N ) BirthdayProb(q,N)=1-\prod_{i=1}^{q-1}(1-\frac{i}{N}) BirthdayProb(q,N)=1−∏i=1q−1(1−Ni)
**定理证明:**要计算这个概率,可以计算它的补,也就是上述程序中的每一对
i
、
j
i、j
i、j都不相同。对于上面的程序
B
(
q
,
N
)
B(q,N)
B(q,N),对于最外层循环每一轮,也就是每一次(第一次除外)
s
i
s_i
si取值,要想与前面的值不重复(前面的每个值也要求不重复),只有
N
−
(
i
−
1
)
N-(i-1)
N−(i−1)种选择,所以概率就是
N
−
(
i
−
1
)
N
=
1
−
i
−
1
N
\frac{N-(i-1)}{N}=1-\frac{i-1}{N}
NN−(i−1)=1−Ni−1。由于每一轮是独立的,因此概率可以相乘。而要想没有重复,就需要每一轮都没有重复,故计算如下:
B
i
r
t
h
d
a
y
P
r
o
b
(
q
,
N
)
=
1
−
P
r
[
B
(
q
,
N
)
=
=
0
]
=
1
−
(
1
−
1
N
)
(
1
−
2
N
)
.
.
.
(
1
−
q
−
1
N
)
=
1
−
∏
i
=
1
q
−
1
(
1
−
i
N
)
\begin{aligned} BirthdayProb(q,N)=&1-Pr[B(q,N)==0]\\ =&1-(1-\frac{1}{N})(1-\frac{2}{N})...(1-\frac{q-1}{N})\\ =&1-\prod_{i=1}^{q-1}(1-\frac{i}{N}) \end{aligned}
BirthdayProb(q,N)===1−Pr[B(q,N)==0]1−(1−N1)(1−N2)...(1−Nq−1)1−i=1∏q−1(1−Ni)
根据定理4.2可以得到生日概率的上下界,而且我们更关注的是 q q q远小于 N N N的情况。
定理4.3 若
q
≤
2
N
q\le \sqrt{2N}
q≤2N,以下不等式成立:
0.632
q
(
q
−
1
)
2
N
≤
B
i
r
t
h
d
a
y
P
r
o
b
(
q
,
N
)
≤
q
(
q
−
1
)
2
N
0.632\frac{q(q-1)}{2N}\le BirthdayProb(q,N) \le \frac{q(q-1)}{2N}
0.6322Nq(q−1)≤BirthdayProb(q,N)≤2Nq(q−1)
上述不等式也说明了生日概率的紧确界为
Θ
(
q
2
N
)
\Theta(\frac{q^2}{N})
Θ(Nq2)。
定理证明:
首先证明上界。这里用到一个不等式(对非负数x,y):
(
1
−
x
)
(
1
−
y
)
=
1
+
x
y
−
(
x
+
y
)
≥
1
−
(
x
+
y
)
(1-x)(1-y)=1+xy-(x+y)\ge1-(x+y)
(1−x)(1−y)=1+xy−(x+y)≥1−(x+y)。更一般地,有
∏
i
=
1
n
(
1
−
x
i
)
≥
1
−
∑
i
=
1
n
x
i
\prod_{i=1}^n(1-x_i)\ge1-\sum_{i=1}^nx_i
∏i=1n(1−xi)≥1−∑i=1nxi。这个推广在前一步的基础上也较好证明,因为可以把前一步的
(
x
+
y
)
(x+y)
(x+y)当作一个新的
x
′
x'
x′,再次进行类似的放缩。利用此不等式,可以证明:
B
i
r
t
h
d
a
y
P
r
o
b
(
q
,
N
)
=
1
−
∏
i
=
1
q
−
1
(
1
−
i
N
)
≤
1
−
(
1
−
∑
i
=
1
q
−
1
i
N
)
=
1
−
(
1
−
q
(
q
−
1
)
2
N
)
=
q
(
q
−
1
)
2
N
BirthdayProb(q,N)=1-\prod_{i=1}^{q-1}(1-\frac{i}{N}) \le1-(1-\sum_{i=1}^{q-1}\frac{i}{N}) =1-(1-\frac{q(q-1)}{2N})=\frac{q(q-1)}{2N}
BirthdayProb(q,N)=1−i=1∏q−1(1−Ni)≤1−(1−i=1∑q−1Ni)=1−(1−2Nq(q−1))=2Nq(q−1)
下面证明下界。这里运用到另一个不等式:当
0
≤
x
≤
1
0\le x\le1
0≤x≤1时,
1
−
x
≤
e
−
x
≤
1
−
0.632
x
1-x\le e^{-x}\le1-0.632x
1−x≤e−x≤1−0.632x。这里的
0.632
0.632
0.632即
1
−
1
e
1-\frac{1}{e}
1−e1,也就是在
x
=
1
x=1
x=1处恰好
1
−
k
x
=
e
−
x
1-kx=e^{-x}
1−kx=e−x的
k
k
k的取值。
利用此不等式,可以证明(根据
q
≤
2
N
q\le \sqrt{2N}
q≤2N,有
q
(
q
−
1
)
2
N
≤
1
\frac{q(q-1)}{2N}\le1
2Nq(q−1)≤1):
B
i
r
t
h
d
a
y
P
r
o
b
(
q
,
N
)
=
1
−
∏
i
=
1
q
−
1
(
1
−
i
N
)
≥
1
−
∏
i
=
1
q
−
1
(
e
−
i
N
)
=
1
−
e
−
∑
i
=
1
q
−
1
i
N
=
1
−
e
−
q
(
q
−
1
)
2
N
≥
1
−
(
1
−
0.632
q
(
q
−
1
)
2
N
)
=
0.632
q
(
q
−
1
)
2
N
\begin{aligned} BirthdayProb(q,N)=&1-\prod_{i=1}^{q-1}(1-\frac{i}{N})\\ \ge&1-\prod_{i=1}^{q-1}(e^{-\frac{i}{N}}) =1-e^{-\sum_{i=1}^{q-1}\frac{i}{N}} =1-e^{-\frac{q(q-1)}{2N}}\\ \ge&1-(1-0.632\frac{q(q-1)}{2N})=0.632\frac{q(q-1)}{2N} \end{aligned}
BirthdayProb(q,N)=≥≥1−i=1∏q−1(1−Ni)1−i=1∏q−1(e−Ni)=1−e−∑i=1q−1Ni=1−e−2Nq(q−1)1−(1−0.6322Nq(q−1))=0.6322Nq(q−1)
2、一对不可区分库:均匀采样、不重复选
下面给出均匀采样( L s a m p − L L_{samp-L} Lsamp−L)和不重复选( L s a m p − R L_{samp-R} Lsamp−R)库的定义。可以看到不重复选就是把选过的 R R R除去。
显然这两个库并不等价。一个简单的区分程序就是多次选取,如果有重复的返回值为真,否则为假。均匀采样的返回值为真的概率不为零,但是不重复选是永远返回假的,因此两个库不等价。
但是这两个库是不可区分的,它们的advantage正好是生日概率。
定理4.4 对于所有采样 q q q次的程序 A A A,均匀采样和不重复选(如上图定义)的advantage ≤ B i r t h d a y P r o b ( q , 2 λ ) \le BirthdayProb(q,2^\lambda) ≤BirthdayProb(q,2λ)。结合定理4.3可以知道advantage的紧确界为 Θ ( q 2 2 λ ) \Theta(\frac{q^2}{2^\lambda}) Θ(2λq2),按照定义4.4,两个库不可区分。
**定理证明:**只需证明advantage的上界是生日概率。这里用到如下两个中间库,显然 L s a m p − L ≡ L h y b − L , L s a m p − R ≡ L h y b − R L_{samp-L}\equiv L_{hyb-L},L_{samp-R}\equiv L_{hyb-R} Lsamp−L≡Lhyb−L,Lsamp−R≡Lhyb−R。因此原本两个库的advantage可以转化为这两个中间库的advantage。
根据引理4.1(bad event),advantage ≤ \le ≤ L h y b − L L_{hyb-L} Lhyb−L设置bad=1的概率。于 L h y b − L L_{hyb-L} Lhyb−L而言,bad=1当且仅当取到重复的数值的概率,如果是采样 q q q次,那么概率就是 B i r t h d a y P r o b ( q , 2 λ ) BirthdayProb(q,2^\lambda) BirthdayProb(q,2λ)。证毕。
定理价值:
这一对不可区分库说明了以后再讨论安全性时,均匀采样不必考虑重复值的问题,因为这两者之间的差别是negligible的。此外,如果安全性证明中运用到了生日概率的上下界来证明不可区分,需要注意定理4.3中强调过 q ≤ 2 N q\le \sqrt{2N} q≤2N。也就是说当 q q q超过这个值 2 λ + 1 ∼ 2 λ 2 \sqrt{2^{\lambda+1}}\sim2^{\frac{\lambda}{2}} 2λ+1∼22λ时就不能证明安全了,相当于安全参数仅有 λ 2 \frac{\lambda}{2} 2λ——具有这样性质的安全性称为birthday bound security。
定理拓展:
假设 R R R中放置了一些取值(数量为多项式量级)。那么均匀采样和不允许取 R R R中取值的采样(如下图定义),也是不可区分的。
简单证明:假设程序 A A A调用 q q q次,每次的 R R R中值的数量为 n i n_i ni。那么类似定理4.4的证明过程,可以知道它们advantage ≤ 1 − ∏ i = 1 q ( 1 − n i 2 λ ) \le 1-\prod_{i=1}^{q}(1-\frac{n_i}{2^\lambda}) ≤1−∏i=1q(1−2λni)。若 ∑ i = 1 q n i ≤ 2 λ \sum_{i=1}^qn_i\le 2^\lambda ∑i=1qni≤2λ(这个其实用来满足证明下界中用到的 x ≤ 1 x\le 1 x≤1;而且由于 n i n_i ni是多项式量级,这个前提是能满足的),类似定理4.3可以得到 0.632 ∑ i = 1 q n i 2 λ ≤ 0.632\frac{\sum_{i=1}^qn_i}{2^\lambda}\le 0.6322λ∑i=1qni≤advantage ≤ ∑ i = 1 q n i 2 λ \le\frac{\sum_{i=1}^qn_i}{2^\lambda} ≤2λ∑i=1qni(与定理4.3相比,其实就是 N = 2 λ N=2^\lambda N=2λ,分子是求和)。由于 n i n_i ni都是多项式量级,因此根据定义4.2可知advantage是negligible的,因此两个库不可区分。