三个问题
原像
给定一个消息摘要
y
y
y,是否可以找到
x
x
x使得
h
(
x
)
=
y
h(x)=y
h(x)=y。
若原像问题可解,则称
(
x
,
y
)
(x,y)
(x,y)为有效对;若不能解则称原像稳固。
第二原像
给定一个消息
x
x
x,其对应Hash值为
y
=
h
(
x
)
y=h(x)
y=h(x),是否可以找到
x
′
≠
x
x'\not=x
x′=x使得
h
(
x
′
)
=
y
h(x')=y
h(x′)=y。
若第二原像可解,则称
(
x
′
,
h
(
x
)
)
(x',h(x))
(x′,h(x))为有效对;若不可解则称第二原像稳固。
碰撞
不给定,问是否可以找到
x
′
≠
x
x'\not=x
x′=x使得
h
(
x
′
)
=
h
(
x
)
h(x')=h(x)
h(x′)=h(x)。
若碰撞问题可解,则可产生两个有效对
(
x
,
y
)
(x,y)
(x,y)和
(
x
′
=
y
)
(x'=y)
(x′=y),其中
y
=
h
(
x
′
)
=
h
(
x
)
y=h(x')=h(x)
y=h(x′)=h(x);若不能有效解决则称碰撞稳固。
随机预言机
对任何输入都回传一个真正均匀随机的输出,不过对相同的输入,该预言机每次都会用同一方法输出。换句话说,随机预言机是一个将所有可能输入与输出作随机映射的函数。
令
F
X
,
Y
F^{X,Y}
FX,Y是为所有从
X
→
Y
X→Y
X→Y的函数集合,假定
∣
X
∣
=
N
|X|=N
∣X∣=N,
∣
Y
∣
=
M
|Y|=M
∣Y∣=M,随机从
F
X
,
Y
F^{X,Y}
FX,Y中选出一个Hash函数
h
:
X
→
Y
h: X→Y
h:X→Y ,对于任意的输入
x
x
x,其输出值是均匀的,计算
h
(
x
)
h(x)
h(x)的唯一方法是询问随机预言机。
生日攻击
对于一个概率界限
ε
(
0
<
ε
<
1
)
\varepsilon(0<\varepsilon<1)
ε(0<ε<1),找一个整数
k
k
k,使得对于
k
k
k个两两互异的值
x
1
,
x
2
,
…
,
x
k
∈
X
x_1,x_2,\dots,x_k\in X
x1,x2,…,xk∈X,
k
k
k个函数值
f
(
x
1
)
,
f
(
x
2
)
,
…
,
f
(
x
k
)
f(x_1),f(x_2),\dots,f(x_k)
f(x1),f(x2),…,f(xk)对某些
i
≠
j
i\not=j
i=j,有
P
r
[
f
(
x
i
)
=
f
(
x
j
)
]
≥
ε
Pr[f(x_i)=f(x_j)]\geq\varepsilon
Pr[f(xi)=f(xj)]≥ε,即在
k
k
k个函数值中,以不小于
ε
\varepsilon
ε的概率发生碰撞。产生碰撞是一个
(
ε
,
O
(
(
M
)
)
)
(\varepsilon,O(\sqrt(M)))
(ε,O((M)))的算法。
对一个输出空间大小为
M
M
M的随机函数,只需计算大概
M
\sqrt M
M个函数值,就能以一个不可忽略的概率发现一个碰撞。
Hash函数的输出空间大小必须有一个下界,长度为
∣
h
∣
|h|
∣h∣的Hash函数,只需要
2
∣
h
∣
2
2^{\frac{|h|}{2}}
22∣h∣个随机哈希值就可以以一个不可忽略的概率产生一个碰撞。目前至少为160比特,抗生日攻击的强度至少为
2
80
2^{80}
280。