哈希摘要Hash
哈希摘要的定义、核心性质和常见算法。
#status / growing
#type / concept
#tech / security / crypto
摘要算法 (Hash Function)
1. 定义
摘要算法(又称哈希函数、杂凑函数、散列算法)将任意长度的输入消息映射为固定长度的输出(称为摘要、指纹或 Hash 值)。
$$ h = H(M) $$
2. 核心特性
为了用于密码学,Hash 函数必须具备以下属性:
- 单向性 (Pre-image Resistance):给定摘要 $h$,在计算上无法推导出原始消息 $M$。
- 抗弱碰撞性 (2nd Pre-image Resistance):给定消息 $M$,无法找到另一个消息 $M’$ 使得 $H(M) = H(M’)$。
- 抗强碰撞性 (Collision Resistance):无法找到任意两个不同的消息 $M$ 和 $M’$,使得它们的 Hash 值相同。
- 雪崩效应:输入消息的微小改变(如 1 bit)会导致输出摘要发生巨大变化。
说法:
- 将任意长度的二进制明文(不定长) 映射为 较短的二进制串(定长)的算法
- 同一明文转为的结果相同,不同明文的结果不同(理论上)。
- hash 值称为 指纹、摘要,因为是唯一的。
关键词:
- 哈希碰撞
- 不可逆
- 加盐
3. 常见算法
MD5 (Message Digest Algorithm 5)
- 输出长度:128 bit (16 字节)。
- 分组长度:512 bit。
- 现状:已被证实存在碰撞漏洞,不再建议用于高安全性场景,但在完整性校验中仍常用。
SHA 系列 (Secure Hash Algorithm)
由美国 NIST 发布,安全性高于 MD5。
- SHA-1:输出 160 bit。已被攻破,逐渐淘汰。
- SHA-2:目前主流标准,包括 SHA-256 (256 bit) 和 SHA-512 (512 bit) 等。
4. 应用场景
- 文件完整性校验:防止文件被篡改。
- 口令存储:存储密码的 Hash 值而非明文。
- digital-signature:先对消息做 Hash,再对 Hash 值签名。
补充
MD5 和 SHA1 已经被破解
个人想法
hash 算法的值被称为 指纹,是用来给文件赋予唯一性的工具。
有了这个工具反过来就能判断两个文件是否相同,即是否被修改。
但他不可逆、难破解、唯一性的特点也可以用来存储密码并验证。
相关链接: