消息认证实验
M
a
c
f
o
r
g
e
A
,
Π
(
n
)
\mathsf{Macforge}_{\mathcal{A},\Pi }(n)
MacforgeA,Π?(n) 在挑战者和敌手之间:
挑战者生成密钥
k
←
G
e
n
(
1
n
)
k \gets \mathsf{Gen}(1^n)
k←Gen(1n).
敌手
A
\mathcal{A}
A 具有访问标签生成算法
M
a
c
k
(
?
)
\mathsf{Mac}_k(\cdot)
Mack?(?)的预言机的能力,并输出
(
m
,
t
)
(m,t)
(m,t). 对预言机查询的消息集合为
Q
\mathcal{Q}
Q 。
M
a
c
f
o
r
g
e
A
,
Π
(
n
)
=
1
??
?
??
\mathsf{Macforge}_{\mathcal{A},\Pi }(n)=1 \iff
MacforgeA,Π?(n)=1?
V
r
f
y
k
(
m
,
t
)
=
1
\mathsf{Vrfy}_k(m,t)=1
Vrfyk?(m,t)=1
∧
\land
∧
m
?
Q
m \notin \mathcal{Q}
m∈/?Q. 敌手成功,如果输出的消息和标签通过了验证,并且输出的消息是从未向预言机查询过的新消息。
定义:一个 MAC
Π
\Pi
Π 是在适应性CMA下的存在性不可伪造 (existentially unforgeable under an adaptive CMA),如果
?
\forall
? PPT
A
\mathcal{A}
A,
?
\exists
?
n
e
g
l
\mathsf{negl}
negl 使得:
Pr
?
[
M
a
c
f
o
r
g
e
A
,
Π
(
n
)
=
1
]
≤
n
e
g
l
(
n
)
.
\Pr [\mathsf{Macforge}_{\mathcal{A},\Pi }(n)=1] \le \mathsf{negl}(n).
Pr[MacforgeA,Π?(n)=1]≤negl(n). 如果对名称不熟悉,可以参考下方的概念回顾。
n
e
g
l
(
n
)
\mathsf{negl}(n)
negl(n):这是一个表示概率的术语,指的是某个函数随着输入大小的增长而增长得极其缓慢,以至于在实际中可以忽略不计。
应用:在这个定义中,如果对于所有的PPT攻击者
A
\mathcal{A}
A,伪造MAC的概率
Pr
?
[
M
a
c
f
o
r
g
e
A
,
Π
(
n
)
=
1
]
\Pr [\mathsf{Macforge}_{\mathcal{A},\Pi }(n)=1]
Pr[MacforgeA,Π?(n)=1] 是可忽略的,那么就可以说这个MAC系统在适应性CMA下是存在性不可伪造的。
一是存在不同消息的CRC32可能是一样的情况,而且这种情况很容易给出。那么,敌手可以查询一个消息
m
m
m并得到对应的标签
t
t
t;然后,输出另一个与所查询消息
m
m
m具有相同CRC32值的新消息
m
′
m'
m′,以及查到的标签
t
t
t。
二是敌手可以查询一个消息
m
′
m'
m′并获得标签
(
r
,
t
′
)
(r, t')
(r,t′),由此计算得到
F
(
k
,
r
)
=
t
′
⊕
C
R
C
32
(
m
′
)
F(k,r) = t'\oplus \mathsf{CRC32}(m')
F(k,r)=t′⊕CRC32(m′);输出一个新消息
m
m
m以及标签
t
=
(
r
,
F
(
k
,
r
)
⊕
C
R
C
32
(
m
)
)
t = (r, F(k,r)\oplus\mathsf{CRC32}(m))
t=(r,F(k,r)⊕CRC32(m))。
证明思路是从PRF的区分器算法
D
D
D规约到伪造标签的敌手算法
A
\mathcal{A}
A。
D
D
D作为
A
\mathcal{A}
A的挑战者,用
D
D
D要区分的预言机作为
A
\mathcal{A}
A的标签生成预言机;当
A
\mathcal{A}
A伪造标签成功时,
D
D
D输出1。
证明基于PRF的安全MAC(续)
如果是真随机
f
f
f 被使用
t
=
f
(
m
)
t=f(m)
t=f(m) 是均匀随机的.
Pr
?
[
D
f
(
?
)
(
1
n
)
=
1
]
=
Pr
?
[
M
a
c
f
o
r
g
e
A
,
Π
~
(
n
)
=
1
]
≤
2
?
n
.
\Pr[D^{f(\cdot)}(1^n)=1] = \Pr[\mathsf{Macforge}_{\mathcal{A},\tilde{\Pi}}(n) = 1] \le 2^{-n}.
Pr[Df(?)(1n)=1]=Pr[MacforgeA,Π~?(n)=1]≤2?n.
如果
F
k
F_k
Fk? 被使用,那么就是在执行实验
M
a
c
f
o
r
g
e
A
,
Π
(
n
)
\mathsf{Macforge}_{\mathcal{A},\Pi}(n)
MacforgeA,Π?(n).
Pr
?
[
D
F
k
(
?
)
(
1
n
)
=
1
]
=
Pr
?
[
M
a
c
f
o
r
g
e
A
,
Π
(
n
)
=
1
]
=
ε
(
n
)
.
\Pr[D^{F_k(\cdot)}(1^n)=1] = \Pr[\mathsf{Macforge}_{\mathcal{A},\Pi}(n) = 1] = \varepsilon(n).
Pr[DFk?(?)(1n)=1]=Pr[MacforgeA,Π?(n)=1]=ε(n).
根据PRF的定义有,
∣
Pr
?
[
D
F
k
(
?
)
(
1
n
)
=
1
]
?
Pr
?
[
D
f
(
?
)
(
1
n
)
=
1
]
∣
≥
ε
(
n
)
?
2
?
n
.
\left| \Pr[D^{F_k(\cdot)}(1^n)=1] - \Pr[D^{f(\cdot)}(1^n)=1] \right| \ge \varepsilon(n) - 2^{-n}.
∣∣?Pr[DFk?(?)(1n)=1]?Pr[Df(?)(1n)=1]∣∣?≥ε(n)?2?n.
扩展到变长消息
对于变长消息,下面的建议是安全的吗?
建议1:将所有块异或后,对结果进行认证:
t
:
=
M
a
c
k
′
(
⊕
i
m
i
)
t := \mathsf{Mac}_k'(\oplus_i m_i)
t:=Mack′?(⊕i?mi?);
建议2:对每个块分别认证,
t
i
:
=
M
a
c
k
′
(
m
i
)
t_i := \mathsf{Mac}_k'(m_i)
ti?:=Mack′?(mi?);
建议3:对每个块连带一个序列号一起认证,
t
i
:
=
M
a
c
k
′
(
i
∥
m
i
)
t_i := \mathsf{Mac}_k'(i\| m_i)
ti?:=Mack′?(i∥mi?).
改动1:将初始向量IV改为0;如果不这样改动,则敌手查询
m
1
m_1
m1? 并获得
(
I
V
,
t
1
)
(IV, t_1)
(IV,t1?);然后,输出
m
1
′
=
I
V
′
⊕
I
V
⊕
m
1
m_1' = IV' \oplus IV \oplus m_{1}
m1′?=IV′⊕IV⊕m1? 并且
t
′
=
(
I
V
′
,
t
1
)
t' = (IV',t_1)
t′=(IV′,t1?),一个有效的标签。
改动2:标签只包括最后一个块的输出;如果不这样改动,则敌手查询
m
i
m_i
mi? 并得到
t
i
t_i
ti?;然后,输出
m
i
′
=
t
i
?
1
′
⊕
t
i
?
1
⊕
m
i
m_i' = t_{i-1}' \oplus t_{i-1} \oplus m_{i}
mi′?=ti?1′?⊕ti?1?⊕mi? 以及
t
i
′
=
t
i
t_{i}' = t_i
ti′?=ti?,一个有效的标签。
构造固定长度的CBC-MAC(续)
定理:如果
F
F
F是一个PRF,那么上面的构造就是一个安全的固定长度MAC。
这个构造不能用于变长消息,因为对于一个块的消息
m
m
m和标签
t
t
t,敌手可以在其后添加一个块
m
⊕
t
m\oplus t
m⊕t并且输出标签
t
t
t。
安全变长MAC
有三种方法可以将CBC-MAC改造为用于变长消息的MAC,都可以防御上面在结尾添加新块的攻击。
输入长度密钥分离:
k
?
:
=
F
k
(
?
)
k_{\ell} := F_k(\ell)
k??:=Fk?(?), 用
k
?
k_{\ell}
k?? 作为 CBC-MAC 的密钥。不同长度下采用不同密钥,追加新块后长度变化,之前的标签无法利用。
在开头添加长度:在CBC-MAC的明文
m
m
m前添加一个长度块
∣
m
∣
|m|
∣m∣。不同长度下消息有不同的初始块,追加新块后长度变化,之前的标签无法利用。
加密末块输出(ECBC-MAC):采用两个密钥
k
1
,
k
2
k_1, k_2
k1?,k2?。用
k
1
k_1
k1?和CBC-MAC计算出
t
t
t,然后输出
t
^
:
=
F
k
2
(
t
)
\hat{t} := F_{k_2}(t)
t^:=Fk2??(t)。输出结果被加密,之前的标签无法利用。
m
0
≠
m
1
?
p
a
d
(
m
0
)
≠
p
a
d
(
m
1
)
.
m_0\neq m_1 \Rightarrow \mathsf{pad}(m_0) \neq \mathsf{pad}(m_1).
m0??=m1??pad(m0?)?=pad(m1?).
ISO的填充标准:用“100…00”填充,并按需填充哑块。
如果不填充哑块,则会导致什么?
CMAC(Cipher-based MAC):不填充哑块,不加密最后一块的输出,密钥包括三个
k
,
k
1
,
k
2
k, k_1, k_2
k,k1?,k2?
k
k
k用于CBC-MAC;
k
1
k_1
k1? 和
k
2
k_2
k2? 与最后一块消息异或来阻止利用最后一块输出;
用
k
1
k_1
k1? 和
k
2
k_2
k2? 来区分是否添加了哑块。
CRHF:哈希函数Hash Function、 定义抗碰撞Collision Resistance
定义哈希函数(Hash Function)
一个哈希函数 (压缩函数) 是一对PPT算法
(
G
e
n
,
H
)
(\mathsf{Gen}, H)
(Gen,H) 满足以下条件:
一个密钥
s
←
G
e
n
(
1
n
)
s \gets \mathsf{Gen}(1^n)
s←Gen(1n),
s
s
s 不保密.
H
s
(
x
)
∈
{
0
,
1
}
?
(
n
)
H^s(x) \in \{0,1\}^{\ell(n)}
Hs(x)∈{0,1}?(n), 其中
x
∈
{
0
,
1
}
?
x \in \{0,1\}^*
x∈{0,1}? 且
?
\ell
? 为多项式。
若
H
s
H^s
Hs 只在
x
∈
{
0
,
1
}
?
′
(
n
)
x \in \{0,1\}^{\ell'(n)}
x∈{0,1}?′(n) 上定义并且
?
′
(
n
)
>
?
(
n
)
\ell'(n) > \ell(n)
?′(n)>?(n),那么
(
G
e
n
,
H
)
(\mathsf{Gen}, H)
(Gen,H) 是固定长度的哈希函数。
上面的定义说明,哈希函数将长消息转变为短消息。
定义抗碰撞(Collision Resistance)
碰撞(Collision):
x
≠
x
′
x \neq x'
x?=x′ 并且
H
(
x
)
=
H
(
x
′
)
H(x) = H(x')
H(x)=H(x′)。
抗碰撞(Collision Resistance):对于任意PPT算法,找到碰撞是不可能的。
碰撞发现实验
H
a
s
h
c
o
l
l
A
,
Π
(
n
)
\mathsf{Hashcoll}_{\mathcal{A},\Pi}(n)
HashcollA,Π?(n):
s
←
G
e
n
(
1
n
)
s \gets \mathsf{Gen}(1^n)
s←Gen(1n).
敌手
A
\mathcal{A}
A 输入
s
s
s ,输出
x
,
x
′
x, x'
x,x′. 注:敌手有
s
s
s,意味着可以访问哈希函数
H
a
s
h
c
o
l
l
A
,
Π
(
n
)
=
1
??
?
??
x
≠
x
′
∧
H
s
(
x
)
=
H
s
(
x
′
)
\mathsf{Hashcoll}_{\mathcal{A},\Pi}(n) =1 \iff x\ne x' \land H^s(x) = H^s(x')
HashcollA,Π?(n)=1?x?=x′∧Hs(x)=Hs(x′).
哈希函数
Π
\Pi
Π (
G
e
n
\mathsf{Gen}
Gen,
H
s
H^s
Hs) 是抗碰撞的,如果
?
\forall
? ppt
A
\mathcal{A}
A,
?
??
n
e
g
l
\exists\;\mathsf{negl}
?negl 使得
Pr
?
[
H
a
s
h
c
o
l
l
A
,
Π
(
n
)
=
1
]
≤
n
e
g
l
(
n
)
.
\Pr[\mathsf{Hashcoll}_{\mathcal{A},\Pi}(n)=1] \le \mathsf{negl}(n).
Pr[HashcollA,Π?(n)=1]≤negl(n).
哈希函数安全的更弱的概念
抗碰撞(Collision resistance): 难以找到
(
x
,
x
′
)
,
x
′
≠
x
(x, x'), x' \ne x
(x,x′),x′?=x 使得
H
(
x
)
=
H
(
x
′
)
H(x) = H(x')
H(x)=H(x′).
抗二次原像 (Second pre-image resistance): 给定
s
s
s 和
x
x
x, 难以发现
x
′
≠
x
x' \ne x
x′?=x 使得
H
s
(
x
′
)
=
H
s
(
x
)
H^s(x') = H^s(x)
Hs(x′)=Hs(x).
抗原像 (Pre-image resistance): 给定
s
s
s 和
y
=
H
s
(
x
)
y = H^s(x)
y=Hs(x), 难以发现
x
′
x'
x′ 使得
H
s
(
x
′
)
=
y
H^s(x')=y
Hs(x′)=y.
从定长哈希函数
(
G
e
n
,
h
)
(\mathsf{Gen}, h)
(Gen,h) (
2
?
2\ell
2? bits
→
?
\to \ell
→? bits,
?
=
?
(
n
)
\ell = \ell(n)
?=?(n))构造变长哈希函数 CRHF
(
G
e
n
,
H
)
(\mathsf{Gen}, H)
(Gen,H) :
G
e
n
\mathsf{Gen}
Gen: 不变
H
H
H: 密钥
s
s
s 与串
x
∈
{
0
,
1
}
?
x \in \{0,1\}^*
x∈{0,1}?,
L
=
∣
x
∣
<
2
?
L=|x|< 2^{\ell}
L=∣x∣<2?:
B
:
=
?
L
?
?
B := \lceil \frac{L}{\ell} \rceil
B:=??L?? (块数)。 用0填充。
?
\ell
?-位的块
x
1
,
…
,
x
B
x_1,\dotsc,x_B
x1?,…,xB?。最后一块是长度
x
B
+
1
:
=
L
x_{B+1} := L
xB+1?:=L,
L
L
L 以
?
\ell
? 位编码,这是必要的,因为只用0填充会导致不同消息的输入是一样的。
z
0
:
=
I
V
=
0
?
z_0 := IV = 0^\ell
z0?:=IV=0?。 对于
i
=
1
,
…
,
B
+
1
i=1,\dotsc,B+1
i=1,…,B+1, 计算
z
i
:
=
h
s
(
z
i
?
1
∥
x
i
)
z_i := h^s(z_{i-1}\| x_i)
zi?:=hs(zi?1?∥xi?)。
MD变换的安全性
定理:如果
h
h
h是定长CRHF,那么
H
H
H也是CRHF。
证明:思路是
H
H
H上的碰撞意味着
h
h
h上的碰撞,而
h
h
h是不会被找到碰撞的。两个消息
x
≠
x
′
x \ne x'
x?=x′ ,长度分别为
L
L
L 和
L
′
L'
L′ ,块数分别为
B
B
B 和
B
′
B'
B′,使得
H
s
(
x
)
=
H
s
(
x
′
)
H^s(x) = H^s(x')
Hs(x)=Hs(x′)。 有两种情况:
L
≠
L
′
L \ne L'
L?=L′:
z
B
∥
L
≠
z
B
′
∥
L
′
z_B\| L \ne z_{B'}\| L'
zB?∥L?=zB′?∥L′;长度不同,意味着最后一个哈希函数
h
h
h的输入不同,但输出相同,发现碰撞。
L
=
L
′
L = L'
L=L′:
z
i
?
?
1
∥
x
i
?
≠
z
i
?
?
1
′
∥
x
i
?
′
z_{i^*-1}\| x_{i^*} \ne z_{i^*-1}'\| x_{i^*}'
zi??1?∥xi???=zi??1′?∥xi?′?;长度相同,意味着中间某一块的输入不同,但输出相同,发现碰撞。
因此,必定有
x
≠
x
′
x \neq x'
x?=x′ 使得
h
s
(
x
)
=
h
s
(
x
′
)
h^s(x) = h^s(x')
hs(x)=hs(x′)。
作业中有关于MD变换的变体的安全性分析问题。
从分组密码构造CRHF
可以从块密码来构造CRHF,例如Davies-Meyer方法 (SHA-1/2, MD5)
h
i
=
F
m
i
(
h
i
?
1
)
⊕
h
i
?
1
h_{i} = F_{m_{i}}(h_{i-1}) \oplus h_{i-1}
hi?=Fmi??(hi?1?)⊕hi?1?,或者 Miyaguchi-Preneel 方法 (Whirlpool)
h
i
=
F
h
i
?
1
(
m
i
)
⊕
h
i
?
1
⊕
m
h_{i} = F_{h_{i-1}}(m_{i}) \oplus h_{i-1} \oplus m
hi?=Fhi?1??(mi?)⊕hi?1?⊕m。
定理:如果
F
F
F是一个理想的加密方案,那么Davies-Meyer构造得到一个CRHF。注:理想的加密方案参考后面要学习的随机预言机模型。目前,没有找到
F
F
F是强伪随机排列下该方法是CRHF的证明。
对于这个定理不做严格证明,而是回答两个问题:
如果
h
i
=
F
m
i
(
h
i
?
1
)
h_{i} = F_{m_{i}}(h_{i-1})
hi?=Fmi??(hi?1?) ,不与
h
i
?
1
h_{i-1}
hi?1? 异或,会如何?敌手尝试以相同的
h
i
h_i
hi?和不同的
m
i
m_i
mi?对
F
F
F求逆。
如果
F
F
F 不是理想的,而是
?
x
,
F
k
(
x
)
=
x
\exists x, F_k(x)=x
?x,Fk?(x)=x,会如何?敌手输入不同
m
i
m_i
mi?,但都得到0;
G
e
n
(
1
n
)
\mathsf{Gen}(1^n)
Gen(1n): 输出
(
s
,
k
)
(s, k)
(s,k).
s
←
G
e
n
~
,
k
←
{
0
,
1
}
n
s \gets \widetilde{\mathsf{Gen}}, k \gets \{0,1\}^n
s←Gen,k←{0,1}n u.a.r;
M
a
c
s
,
k
(
m
)
\mathsf{Mac}_{s,k}(m)
Macs,k?(m):
t
:
=
H
I
V
s
(
(
k
⊕
o
p
a
d
)
∥
H
I
V
s
(
(
k
⊕
i
p
a
d
)
∥
m
)
)
t := H_{IV}^s\Big((k \oplus \mathsf{opad}) \| H_{IV}^s\big((k \oplus \mathsf{ipad}) \| m\big)\Big)
t:=HIVs?((k⊕opad)∥HIVs?((k⊕ipad)∥m))
V
r
f
y
s
,
k
(
m
,
t
)
\mathsf{Vrfy}_{s,k}(m,t)
Vrfys,k?(m,t):
1
??
?
??
t
=
?
M
a
c
s
,
k
(
m
)
1 \iff t \overset{?}{=} \mathsf{Mac}_{s,k}(m)
1?t=?Macs,k?(m)
HMAC安全性
定理:
G
(
k
)
=
def
h
s
(
I
V
∥
(
k
⊕
o
p
a
d
)
)
∥
h
s
(
I
V
∥
(
k
⊕
i
p
a
d
)
)
=
k
1
∥
k
2
G(k) \overset{\text{def}}{=} h^s(IV\| (k\oplus \mathsf{opad})) \| h^s(IV\| (k\oplus \mathsf{ipad})) = k_1\| k_2
G(k)=defhs(IV∥(k⊕opad))∥hs(IV∥(k⊕ipad))=k1?∥k2? 。其中,
h
h
h是CRHF。如果
G
G
G是PRG,那么HMAC是安全的。
在HMAC之前,其他不安全的方案包括:
H
s
(
k
∥
x
)
H^s(k\| x)
Hs(k∥x) 存在长度扩展攻击弱点。 在获得
H
s
(
k
∥
x
)
H^s(k\| x)
Hs(k∥x)和消息长度后,敌手能够获得新消息
x
∥
x
′
x \| x'
x∥x′ 的有效标签
H
s
(
k
∥
x
∥
x
′
)
H^s(k\| x \| x')
Hs(k∥x∥x′) 。因为
H
s
(
k
∥
x
)
H^s(k\| x)
Hs(k∥x)的输出标签
t
t
t和
x
′
x'
x′作为哈希函数的输入直接得到输出。
H
s
(
x
∥
k
)
H^s(x\| k)
Hs(x∥k): 在一个弱哈希函数上的碰撞会导致MAC上碰撞。回顾NMAC中需要开头的密钥来支持弱抗碰撞的情况。
H
s
(
k
∥
x
∥
k
)
H^s(k\| x\| k)
Hs(k∥x∥k): 也存在一些已知的弱点,即使使用两个不同的密钥。
H
s
(
k
∥
H
s
(
k
∥
x
)
)
H^s(k \| H^s(k \| x))
Hs(k∥Hs(k∥x)):这是NMAC和HMAC的情况
不可能达到“完美的、不可伪造的”MAC,因为算力无限制的敌手可以至少以
1
/
2
∣
t
∣
1/2^{|t|}
1/2∣t∣ 的概率输出一个有效的标签。为此,对敌手查询MAC预言机的次数需要加以限制,下面分析只允许敌手查询一次MAC预言机的情况。
一次消息认证实验
M
a
c
f
o
r
g
e
A
,
Π
1
?
t
i
m
e
\mathsf{Macforge}^{\mathsf{1-time}}_{\mathcal{A},\Pi }
MacforgeA,Π1?time?: 敌手查询一次MAC预言机后输出消息和标签,
k
←
G
e
n
k \gets \mathsf{Gen}
k←Gen.
A
\mathcal{A}
A 输出一个消息
m
′
m'
m′并且获得一个标签
t
′
←
M
a
c
k
(
m
′
)
t' \gets \mathsf{Mac}_k(m')
t′←Mack?(m′), 然后输出
(
m
,
t
)
(m,t)
(m,t).
M
a
c
f
o
r
g
e
A
,
Π
1
?
t
i
m
e
=
1
??
?
??
\mathsf{Macforge}^{\mathsf{1-time}}_{\mathcal{A},\Pi }=1 \iff
MacforgeA,Π1?time?=1?
V
r
f
y
k
(
m
,
t
)
=
1
\mathsf{Vrfy}_k(m,t)=1
Vrfyk?(m,t)=1
∧
\land
∧
m
≠
m
′
m \neq m'
m?=m′.
定义:一个MAC
Π
\Pi
Π 是一次
ε
\varepsilon
ε-安全的(one-time
ε
\varepsilon
ε-secure),如果
?
\forall
? ppt
A
\mathcal{A}
A:
Pr
?
[
M
a
c
f
o
r
g
e
A
,
Π
1
?
t
i
m
e
=
1
]
≤
ε
.
\Pr [\mathsf{Macforge}^{\mathsf{1-time}}_{\mathcal{A},\Pi}=1] \le \varepsilon.
Pr[MacforgeA,Π1?time?=1]≤ε.
这里
ε
\varepsilon
ε应该为
1
/
2
∣
t
∣
1/2^{|t|}
1/2∣t∣,才能达到之前的信息论安全。信息论安全的MAC在允许敌手查询MAC预言机若干次之后,成功伪造MAC的概率应该不大于
1
/
2
∣
t
∣
1/2^{|t|}
1/2∣t∣。
理解信息论MAC安全
假设敌手算法是确定性的,其最合理的步骤如下:
(1)选择的
m
′
m'
m′是固定的,查询得到
t
′
t'
t′;
(2)根据
m
′
m'
m′和
t
′
t'
t′确定
k
k
k的所有可能集合
K
(
t
′
)
\mathcal{K}(t')
K(t′),从中选择一个
k
?
k^*
k?;
(3)选择输出
m
m
m是固定的,根据
k
?
k^*
k?计算
t
t
t并输出。
问题:
K
(
t
′
)
\mathcal{K}(t')
K(t′)太大或太小会如何?
设想如果根据第一次消息和标签能够唯一确定密钥
k
k
k,那么敌手一定可以成功伪造;反之,如果不能唯一确定密钥,并且密钥可能的范围
K
(
t
′
)
\mathcal{K}(t')
K(t′)充分大,那么敌手就难以成功伪造。从另一个角度,需要第一次查询获得的一个对消息和标签与敌手伪造另一个新消息的标签这两个事件之间是充分独立的。密钥空间太大也不安全,因为令
(
m
,
t
)
(m, t)
(m,t)是有效标签密钥集合也更大,其概率也增大。
信息论上MAC的构造
一个函数
h
h
h:
K
×
M
→
T
\mathcal{K} \times \mathcal{M} \to \mathcal{T}
K×M→T 是一个强全域函数(Strongly Universal Function (SUF)),如果对于所有不同的
m
,
m
′
∈
M
m, m' \in \mathcal{M}
m,m′∈M 以及所有
t
,
t
′
∈
T
t, t' \in \mathcal{T}
t,t′∈T, 以下成立:
Pr
?
[
h
k
(
m
)
=
t
∧
h
k
(
m
′
)
=
t
′
]
=
1
/
∣
T
∣
2
\Pr [h_k(m) = t \land h_k(m') = t'] = 1 / |\mathcal{T}|^2
Pr[hk?(m)=t∧hk?(m′)=t′]=1/∣T∣2,其中概率来自均匀选择的
k
∈
K
k \in \mathcal{K}
k∈K.
令
h
h
h:
K
×
M
→
T
\mathcal{K} \times \mathcal{M} \to \mathcal{T}
K×M→T 为一个SUF.
G
e
n
\mathsf{Gen}
Gen:
k
←
{
0
,
1
}
n
k \gets \{0,1\}^n
k←{0,1}n u.a.r.
M
a
c
k
(
m
)
\mathsf{Mac}_k(m)
Mack?(m):
t
:
=
h
k
(
m
)
t := h_k(m)
t:=hk?(m).
V
r
f
y
k
(
m
,
t
)
\mathsf{Vrfy}_k(m,t)
Vrfyk?(m,t):
1
??
?
??
t
=
?
h
k
(
m
)
1 \iff t \overset{?}{=} h_k(m)
1?t=?hk?(m). (如果
m
?
M
m \notin \mathcal{M}
m∈/?M,那么输出 0.)
构造一个SUF
定理:对于任意质数
P
P
P,函数
h
h
h 是一个SUF:
h
a
,
b
(
m
)
=
d
e
f
[
a
?
m
+
b
m
o
d
??
p
]
h_{a,b}(m) \overset{\mathsf{def}}{=} [ a \cdot m + b \mod p]
ha,b?(m)=def[a?m+bmodp]
证明:
h
a
,
b
(
m
)
=
t
h_{a,b}(m) = t
ha,b?(m)=t 且
h
a
,
b
(
m
′
)
=
t
′
h_{a,b}(m') = t'
ha,b?(m′)=t′,只有当
a
?
m
+
b
=
t
m
o
d
??
p
a \cdot m + b = t \mod p
a?m+b=tmodp 且
a
?
m
′
+
b
=
t
′
m
o
d
??
p
a \cdot m' + b = t' \mod p
a?m′+b=t′modp. 我们有
a
=
[
(
t
?
t
′
)
?
(
m
?
m
′
)
?
1
m
o
d
??
p
]
a = [(t-t') \cdot (m - m')^{-1} \mod p]
a=[(t?t′)?(m?m′)?1modp] 且
b
=
[
t
?
a
?
m
m
o
d
??
p
]
b = [t - a \cdot m \mod p]
b=[t?a?mmodp],这意味着存在一个唯一的密钥
(
a
,
b
)
(a, b)
(a,b)。由于存在
∣
T
∣
2
|\mathcal{T}|^2
∣T∣2 个密钥,
Pr
?
[
h
k
(
m
)
=
t
∧
h
k
(
m
′
)
=
t
′
]
=
1
∣
T
∣
2
\Pr [h_k(m) = t \land h_k(m') = t'] = \frac{1}{|\mathcal{T}|^2}
Pr[hk?(m)=t∧hk?(m′)=t′]=∣T∣21?。
来自SUF的MAC的安全性
定理:如果
h
h
h 是一个 SUF,构造是一个
1
/
∣
T
∣
?
1/|\mathcal{T}|-
1/∣T∣?安全MAC.
证明:假设敌手算法是确定性的,不失一般性可以固定
m
′
m'
m′并遍历所有可能的
t
′
t'
t′,敌手以
(
m
′
,
t
′
)
(m', t')
(m′,t′)作为输入并输出
(
m
,
t
)
(m, t)
(m,t)。根据SUF的定义,可以得到敌手成功的概率为
1
/
∣
T
∣
1/|\mathcal{T}|
1/∣T∣。
信息论MAC的局限性
任意
?
\ell
?次
2
?
n
2^{-n}
2?n-安全 MAC 需要密钥长度至少为
(
?
+
1
)
?
n
(\ell +1) \cdot n
(?+1)?n.
定理:令
Π
\Pi
Π 为一次
2
?
n
2^{-n}
2?n-安全 MAC,其中所有密钥长度相同。那么,密钥必须具有
2
n
2n
2n长度。
证明:直觉上,每对消息和标签成立需要
2
n
2^n
2n个密钥,才能保证
2
?
n
2^{-n}
2?n-安全。一共2对,需要
2
2
n
2^{2n}
22n。
令
K
(
t
′
)
=
d
e
f
{
k
∣
V
r
f
y
k
(
m
′
,
t
′
)
=
1
}
\mathcal{K}(t') \overset{\mathsf{def}}{=} \{ k | \mathsf{Vrfy}_k(m', t') = 1\}
K(t′)=def{k∣Vrfyk?(m′,t′)=1},即所有由所查询消息得到标签的密钥集合。对于任意
t
′
t'
t′,
∣
K
(
t
′
)
∣
≤
2
?
n
?
∣
K
∣
|\mathcal{K}(t')| \leq 2^{-n} \cdot |\mathcal{K}|
∣K(t′)∣≤2?n?∣K∣。 否则,敌手
A
\mathcal{A}
A从全体密钥集合中随机挑选一个密钥得到
(
m
,
t
)
(m, t)
(m,t) 是一个有效标签的概率至少为
∣
K
(
t
′
)
∣
/
∣
K
∣
>
2
?
n
|\mathcal{K}(t')|/|\mathcal{K}|> 2^{-n}
∣K(t′)∣/∣K∣>2?n,这与安全要求矛盾。
A
\mathcal{A}
A有无限算力可以根据从第一次查询中得到对应的密钥集合
K
(
t
′
)
\mathcal{K}(t')
K(t′),从中选择一个密钥
k
?
k^*
k?,并输出一个新消息
m
m
m的有效标签的概率是至少
1
∣
K
(
t
′
)
∣
\frac{1}{|\mathcal{K}(t')|}
∣K(t′)∣1?。固定
m
′
m'
m′遍历所有标签
t
′
t'
t′计算敌手成功概率为:
∑
t
′
Pr
?
[
M
a
c
k
(
m
′
)
=
t
′
]
?
1
∣
K
(
t
′
)
∣
≥
∑
t
′
Pr
?
[
M
a
c
k
(
m
′
)
=
t
′
]
?
2
n
∣
K
∣
=
2
n
∣
K
∣
\sum_{t'} \Pr [\mathsf{Mac}_k(m') = t'] \cdot \frac{1}{|\mathcal{K}(t')|} \geq \sum_{t'} \Pr [\mathsf{Mac}_k(m') = t'] \cdot \frac{2^n}{|\mathcal{K}|} = \frac{2^n}{|\mathcal{K}|}
∑t′?Pr[Mack?(m′)=t′]?∣K(t′)∣1?≥∑t′?Pr[Mack?(m′)=t′]?∣K∣2n?=∣K∣2n? 。由于概率至多
2
?
n
2^{-n}
2?n,
∣
K
∣
≥
2
2
n
|\mathcal{K}| \geq 2^{2n}
∣K∣≥22n。由于所有密钥具有相同长度,每个密钥的长度至少是
2
n
2n
2n。