修订记录
版本 | 日期 | 备注 |
---|---|---|
0.1 | 2023.11.14 | 初始版本 |
第11章 哈希函数
引言:
哈希函数是一个非常重要的密码学组件。哈希函数计算了一个消息的摘要,二这个摘要是非常短的、固定长度的位字符串。对于某个特定消息而言,消息摘要(或哈希值)可以看做是该消息的指纹,即该消息的唯一表示。(与本书目前介绍的其他所有加密算法不同)哈希函数没有密钥。哈希函数是数字签名方案和消息验证码的核心部分,这部分内容在第12章节。
11.2 哈希函数的安全性要求
为了保证安全性,哈希函数需要拥有以下三个核心属性
- 抗第一原像性(或单向性)
- 抗第二原像性(或弱抗冲突性)
- 抗冲突性(或强抗冲突性)
给定一个哈希输出
z
z
z,找到满足
z
=
h
(
x
)
z=h(x)
z=h(x)的输入消息
x
x
x,在计算上必须是不可行的。换句话说,给定一个指纹,我们不可能找到对应的消息。
$$
11.2.2 抗第二原像性
对使用哈希的数字签名而言,确保两个不同的消息不会映射到相同的值是非常重要的。这意味着使用相同的哈希值 z 1 = h ( x 1 ) = h ( x 2 ) = z 2 z_1=h(x_1)=h(x_2)=z_2 z1=h(x1)=h(x2)=z2 创建两个不同的消息 x 1 ≠ x 2 x_1 \neq x_2 x1=x2在计算上是不可行的。
第12章 消息验证码
消息验证码(Message authentication code,MAC)也称为密码学校验 或密钥的哈希函数。MAC 与数字签名有一些共同的属性,因为它们都提供消息完整性和消息验证。其不同点是,MAC是对称密钥方案,并且它也不提供不可否认性。MAC的一个优势是他们的速度比数字签名要快很多,因为他们要么基于分组密码,要么基于哈希函数。
12.1 消息验证码的基本原理
与数字签名一样,MAC也是将验证标签附加到消息后面。
MAC是对称密码和
k
k
k和消息
x
x
x的函数:
m
=
M
A
C
k
(
x
)
m=MAC_k(x)
m=MACk(x)
消息验证码的属性
- 密码学校验和
- 对称性
- 任意的消息
- 固定的输出长度
- 消息完整性
- 消息验证
- 不具有不可否认性
12.2 哈希函数的MAC: HMAC
实现MAC的一个选择就是使用密码学哈希函数作为基本块,如SHA-1。
HMAC 传输层安全协议(TLS)和IPsec协议集中都有使用。HMAC使用如此广泛的一个原因就是,在某些假设下,它是可证明安全的。
所有基于哈希的验证码的基本思想就是,将密钥和消息一起进行哈希。有两种可能的构建方法:
- 密钥前缀MAC:
m = M A C k ( x ) = h ( k ∣ ∣ x ) m=MAC_k(x)=h(k||x) m=MACk(x)=h(k∣∣x) - 密钥后缀MAC
m = M A C k ( x ) = h ( x ∣ ∣ k ) m=MAC_k(x)=h(x||k) m=MACk(x)=h(x∣∣k)