PromleeBlog
网站地图
关于博客
菜单
loading..🐩🐩🐩🐩
学习
Security Theory
Hash Mac
MAC:消息认证码
MAC:消息认证码
📅
消息认证码:MAC(Message Authentication Code)
MAC的性质(Properties of MAC)
与数字签名比较(Comparison with Digital Signature)
MAC设计(Design of MAC)
基于哈希的MAC:HMAC(Hash-based MAC)
HMAC结构(Construction of HMAC)
HMAC安全性(Security of HMAC)
基于分组密码的MAC:CBC-MAC(Block Cipher-based MAC)
回顾CBC加密模式(Review: CBC Encryption Mode)
CBC-MAC说明(Description of CBC-MAC)
消息认证码:MAC(Message Authentication Code)
🔗
用于消息完整性与消息认证的代码。
Alice与Bob希望确保传输中的消息
x
x
x
未被篡改。
Bob根据消息
x
x
x
和共享秘密密钥
k
k
k
,计算MAC值y。
y
=
MAC
k
(
x
)
y = \text{MAC}_k(x)
y
=
MAC
k
(
x
)
向Alice发送
(
x
,
y
)
(x, y)
(
x
,
y
)
。
Alice使用共享密钥
k
k
k
与收到的消息
x
x
x
,验证
y
y
y
。
安全要求:没有秘密密钥
k
k
k
,就不能生成MAC。
MAC的性质(Properties of MAC)
🔗
密码学校验和。
MAC保证消息完整性。
对称技术。
输入长度任意,输出长度固定。
消息完整性。
消息认证。
不提供不可否认性。
与数字签名比较(Comparison with Digital Signature)
🔗
优点:比数字签名更快。
缺点:不提供不可否认性。
MAC设计(Design of MAC)
🔗
使用哈希函数。
使用分组密码。
基于哈希的MAC:HMAC(Hash-based MAC)
🔗
以密码学哈希函数作为基础构件。
用于IP安全协议套件、TLS(Transport Layer Security)和SET(Secure Electronic Transaction)等。
在特定假设下,可以证明HMAC的安全性。
HMAC结构(Construction of HMAC)
🔗
在
K
K
K
左侧补0,得到
b
b
b
比特字符串
K
+
K^+
K
+
。
计算
S
i
=
K
+
⊕
ipad
S_i = K^+ \oplus \text{ipad}
S
i
=
K
+
⊕
ipad
,其中ipad为0x36重复
b
/
8
b/8
b
/8
次。
在
S
i
S_i
S
i
之后附加
M
M
M
。
计算
H
(
S
i
∥
M
)
H(S_i \| M)
H
(
S
i
∥
M
)
。
计算
S
o
=
K
+
⊕
opad
S_o = K^+ \oplus \text{opad}
S
o
=
K
+
⊕
opad
,其中opad为0x5C重复
b
/
8
b/8
b
/8
次。
将
H
(
S
i
∥
M
)
H(S_i \| M)
H
(
S
i
∥
M
)
附加到
S
o
S_o
S
o
之后。
计算并输出
H
(
S
o
∥
H
(
S
i
∥
M
)
)
H(S_o \| H(S_i \| M))
H
(
S
o
∥
H
(
S
i
∥
M
))
。
HMAC安全性(Security of HMAC)
🔗
在特定假设下,可以提供可证明的安全性。
生成有效MAC输出,相当于对所用哈希函数完成以下攻击之一:
攻击者能够在随机、秘密且未知的IV下,计算压缩函数输出。
攻击者能够在IV随机且秘密设置的哈希函数中找到碰撞。
⇒
\Rightarrow
⇒
与寻找所用哈希函数的碰撞有关。
基于分组密码的MAC:CBC-MAC(Block Cipher-based MAC)
🔗
结合分组密码与工作模式。
实践中最常使用AES和CBC。
回顾CBC加密模式(Review: CBC Encryption Mode)
🔗
Enc
(
K
,
P
i
)
=
{
EncBlock
(
K
,
I
V
⊕
P
1
)
첫 블록의 경우
EncBlock
(
K
,
C
i
−
1
⊕
P
i
)
다른 블록의 경우
\text{Enc}(K, P_i) =\begin{cases}\text{EncBlock}(K, IV \oplus P_1) & \text{첫 블록의 경우}\\\text{EncBlock}(K, C_{i-1} \oplus P_i) & \text{다른 블록의 경우}\end{cases}
Enc
(
K
,
P
i
)
=
{
EncBlock
(
K
,
I
V
⊕
P
1
)
EncBlock
(
K
,
C
i
−
1
⊕
P
i
)
첫
블록의
경우
다른
블록의
경우
Dec
(
K
,
C
i
)
=
{
DecBlock
(
K
,
C
1
)
⊕
I
V
첫 블록의 경우
DecBlock
(
K
,
C
i
)
⊕
C
i
−
1
다른 블록의 경우
\text{Dec}(K, C_i) =\begin{cases}\text{DecBlock}(K, C_1) \oplus IV & \text{첫 블록의 경우} \\\text{DecBlock}(K, C_i) \oplus C_{i-1} & \text{다른 블록의 경우}\end{cases}
Dec
(
K
,
C
i
)
=
{
DecBlock
(
K
,
C
1
)
⊕
I
V
DecBlock
(
K
,
C
i
)
⊕
C
i
−
1
첫
블록의
경우
다른
블록의
경우
CBC-MAC说明(Description of CBC-MAC)
🔗
生成CBC-MAC
给定秘密密钥
k
k
k
、初始值
I
V
IV
I
V
,并将消息
x
x
x
分为
n
n
n
个分组
x
1
,
x
2
,
⋯
,
x
n
x_1, x_2, \cdots, x_n
x
1
,
x
2
,
⋯
,
x
n
。
y
1
=
Enc
B
l
o
c
k
(
k
,
I
V
⊕
x
1
)
y_1 = \text{Enc}_{Block}(k, IV \oplus x_1)
y
1
=
Enc
Bl
oc
k
(
k
,
I
V
⊕
x
1
)
y
i
=
Enc
B
l
o
c
k
(
k
,
y
i
−
1
⊕
x
i
)
y_i = \text{Enc}_{Block}(k, y_{i-1} \oplus x_i)
y
i
=
Enc
Bl
oc
k
(
k
,
y
i
−
1
⊕
x
i
)
对
2
≤
i
≤
n
2\leq i \leq n
2
≤
i
≤
n
计算,然后发送
(
x
,
y
n
)
(x, y_n)
(
x
,
y
n
)
。
验证CBC-MAC
给定
(
x
,
y
n
)
(x, y_n)
(
x
,
y
n
)
,验证:
y
n
=
?
CBC-MAC
k
(
x
)
y_n \stackrel{?}{=} \text{CBC-MAC}_k(x)
y
n
=
?
CBC-MAC
k
(
x
)
CBC-MAC保证消息的
完整性
与
认证
。
MAC:消息认证码 | PromleeBlog