Sequences of Games: A Tool for Taming Complexity in Security Proofs
密码学中的安全证明有时可以被组织为一系列的游戏。在某种特定情况下,这可以是一个有用的工具,可以简化安全证明的复杂性,否则安全证明可能变得非常混乱,复杂和微妙以至于无法去验证。
The Basic Idea
加密原语的安全性通常被定义为攻击者和挑战者之间进行的攻击游戏。敌手和挑战者之间的通信也都是概率过程所以我们将游戏建模为一个概率空间。通常,安全定义与某些特定的事件S相关联。安全性意味着对于每一个有效的敌手,事件S发生的概率非常接近于某一个特定的目标概率:通常,要么是0,或 1/2。
为了证明使用游戏序列方法的安全性。一种是构建一序列的游戏:Game 0, Game 1, …, Game n,其中Game 0是针对给定敌手和密码原语的原始攻击游戏。令
S
0
S_0
S0是事件S,当i=1,…,n时,该结构定义了Game i中的事件
S
i
S_i
Si。证明表明了对于
i
=
0
,
.
.
.
,
n
−
1
i=0,...,n-1
i=0,...,n−1,
P
r
[
S
i
]
Pr[S_i]
Pr[Si]可忽略地接近
P
r
[
S
i
+
1
]
Pr[S_{i+1}]
Pr[Si+1],且
P
r
[
S
n
]
Pr[S_n]
Pr[Sn]等于或可忽略地接近目标概率(比如EU-CMA中的0,IND-CPA/CCA中的1/2)。那么,结合
n
n
n是一个常数,可得
P
r
[
S
]
Pr[S]
Pr[S]可忽略地接近目标概率,安全性得证。这就是Sequences-of-Game证明的一般框架。然而,在构造这样的证明时,我们希望连续游戏之间的变化非常小,这样分析变化就尽可能简单。接下来,我们介绍连续游戏之间的过渡的三种类型:
这在后续的Elgamal证明中得到了充分的体现,Game 0就是在IND-CPA下的Elgamal的加密游戏,然后Game 1就是在IND-CPA下的OneTime-Pad游戏,令 S S S来表示 S 0 S_0 S0事件,该事件是Game 0中 b = b ^ b=\hat{b} b=b^的事件,令 S 1 S_1 S1表示Game 1中 b = b ^ b=\hat{b} b=b^的事件, P r [ S 1 ] Pr[S_1] Pr[S1]就表示目标概率 1 / 2 1/2 1/2(OneTime-Pad)。那么我们要做的是两件事:1. P r [ S 1 ] , P r [ S 2 ] , . . . , P r [ S n ] Pr[S_1],Pr[S_2],...,Pr[S_n] Pr[S1],Pr[S2],...,Pr[Sn]之间差异非常小。2. P r [ S ] Pr[S] Pr[S]接近于目标概率 P r [ S n ] Pr[S_n] Pr[Sn]。如果证明了 P r [ S ] Pr[S] Pr[S]接近于 P r [ S n ] Pr[S_n] Pr[Sn]就说明敌手无法攻破Elgamal加密。那么如何来做 P r [ S 1 ] , P r [ S 2 ] , . . . , P r [ S n ] Pr[S_1],Pr[S_2],...,Pr[S_n] Pr[S1],Pr[S2],...,Pr[Sn]这一系列游戏的过渡呢,让前后两个Game的差异非常小。总体思想其实就是:Game 0就是我们的方案,Game n是我们目标实现的理想方案(OneTime-Pad),如果能说明这两个无法区分,那么我们的方案就近似于理想方案,安全性得证。
不可区分的过渡。在这样的一个过渡中,认为进行一个小的更改,如果被敌手检测到,将意味着有一种有效的方法来区分这两个不可区分的分布(无论是计算意义上的,还是统计意义上的)。例如,假设 P 1 P_1 P1和 P 2 P_2 P2是计算上不可区分的分布。为了证明 ∣ P r [ S i ] − P r [ S i + 1 ] ∣ |Pr[S_i]-Pr[S_{i+1}]| ∣Pr[Si]−Pr[Si+1]∣是可忽略的,一种方法是存在一个区分算法 D D D,它在Game i和Game i+1之间插值,因此,当给定从分布 P 1 P_1 P1中提取的元素作为输入时, D D D以概率 P r [ S i ] Pr[S_i] Pr[Si]输出 1 1 1,当给定从分布 P 2 P_2 P2中提取的元素作为输入时, D D D以概率 P r [ S i + 1 ] Pr[S_{i+1}] Pr[Si+1]输出 1 1 1。不可区分的假设意味着 ∣ P r [ S i ] − P r [ S i + 1 ] ∣ |Pr[S_i]-Pr[S_{i+1}]| ∣Pr[Si]−Pr[Si+1]∣是可忽略的。通常, D D D的构造是明显的,前提是在过渡中做的更改是非常小的。通常情况下,会将这两个游戏设计为带有辅助输入的Hybrid Game----如果辅助输入来自 P 1 P_1 P1,你便会得到Game i,如果辅助输入来自于 P 2 P_2 P2,你便会得到Game i+1。这样,区分者只需要运行带有输入的一个混合游戏,并在适当的事件发生时输出 1 1 1。
基于失败事件的过渡。在这样的一个过渡中,认为Game i和Game i+1的过程是相同的,除非有某种失败事件
F
F
F发生。为了使得这种类型的过渡更加清晰,最好将两个游戏定义在相同的潜在概率空间中—这两个游戏之间的唯一区别是计算某些随机变量的规则。即,除非F出现,否则两个游戏的过程相同:
S
i
∧
¬
F
⇔
S
i
+
1
∧
¬
F
S_i\wedge \neg F\Leftrightarrow S_{i+1}\wedge \neg F
Si∧¬F⇔Si+1∧¬F
也就是说,事件
S
i
∧
¬
F
S_i\wedge \neg F
Si∧¬F 和
S
i
+
1
∧
¬
F
S_{i+1}\wedge \neg F
Si+1∧¬F 是相同的。这样我们推论出一个定理
Lemma 1 (Difference Lemma). 令
A
,
B
,
F
A,B,F
A,B,F是定义在某些概率分布的事件,并假设
A
∧
¬
F
⇔
B
∧
¬
F
A\wedge \neg F \Leftrightarrow B\wedge \neg F
A∧¬F⇔B∧¬F。那么
∣
P
r
[
A
]
−
P
r
[
B
]
∣
≤
P
r
[
F
]
|Pr[A]-Pr[B]|\le Pr[F]
∣Pr[A]−Pr[B]∣≤Pr[F]。
Proof. 这是一个简单的计算:
P
r
[
A
]
−
P
r
[
B
]
=
P
r
[
A
∧
F
]
+
P
r
[
A
∧
¬
F
]
−
P
r
[
B
∧
F
]
−
P
r
[
B
∧
¬
F
]
=
∣
P
r
[
A
∧
F
]
−
P
r
[
B
∧
F
]
∣
≤
P
r
[
F
]
.
Pr[A]-Pr[B]=Pr[A\wedge F]+Pr[A\wedge \neg F]-Pr[B\wedge F]-Pr[B\wedge \neg F]\\ =|Pr[A\wedge F]-Pr[B\wedge F]|\\ \le Pr[F].
Pr[A]−Pr[B]=Pr[A∧F]+Pr[A∧¬F]−Pr[B∧F]−Pr[B∧¬F]=∣Pr[A∧F]−Pr[B∧F]∣≤Pr[F].
桥接步骤。这一种过渡引入了桥接步骤,这通常是是一种重申如何以完全等效的方式计算某些量的方法。这种改变纯粹是概念性的,且 P r [ S i ] = P r [ S i + 1 ] Pr[S_i]=Pr[S_{i+1}] Pr[Si]=Pr[Si+1]。虽然从原则上来讲,这样的过渡性步骤似乎是不必要的,但如果去除的话,证明将很难形式化。
Elgamal Encryption Security Analysis
在DDH假设下,我们利用一系列游戏证明了Elgamal的语义安全性。
Game 0. 给定一个高效敌手
A
A
A。我们将Game 0定义为语义安全中针对
A
A
A的攻击游戏。为了使事情更加精确和具体,我们可以用以下算法来描述攻击游戏:
x
←
Z
q
,
α
←
γ
x
r
←
R
,
(
m
0
,
m
1
)
←
A
(
r
,
α
)
b
←
{
0
,
1
}
,
y
←
Z
q
,
β
←
γ
y
,
δ
←
α
y
,
ζ
←
δ
⋅
m
b
b
^
←
A
(
r
,
α
,
α
,
β
,
ζ
)
x\leftarrow Z_q,\alpha\leftarrow \gamma^x\\ r\leftarrow R,(m_0,m_1)\leftarrow A(r,\alpha)\\ b\leftarrow \{0,1\},y\leftarrow Z_q,\beta\leftarrow \gamma^y,\delta\leftarrow \alpha^y,\zeta\leftarrow \delta\cdot m_b\\ \hat{b}\leftarrow A(r,\alpha,\alpha,\beta,\zeta)
x←Zq,α←γxr←R,(m0,m1)←A(r,α)b←{0,1},y←Zq,β←γy,δ←αy,ζ←δ⋅mbb^←A(r,α,α,β,ζ)
在该算法中,我们已经建模了一个敌手
A
A
A,
A
A
A是一个确定性算法,它将从某个集合
R
R
R中选取的随机硬币
r
r
r作为作为输入。如果我们将
S
0
S_0
S0定义为
b
=
b
^
b=\hat{b}
b=b^的事件,那么敌手的优势为
∣
P
r
[
S
0
]
−
1
/
2
∣
|Pr[S_0]-1/2|
∣Pr[S0]−1/2∣。
Game 1. 该过渡是基于不可区分性。我们对Game 0做一下小小的改变。即,不是用
α
y
\alpha^y
αy来计算
δ
\delta
δ,而是用
γ
z
\gamma^z
γz来计算
δ
\delta
δ,其中
z
∈
Z
q
z\in Z_q
z∈Zq。该游戏为:
x
←
Z
q
,
α
←
γ
x
r
←
R
,
(
m
0
,
m
1
)
←
A
(
r
,
α
)
b
←
{
0
,
1
}
,
y
←
Z
q
,
β
←
γ
y
,
z
←
Z
q
,
δ
←
γ
z
,
ζ
←
δ
⋅
m
b
b
^
←
A
(
r
,
α
,
α
,
β
,
ζ
)
x\leftarrow Z_q,\alpha\leftarrow \gamma^x\\ r\leftarrow R,(m_0,m_1)\leftarrow A(r,\alpha)\\ b\leftarrow \{0,1\},y\leftarrow Z_q,\beta\leftarrow \gamma^y,z\leftarrow Z_q,\delta\leftarrow \gamma^z,\zeta\leftarrow \delta\cdot m_b\\ \hat{b}\leftarrow A(r,\alpha,\alpha,\beta,\zeta)
x←Zq,α←γxr←R,(m0,m1)←A(r,α)b←{0,1},y←Zq,β←γy,z←Zq,δ←γz,ζ←δ⋅mbb^←A(r,α,α,β,ζ)
令
S
1
S_1
S1为Game 1中
b
=
b
^
b=\hat{b}
b=b^的事件。
Claim 1. P r [ S 1 ] = 1 / 2 Pr[S_1]=1/2 Pr[S1]=1/2。这是因为在Game 2中, δ \delta δ实际上是一个one-time pad,那么敌手的输出 b ^ \hat{b} b^与隐藏位 b b b无关。
Claim 2.
∣
P
r
[
S
0
]
−
P
r
[
S
1
]
=
ϵ
d
d
h
|Pr[S_0]-Pr[S_1]=\epsilon_{ddh}
∣Pr[S0]−Pr[S1]=ϵddh,其中
ϵ
d
d
h
\epsilon_{ddh}
ϵddh是攻破DDH假设的优势(在DDH假设下可以忽略不计)。这一点的证明是显而易见的,在Game 0中,元组
(
α
,
β
,
δ
)
(\alpha,\beta,\delta)
(α,β,δ)的形式为
(
γ
x
,
γ
y
,
γ
x
y
)
(\gamma^x,\gamma^y,\gamma^{xy})
(γx,γy,γxy),而在Game 1中,它的形式是
(
γ
x
,
γ
y
,
γ
z
)
(\gamma^x,\gamma^y,\gamma^z)
(γx,γy,γz),那么在DDH假设下,敌手觉察不出二者的差异。更准确地说,我们的区分算法
D
D
D是这样工作的,这里的
D
D
D其实就是我们所讲的 Simulator:
D
(
α
,
β
,
δ
)
r
←
R
,
(
m
0
,
m
1
)
←
A
(
r
,
α
)
b
←
{
0
,
1
}
,
ζ
←
δ
⋅
m
b
b
^
←
A
(
r
,
α
,
β
,
ζ
)
i
f
b
=
b
^
t
h
e
n
o
u
t
p
u
t
1
e
l
s
e
o
u
t
p
u
t
0
D(\alpha,\beta,\delta)\\ r\leftarrow R,(m_0,m_1)\leftarrow A(r,\alpha)\\ b\leftarrow \{0,1\},\zeta\leftarrow \delta\cdot m_b\\ \hat{b}\leftarrow A(r,\alpha,\beta,\zeta)\\ \mathrm{if\;} b=\hat{b}\\ \mathrm{then \;output\; }1\\ \mathrm{else \;output\; } 0
D(α,β,δ)r←R,(m0,m1)←A(r,α)b←{0,1},ζ←δ⋅mbb^←A(r,α,β,ζ)ifb=b^thenoutput1elseoutput0
算法
D
D
D能够有效地在Game 0和Game 1之间插入。如果
D
D
D的输入是
(
γ
x
,
γ
y
,
γ
x
y
)
(\gamma^x,\gamma^y,\gamma^{xy})
(γx,γy,γxy)的形式,那么计算就像是在Game 0中执行的一样。
P
r
[
x
,
y
←
Z
q
:
D
(
γ
x
,
γ
y
,
γ
x
y
)
=
1
]
=
P
r
[
S
0
]
.
Pr[x,y\leftarrow Z_q:D(\gamma^x,\gamma^y,\gamma^{xy})=1]=Pr[S_0].
Pr[x,y←Zq:D(γx,γy,γxy)=1]=Pr[S0].
如果算法
D
D
D的输入是
(
γ
x
,
γ
y
,
γ
z
)
(\gamma^x,\gamma^y,\gamma^{z})
(γx,γy,γz),那么计算过程就如Game 1。
P
r
[
x
,
y
,
z
←
Z
q
:
D
(
γ
x
,
γ
y
,
γ
z
)
=
1
]
=
P
r
[
S
1
]
.
Pr[x,y,z\leftarrow Z_q:D(\gamma^x,\gamma^y,\gamma^z)=1]=Pr[S_1].
Pr[x,y,z←Zq:D(γx,γy,γz)=1]=Pr[S1].
由此可知,
D
D
D的DDH-优势为
∣
P
r
[
S
0
]
−
P
r
[
S
1
]
∣
|Pr[S_0]-Pr[S_1]|
∣Pr[S0]−Pr[S1]∣(这里是正确密文的概率减去错误密文的概率,就是敌手的优势),我们完成了Claim 2的证明。
结合Claim 1和Claim 2,我们能够得到:
∣
P
r
[
S
0
]
−
1
/
2
∣
=
ϵ
d
d
h
|Pr[S_0]-1/2|=\epsilon_{ddh}
∣Pr[S0]−1/2∣=ϵddh
并且是可忽略的,我们完成了Elgamal加密的安全证明。
Hashed Elgamal
出于种种原因,处理位运算要比群元素快得多。基于此,我们可以使用Elgamal加密的Hash版本。该方案使用了一系列健值hash函数
H
:
=
{
H
k
}
k
∈
K
H:=\{H_k\}_{k\in K}
H:={Hk}k∈K,其中每一个
H
k
:
G
→
{
0
,
1
}
ℓ
H_k:G\rightarrow \{0,1\}^\ell
Hk:G→{0,1}ℓ。
KeyGen.
x
←
Z
q
,
k
←
K
,
α
←
γ
x
,
p
k
←
(
α
,
k
)
,
s
k
←
(
x
,
k
)
.
x\leftarrow Z_q,k\leftarrow K,\alpha\leftarrow \gamma^x,pk\leftarrow (\alpha,k),sk\leftarrow (x,k).
x←Zq,k←K,α←γx,pk←(α,k),sk←(x,k).
Encryption.
y
←
Z
q
,
β
←
γ
y
,
δ
←
α
y
,
h
←
H
k
(
δ
)
,
v
←
h
⊕
m
,
ψ
←
(
β
,
v
)
.
y\leftarrow Z_q,\beta\leftarrow \gamma^y,\delta\leftarrow \alpha^y,h\leftarrow H_k(\delta),v\leftarrow h\oplus m,\psi\leftarrow (\beta,v).
y←Zq,β←γy,δ←αy,h←Hk(δ),v←h⊕m,ψ←(β,v).
Decryption.
m
←
H
k
(
β
x
)
⊕
v
.
m\leftarrow H_k(\beta^x)\oplus v.
m←Hk(βx)⊕v.
Hashed Elgamal加密的安全性的语义安全性,可以在DDH假设以及哈希函数
H
H
H族的熵平滑的假设下证明。粗略地说,这意味着很难区分
(
k
,
H
k
(
δ
)
)
(k,H_k(\delta))
(k,Hk(δ))和
(
k
,
h
)
(k,h)
(k,h),其中
k
←
K
,
δ
←
G
,
h
←
{
0
,
1
}
ℓ
k\leftarrow K,\delta\leftarrow G,h\leftarrow \{0,1\}^\ell
k←K,δ←G,h←{0,1}ℓ。更正式地说,设D使一个算法,该算法以K的一个随机元素和
{
0
,
1
}
ℓ
\{0,1\}^\ell
{0,1}ℓ的一个元素作为输入,并输出一个bit。我们定义D的ES-优势为:
∣
P
r
[
k
←
K
,
δ
←
G
:
D
(
k
,
H
k
(
δ
)
)
=
1
]
−
P
r
[
k
←
K
,
h
←
{
0
,
1
}
ℓ
:
D
(
k
,
h
)
=
1
]
∣
.
|Pr[k\leftarrow K,\delta\leftarrow G:D(k,H_k(\delta))=1]-Pr[k\leftarrow K,h\leftarrow \{0,1\}^\ell:D(k,h)=1]|.
∣Pr[k←K,δ←G:D(k,Hk(δ))=1]−Pr[k←K,h←{0,1}ℓ:D(k,h)=1]∣.
在DDH假设和H为熵平滑的假设下,我们现在概述了Hashed Elgamal加密的语义安全性。
Game 0.这是原始的攻击游戏,表述如下:
x
←
Z
q
,
k
←
K
,
α
←
γ
x
r
←
R
,
(
m
0
,
m
1
)
←
A
(
r
,
α
,
k
)
b
←
{
0
,
1
}
,
y
←
Z
q
,
β
←
γ
y
,
δ
←
α
y
,
h
←
H
k
(
δ
)
,
v
←
h
⊕
m
b
b
^
←
(
r
,
α
,
k
,
β
,
v
)
.
x\leftarrow Z_q,k\leftarrow K,\alpha\leftarrow \gamma^x\\ r\leftarrow R,(m_0,m_1)\leftarrow A(r,\alpha,k)\\ b\leftarrow \{0,1\},y\leftarrow Z_q,\beta\leftarrow \gamma^y,\delta\leftarrow \alpha^y,h\leftarrow H_k(\delta),v\leftarrow h\oplus m_b\\ \hat{b}\leftarrow(r,\alpha,k,\beta,v).
x←Zq,k←K,α←γxr←R,(m0,m1)←A(r,α,k)b←{0,1},y←Zq,β←γy,δ←αy,h←Hk(δ),v←h⊕mbb^←(r,α,k,β,v).
我们定义
S
0
S_0
S0为Game 0中
b
=
b
^
b=\hat{b}
b=b^的事件。
Game 1. 这是基于不可区分性的过渡。我们转换Game 0到Game 1,计算
δ
\delta
δ为
γ
z
,
z
∈
Z
q
\gamma^z,z\in Z_q
γz,z∈Zq。Game 1表述如下:
x
←
Z
q
,
k
←
K
,
α
←
γ
x
r
←
R
,
(
m
0
,
m
1
)
←
A
(
r
,
α
,
k
)
b
←
{
0
,
1
}
,
y
←
Z
q
,
β
←
γ
y
,
z
←
Z
q
,
δ
←
γ
z
,
h
←
H
k
(
δ
)
,
v
←
h
⊕
m
b
b
^
←
(
r
,
α
,
k
,
β
,
v
)
.
x\leftarrow Z_q,k\leftarrow K,\alpha\leftarrow \gamma^x\\ r\leftarrow R,(m_0,m_1)\leftarrow A(r,\alpha,k)\\ b\leftarrow \{0,1\},y\leftarrow Z_q,\beta\leftarrow \gamma^y,z\leftarrow Z_q,\delta\leftarrow \gamma^z,h\leftarrow H_k(\delta),v\leftarrow h\oplus m_b\\ \hat{b}\leftarrow(r,\alpha,k,\beta,v).
x←Zq,k←K,α←γxr←R,(m0,m1)←A(r,α,k)b←{0,1},y←Zq,β←γy,z←Zq,δ←γz,h←Hk(δ),v←h⊕mbb^←(r,α,k,β,v).
令
S
1
S_1
S1为在Game 1中
b
=
b
^
b=\hat{b}
b=b^的事件,我们有:
∣
P
r
[
S
0
]
−
P
r
[
S
1
]
∣
=
ϵ
d
d
h
,
|Pr[S_0]-Pr[S_1]|=\epsilon_{ddh},
∣Pr[S0]−Pr[S1]∣=ϵddh,
证明过程与上述的Elgamal加密的过程相同。
Game 2. 这也是基于不可区分性的过渡。我们将Game 1转换为Game 2,通过简单的随机选择来计算
h
h
h,而不是计算哈希。此外,Game 2表述如下:
x
←
Z
q
,
k
←
K
,
α
←
γ
x
r
←
R
,
(
m
0
,
m
1
)
←
A
(
r
,
α
,
k
)
b
←
{
0
,
1
}
,
y
←
Z
q
,
β
←
γ
y
,
z
←
Z
q
,
δ
←
γ
z
,
h
←
{
0
,
1
}
ℓ
,
v
←
h
⊕
m
b
b
^
←
A
(
r
,
α
,
k
,
β
,
v
)
.
x\leftarrow Z_q,k\leftarrow K,\alpha\leftarrow \gamma^x\\ r\leftarrow R,(m_0,m_1)\leftarrow A(r,\alpha,k)\\ b\leftarrow \{0,1\},y\leftarrow Z_q,\beta\leftarrow \gamma^y,z\leftarrow Z_q,\delta\leftarrow \gamma^z,h\leftarrow \{0,1\}^\ell,v\leftarrow h\oplus m_b\\ \hat{b}\leftarrow A(r,\alpha,k,\beta,v).
x←Zq,k←K,α←γxr←R,(m0,m1)←A(r,α,k)b←{0,1},y←Zq,β←γy,z←Zq,δ←γz,h←{0,1}ℓ,v←h⊕mbb^←A(r,α,k,β,v).
由此得出,
δ
\delta
δ在Game 2中毫无作用。
令
S
2
S_2
S2为在Game 2中
b
=
b
^
b=\hat{b}
b=b^事件发生的概率,我们有。
∣
P
r
[
S
1
]
−
P
r
[
S
2
]
∣
=
ϵ
e
s
.
|Pr[S_1]-Pr[S_2]|=\epsilon_{es}.
∣Pr[S1]−Pr[S2]∣=ϵes.
P
r
[
S
1
]
Pr[S_1]
Pr[S1]和
P
r
[
S
2
]
Pr[S_2]
Pr[S2]之间的任何差异都可以被利用为相应的ES-优势。事实上,很容易可以看出如下算法
D
′
D'
D′可以在Game 1和Game 2之间插值,因此ES-优势等于
∣
P
r
[
S
1
]
−
P
r
[
S
2
]
∣
|Pr[S_1]-Pr[S_2]|
∣Pr[S1]−Pr[S2]∣:
D
′
(
k
,
h
)
x
←
Z
q
,
α
←
γ
x
r
←
R
,
(
m
0
,
m
1
)
←
A
(
r
,
α
,
k
)
b
←
{
0
,
1
}
,
y
←
Z
q
,
β
←
γ
y
,
v
←
h
⊕
m
b
b
^
←
A
(
r
,
α
,
k
,
β
,
v
)
i
f
b
=
b
^
t
h
e
n
o
u
t
p
u
t
1
e
l
s
e
o
u
t
p
u
t
0.
D'(k,h)\\ x\leftarrow Z_q,\alpha\leftarrow \gamma^x\\ r\leftarrow R,(m_0,m_1)\leftarrow A(r,\alpha,k)\\ b\leftarrow \{0,1\},y\leftarrow Z_q,\beta\leftarrow \gamma^y,v\leftarrow h\oplus m_b\\ \hat{b}\leftarrow A(r,\alpha,k,\beta,v)\\ if\; b=\hat{b}\\ \mathrm{then} \; \mathrm{output} 1\\ \mathrm{else}\; \mathrm{output} 0.
D′(k,h)x←Zq,α←γxr←R,(m0,m1)←A(r,α,k)b←{0,1},y←Zq,β←γy,v←h⊕mbb^←A(r,α,k,β,v)ifb=b^thenoutput1elseoutput0.
最终
h
h
h在Game 2中扮演着One-time pad的角色,很明显:
P
r
[
S
2
]
=
1
/
2
Pr[S_2]=1/2
Pr[S2]=1/2
我们得到:
∣
P
r
[
S
0
]
−
1
/
2
∣
≤
ϵ
d
d
h
+
ϵ
e
s
,
|Pr[S_0]-1/2|\le\epsilon_{ddh}+\epsilon_{es},
∣Pr[S0]−1/2∣≤ϵddh+ϵes,
这是可忽略的因为
ϵ
d
d
h
\epsilon_{ddh}
ϵddh和
ϵ
e
s
\epsilon_{es}
ϵes都是可忽略的。
Pseudo-Random Funcitions
令
ℓ
1
\ell_1
ℓ1和
ℓ
2
\ell_2
ℓ2是两个正整数(安全参数)。令
F
:
=
{
F
s
}
s
∈
S
F:=\{F_s\}_{s\in S}
F:={Fs}s∈S是键函数族,其中每个函数
F
s
F_s
Fs从
{
0
,
1
}
ℓ
1
→
{
0
,
1
}
ℓ
2
\{0,1\}^{\ell_1}\rightarrow \{0,1\}^{\ell_2}
{0,1}ℓ1→{0,1}ℓ2。令
Γ
ℓ
1
,
ℓ
2
\Gamma_{\ell_1,\ell_2}
Γℓ1,ℓ2表示所有
{
0
,
1
}
ℓ
1
→
{
0
,
1
}
ℓ
2
\{0,1\}^{\ell_1}\rightarrow \{0,1\}^{\ell_2}
{0,1}ℓ1→{0,1}ℓ2的函数集合。非正式的说,如果难以通过黑箱访问来区分从
F
F
F 中抽取的随机函数和从
Γ
\Gamma
Γ 中抽取的随机函数,那么我们称
F
F
F为伪随机的。
更为正式的说,给定一个敌手
A
A
A,
A
A
A可以通过oracle访问
Γ
ℓ
1
,
ℓ
2
\Gamma_{\ell_1,\ell_2}
Γℓ1,ℓ2中的函数并假设
A
A
A总是输出一个bit。定义的
A
A
A的PRF-优势为:
∣
P
r
[
s
←
S
:
A
F
s
(
)
=
1
]
−
P
r
[
f
←
Γ
ℓ
1
,
ℓ
2
:
A
f
(
)
]
=
1
∣
|Pr[s\leftarrow S:A^{F_s}()=1]-Pr[f\leftarrow \Gamma_{\ell_1,\ell_2}:A^f()]=1|
∣Pr[s←S:AFs()=1]−Pr[f←Γℓ1,ℓ2:Af()]=1∣
我们有如何任何有效敌手的PRF-优势是可以忽略不计的,那么
F
F
F是伪随机的。
Extending the Input Length with a Universal Hash Function
我们现在提出一种结构,它允许扩展伪随机函数族的输入长度。令
ℓ
\ell
ℓ是一个正整数且
ℓ
≤
ℓ
1
\ell\le\ell_1
ℓ≤ℓ1。令
H
:
=
{
H
k
}
k
∈
K
H:=\{H_k\}_{k\in K}
H:={Hk}k∈K为一族键hash函数(
k
k
k是hash函数的密钥,
K
K
K是密钥空间,带有密钥的哈希函数,即使输入值相同,密钥
k
k
k不同,那么输出值也不一样),其中每个
H
k
H_k
Hk映射
{
0
,
1
}
ℓ
→
{
0
,
1
}
ℓ
1
\{0,1\}^{\ell}\rightarrow \{0,1\}^{\ell_1}
{0,1}ℓ→{0,1}ℓ1。我们假设
H
H
H是一个
ϵ
u
h
\epsilon_{uh}
ϵuh-通用hash函数族,其中
ϵ
u
h
\epsilon_{uh}
ϵuh是可忽略的。这意味着对于所有
w
,
w
′
∈
{
0
,
1
}
ℓ
w,w'\in\{0,1\}^\ell
w,w′∈{0,1}ℓ且
w
≠
w
′
w\ne w'
w=w′来说,我们有:
P
r
[
k
←
K
:
H
k
(
w
)
=
H
k
(
w
′
)
]
≤
ϵ
u
h
Pr[k\leftarrow K:H_k(w)=H_k(w')]\le\epsilon_{uh}
Pr[k←K:Hk(w)=Hk(w′)]≤ϵuh
我们定义函数族为:
F
′
:
=
{
F
k
,
s
′
}
(
k
,
s
)
∈
K
×
S
,
F':=\{F'_{k,s}\}_{(k,s)\in K\times S},
F′:={Fk,s′}(k,s)∈K×S,
其中,每个
F
k
,
s
′
F'_{k,s}
Fk,s′是
{
0
,
1
}
ℓ
→
{
0
,
1
}
ℓ
2
\{0,1\}^{\ell}\rightarrow \{0,1\}^{\ell_2}
{0,1}ℓ→{0,1}ℓ2,原理为:将
w
∈
{
0
,
1
}
ℓ
w\in\{0,1\}^{\ell}
w∈{0,1}ℓ给
F
s
(
H
k
(
w
)
)
F_s({H_k(w)})
Fs(Hk(w))。
我们将证明如果 F F F是伪随机的,那么 F ′ F' F′是伪随机的。
Game 0.该游戏表示一个敌手在给定oracle访问一个从
F
′
F'
F′中随机选取的一个函数下的计算。我们假设敌手对oracle进行q次查询。该游戏的过程如下:
k
←
K
,
s
←
S
r
←
R
f
o
r
i
←
1
,
.
.
.
,
q
d
o
w
i
←
A
(
r
,
y
1
,
.
.
.
,
y
i
−
1
)
∈
{
0
,
1
}
ℓ
x
i
←
H
k
(
w
i
)
∈
{
0
,
1
}
ℓ
1
y
i
←
F
s
(
x
i
)
∈
{
0
,
1
}
ℓ
2
.
b
←
A
(
r
,
y
1
,
.
.
.
,
y
q
)
∈
{
0
,
1
}
o
u
t
p
u
t
b
k\leftarrow K,s\leftarrow S\\ r\leftarrow R\\ \mathrm{for\;} i\leftarrow 1,...,q\mathrm{\;do}\\ w_i\leftarrow A(r,y_1,...,y_{i-1})\in \{0,1\}^{\ell}\\ x_i\leftarrow H_k(w_i)\in \{0,1\}^{\ell_1}\\ y_i\leftarrow F_s(x_i)\in \{0,1\}^{\ell_2}.\\ b\leftarrow A(r,y_1,...,y_q)\in \{0,1\}\\ \mathrm{output}\; b
k←K,s←Sr←Rfori←1,...,qdowi←A(r,y1,...,yi−1)∈{0,1}ℓxi←Hk(wi)∈{0,1}ℓ1yi←Fs(xi)∈{0,1}ℓ2.b←A(r,y1,...,yq)∈{0,1}outputb
该算法表示敌手被建模为确定性算法
A
A
A,我们提供随机硬币
r
∈
R
r\in R
r∈R作为输入,在
i
i
i次的迭代循环中,敌手通过随机硬币r和先前的
w
1
,
.
.
.
,
w
i
−
1
w_1,...,w_{i-1}
w1,...,wi−1的查询结果
y
1
,
.
.
.
,
y
i
−
1
y_1,...,y_{i-1}
y1,...,yi−1为输入的函数计算他下一次的查询
w
i
w_i
wi。我们假设
A
A
A输出的每一个
w
1
,
.
.
.
,
w
q
w_1,...,w_q
w1,...,wq值都是不同的。
令
S
0
S_0
S0为Game 0中输出
b
=
1
b=1
b=1的事件。
我们证明的目标是将这个Game转化为一个Game,这一个Game等价于敌手给定Oracle访问
Γ
ℓ
,
ℓ
2
\Gamma_{\ell,\ell_2}
Γℓ,ℓ2的随机元素。使得后一个Game中
b
=
1
b=1
b=1的概率可以忽略不计地接近
P
r
[
S
0
]
Pr[S_0]
Pr[S0]。
Game 1. 该过渡是基于不可区分性。我们现在修改Game 0使得我们使用一个真正的随机函数,从
ℓ
1
\ell_1
ℓ1bits到
ℓ
2
\ell_2
ℓ2bits来替换
F
s
F_s
Fs。Game 1的执行过程如下:
k
←
K
,
f
←
Γ
ℓ
1
,
ℓ
2
r
←
R
f
o
r
i
←
1
,
.
.
.
,
q
d
o
w
i
←
A
(
r
,
y
1
,
.
.
.
,
y
i
−
1
)
∈
{
0
,
1
}
ℓ
x
i
←
H
k
(
w
i
)
∈
{
0
,
1
}
ℓ
1
y
i
←
f
(
x
i
)
∈
{
0
,
1
}
ℓ
2
.
b
←
A
(
r
,
y
1
,
.
.
.
,
y
q
)
∈
{
0
,
1
}
o
u
t
p
u
t
b
k\leftarrow K,f\leftarrow \Gamma_{\ell_1,\ell_2}\\ r\leftarrow R\\ \mathrm{for\;} i\leftarrow 1,...,q\mathrm{\;do}\\ w_i\leftarrow A(r,y_1,...,y_{i-1})\in \{0,1\}^{\ell}\\ x_i\leftarrow H_k(w_i)\in \{0,1\}^{\ell_1}\\ y_i\leftarrow f(x_i)\in \{0,1\}^{\ell_2}.\\ b\leftarrow A(r,y_1,...,y_q)\in \{0,1\}\\ \mathrm{output}\; b
k←K,f←Γℓ1,ℓ2r←Rfori←1,...,qdowi←A(r,y1,...,yi−1)∈{0,1}ℓxi←Hk(wi)∈{0,1}ℓ1yi←f(xi)∈{0,1}ℓ2.b←A(r,y1,...,yq)∈{0,1}outputb
我们声称:
∣
P
r
[
S
0
]
−
P
r
[
S
1
]
∣
=
ϵ
p
r
f
,
|Pr[S_0]-Pr[S_1]|=\epsilon_{prf},
∣Pr[S0]−Pr[S1]∣=ϵprf,
其中
ϵ
p
r
f
\epsilon_{prf}
ϵprf是PRF-优势,与
F
F
F相关,对于一些高效敌手(假设F是伪随机的,那么可以忽略不计)。实际上,以下敌手本质上在Game 0和Game 1之间插入,因此相对于
F
F
F,具有PRF-优势,恰好等于
∣
P
r
[
S
0
]
−
P
r
[
S
1
]
∣
|Pr[S_0]-Pr[S_1]|
∣Pr[S0]−Pr[S1]∣:
O
r
a
c
l
e
m
a
c
h
i
n
e
D
O
k
←
K
,
r
←
R
f
o
r
i
←
1
,
.
.
.
,
q
d
o
w
i
←
A
(
r
,
y
1
,
.
.
,
y
i
−
1
)
∈
{
0
,
1
}
ℓ
x
i
←
H
k
(
w
i
)
∈
{
0
,
1
}
ℓ
1
y
i
←
O
(
x
i
)
∈
{
0
,
1
}
ℓ
2
b
←
A
(
r
,
y
1
,
.
.
.
,
y
q
)
∈
{
0
,
1
}
o
u
t
p
u
t
b
\mathrm{Oracle\; machine}\; D^\mathcal{O}\\ k\leftarrow K,r\leftarrow R\\ \mathrm{for}\; i\leftarrow 1,...,q \;\mathrm{do}\\ w_i\leftarrow A(r,y_1,..,y_{i-1})\in \{0,1\}^{\ell}\\ x_i\leftarrow H_k(w_i)\in \{0,1\}^{\ell_1}\\ y_i\leftarrow \mathcal{O}(x_i)\in \{0,1\}^{\ell_2}\\ b\leftarrow A(r,y_1,...,y_q)\in \{0,1\}\\ \mathrm{output}\; b
OraclemachineDOk←K,r←Rfori←1,...,qdowi←A(r,y1,..,yi−1)∈{0,1}ℓxi←Hk(wi)∈{0,1}ℓ1yi←O(xi)∈{0,1}ℓ2b←A(r,y1,...,yq)∈{0,1}outputb
Game 2.该过渡基于桥接步骤。现在我们要在Game 1中做一个纯粹概念上的改变。直观上,我们可以将包含随机函数f的黑盒想象成里面有一个小侏儒的盒子:这个侏儒保留了一个以前的输入/输出对的表,如果查询与以前的一个输入匹配,则返回相应的输出,否则,将随机选择一个输出值,并将新的输入/输出对添加到表中。基于此,我们得到Game 1的流程:
k
←
K
,
Y
1
,
.
.
.
,
Y
q
←
{
0
,
1
}
ℓ
2
r
←
R
f
o
r
i
←
1
,
.
.
.
,
q
d
o
w
i
←
A
(
r
,
y
1
,
.
.
,
y
i
−
1
)
∈
{
0
,
1
}
ℓ
x
i
←
H
k
(
w
i
)
∈
{
0
,
1
}
ℓ
1
i
f
x
i
=
x
j
f
o
r
s
o
m
e
j
≤
i
t
h
e
n
y
i
←
y
j
e
l
s
e
y
i
←
Y
i
b
←
A
(
r
,
y
1
,
.
.
.
,
y
q
)
∈
{
0
,
1
}
o
u
t
p
u
t
b
k\leftarrow K,Y_1,...,Y_q\leftarrow \{0,1\}^{\ell_2}\\ r\leftarrow R\\ \mathrm{for}\; i\leftarrow 1,...,q \;\mathrm{do}\\ w_i\leftarrow A(r,y_1,..,y_{i-1})\in \{0,1\}^{\ell}\\ x_i\leftarrow H_k(w_i)\in \{0,1\}^{\ell_1}\\ if x_i=x_j\; \mathrm{for\; some}\; j\le i\; \mathrm{then}\; y_i\leftarrow y_j\;\mathrm{else}\;y_i\leftarrow Y_i\\ b\leftarrow A(r,y_1,...,y_q)\in \{0,1\}\\ \mathrm{output}\; b
k←K,Y1,...,Yq←{0,1}ℓ2r←Rfori←1,...,qdowi←A(r,y1,..,yi−1)∈{0,1}ℓxi←Hk(wi)∈{0,1}ℓ1ifxi=xjforsomej≤ithenyi←yjelseyi←Yib←A(r,y1,...,yq)∈{0,1}outputb
令
S
2
S_2
S2是Game 2中
b
=
1
b=1
b=1的事件。因为从Game 1到Game 2这样的变化纯粹是概念性的,我们显然做到了:
P
r
[
S
2
]
=
P
r
[
S
1
]
.
Pr[S_2]=Pr[S_1].
Pr[S2]=Pr[S1].
Game 3. 该过渡是基于失败事件的过渡。现在我们修改Game 2使得我们的侏儒变得非常健忘,并且在计算y_i值的时候不做任何一致性检查。
k
←
K
,
Y
1
,
.
.
.
,
Y
q
←
{
0
,
1
}
ℓ
2
r
←
R
f
o
r
i
←
1
,
.
.
.
,
q
d
o
w
i
←
A
(
r
,
y
1
,
.
.
,
y
i
−
1
)
∈
{
0
,
1
}
ℓ
x
i
←
H
k
(
w
i
)
∈
{
0
,
1
}
ℓ
1
y
i
←
Y
i
b
←
A
(
r
,
y
1
,
.
.
.
,
y
q
)
∈
{
0
,
1
}
o
u
t
p
u
t
b
k\leftarrow K,Y_1,...,Y_q\leftarrow \{0,1\}^{\ell_2}\\ r\leftarrow R\\ \mathrm{for}\; i\leftarrow 1,...,q \;\mathrm{do}\\ w_i\leftarrow A(r,y_1,..,y_{i-1})\in \{0,1\}^{\ell}\\ x_i\leftarrow H_k(w_i)\in \{0,1\}^{\ell_1}\\ y_i\leftarrow Y_i\\ b\leftarrow A(r,y_1,...,y_q)\in \{0,1\}\\ \mathrm{output}\; b
k←K,Y1,...,Yq←{0,1}ℓ2r←Rfori←1,...,qdowi←A(r,y1,..,yi−1)∈{0,1}ℓxi←Hk(wi)∈{0,1}ℓ1yi←Yib←A(r,y1,...,yq)∈{0,1}outputb
定义 S 3 S_3 S3是Game 3中 b = 1 b=1 b=1的事件。定义事件 F F F为在Game 3中 x i = x j x_i=x_j xi=xj,且 i ≠ j i\ne j i=j的情况。
观察 k k k和 x 1 , . . . , x q x_1,...,x_q x1,...,xq在Game 3中除了定义事件 F F F外,没有发挥任何作用。实际上,随机变量 k , r , y 1 , . . . , y q k,r,y_1,...,y_q k,r,y1,...,yq是相互独立的。我们将Game 2和Game 3视为在相同的概率空间上操作,因此 k , r , Y 1 , . . . , Y q k,r,Y_1,...,Y_q k,r,Y1,...,Yq在两个游戏中是相同的。不难看出,Game 2和Game 3是相同的,除非事件 F F F发生。特别是,如果 F F F没有发生,那么两个游戏的输出是相同的。这是相当明显的,但由于这是我们使用该技术的第一个示例,因此我们将进行更正式地证明。选择任意固定值 k , r , Y 1 , . . , Y q k,r,Y_1,..,Y_q k,r,Y1,..,Yq使得 F F F不发生。我们通过对 i = 0 , . . . , q i=0,...,q i=0,...,q的归纳法证明,在两个游戏中 w 1 , x 1 , y 1 , . . . , w i , x i , y i w_1,x_1,y_1,...,w_i,x_i,y_i w1,x1,y1,...,wi,xi,yi是相同的。 i = 0 i=0 i=0时,是非常正确的。那么我们令 i > 0 i>0 i>0,假设 i − 1 i-1 i−1成立,并证明 i i i成立。正如在 i − 1 i-1 i−1上成立一样,值 w i w_i wi的计算方法与 A ( r , y 1 , . . . , y i − 1 ) A(r,y_1,...,y_{i-1}) A(r,y1,...,yi−1)在两个游戏中相同,因此 x i x_i xi的计算方法与 H k ( w i ) H_k(w_i) Hk(wi)在两个游戏中相同。当计算 y i y_i yi时,我们看到由于 F F F不成立,值 x 1 , . . . , x i x_1,...,x_i x1,...,xi是不相同的(并且在两个游戏中以相同的方式计算)。因此,在这两个游戏中 y i y_i yi都被赋值为 Y i Y_i Yi。归纳证明就完成了。由此可见,当 F F F没有发生,两个游戏都以同样的方式计算 y 1 , . . . , y q y_1,...,y_q y1,...,yq,因此都以同样的方式计算 b = A ( r , y 1 , . . . , y q ) b=A(r,y_1,...,y_q) b=A(r,y1,...,yq)。
在前一段中,我们认为如果
F
F
F不发生,那么两个游戏输出相同的值。等价的说法是
S
2
∧
¬
F
⇔
S
3
∧
¬
F
S_2\wedge \neg F\Leftrightarrow S_3\wedge \neg F
S2∧¬F⇔S3∧¬F。因此,通过Difference Lemma,我们有:
∣
P
r
[
S
2
]
−
P
r
[
S
3
]
∣
≤
P
r
[
F
]
.
|Pr[S_2]-Pr[S_3]|\le Pr[F].
∣Pr[S2]−Pr[S3]∣≤Pr[F].
那么我们有:
P
r
[
F
]
≤
ϵ
u
h
⋅
q
2
2
.
Pr[F]\le \epsilon_{uh}\cdot \frac{q^2}{2}.
Pr[F]≤ϵuh⋅2q2.
分析都是关于Game 3。为了证明该等式,只要证明它以固定值
r
,
y
1
,
.
.
.
,
y
q
r,y_1,...,y_q
r,y1,...,yq为条件就足够了。在这个条件概率分布中,值
w
1
,
.
.
.
,
w
q
w_1,...,w_q
w1,...,wq是固定的(因为他们由
r
,
y
1
,
.
.
.
,
y
q
r,y_1,...,y_q
r,y1,...,yq决定),其中
k
k
k是均匀分布在
K
K
K上(通过独立性)。通过任意固定的索引对
i
,
j
i,j
i,j,且
i
≠
j
i\ne j
i=j,根据
H
H
H的通用hash属性,以及我们假设敌手从不重复任何查询,我们有
w
i
≠
w
j
w_i\ne w_j
wi=wj,因此:
P
r
[
H
k
(
w
i
)
=
H
k
(
w
j
)
]
≤
ϵ
u
h
.
Pr[H_k(w_i)=H_k(w_j)]\le \epsilon_{uh}.
Pr[Hk(wi)=Hk(wj)]≤ϵuh.