1. 引言
密码学(Cryptography)是通过一系列算法和数学规则来保障信息与通信安全的技术。它能有效防止第三方窃取或篡改私密信息。现代密码学中使用了多种基础构件,包括哈希(Hash)、消息认证码(MAC)以及数字签名等。
在本文中,我们将重点介绍 哈希函数 与 MAC 函数 的工作原理、区别以及它们在实际中的应用。我们还将介绍 HMAC,它是将哈希与 MAC 结合的一种常用算法。目标是帮助你更好地理解这些基础构件在安全系统中的作用。
2. 哈希 vs. MAC:核心区别
2.1 技术层面的对比
哈希函数 是一种 单向加密过程,用于将任意长度的原始明文转换为固定长度的摘要(digest),也叫哈希值。它是一个 确定性函数,相同输入始终生成相同输出。
- 常见哈希算法包括:SHA-1、SHA-2、SHA-3、SHA-256、MD5 等。
- 输入:单个消息(message),无密钥。
- 输出:固定长度的哈希值。
MAC(消息认证码) 是一种基于 对称密钥 的加密过程,通常使用哈希函数作为其一部分。它不仅验证数据完整性,还能验证消息来源。
- 常见 MAC 算法包括:CBC-MAC、UMAC、HMAC 等。
- 输入:消息 + 共享密钥(shared key)。
- 输出:标签(tag),长度通常与输入有关。
2.2 安全目标对比
功能 | 哈希(Hash) | MAC |
---|---|---|
完整性(Integrity) | ✅ | ✅ |
机密性(Confidentiality) | ❌ | ❌ |
身份验证(Authentication) | ❌ | ✅ |
- 哈希用于验证数据是否被篡改,但无法验证消息来源。
- MAC 不仅验证完整性,还能验证发送者身份,前提是双方共享密钥。
3. HMAC:哈希与 MAC 的结合体
HMAC(Hash-based Message Authentication Code) 是一种结合了哈希函数与对称密钥的认证机制。
3.1 工作原理
HMAC 的核心思想是:
- 从原始密钥中派生出两个子密钥 K1 和 K2。
- 第一轮:使用 K1 对原始消息进行哈希运算,生成中间哈希值 HMAC1。
- 第二轮:使用 K2 对 HMAC1 进行哈希运算,生成最终的 HMAC 值。
接收方使用相同的密钥和流程重新计算 HMAC,并与收到的值进行比对,以确认消息完整性和来源真实性。
3.2 常见 HMAC 算法
- HMAC-MD5
- HMAC-SHA1
- HMAC-SHA256
- HMAC-SHA512
4. 应用场景对比
4.1 哈希函数的典型用途
- ✅ 安全存储密码:由于哈希不可逆,即使数据库泄露也难以还原原始密码。
- ✅ 文件校验:下载软件时通过哈希值验证文件是否被篡改。
- ✅ 数字签名:签名前通常先对消息哈希处理,提升效率并确保安全性。
⚠️ 注意:哈希函数需具备强抗碰撞能力,否则可能被攻击者构造出两个不同输入生成相同哈希值(碰撞攻击)。
4.2 MAC 的典型用途
- ✅ 金融加密:如银行系统中用于创建账户、验证交易。
- ✅ 电子资金转账(EFT):确保交易信息未被篡改。
- ✅ AEAD 加密模式:MAC 通常与加密算法结合使用,实现认证加密(Authenticated Encryption)。
4.3 哈希 vs. MAC 对比总结
特性 | 哈希 | MAC |
---|---|---|
输入数量 | 1(消息) | 2(消息 + 密钥) |
输出名称 | 哈希 / 摘要 | MAC / 标签(Tag) |
输出长度 | 固定 | 通常与输入有关 |
安全目标 | 完整性 | 完整性 + 身份认证 |
是否使用密钥 | ❌ | ✅(对称密钥) |
典型算法 | SHA-256、MD5 | HMAC、CBC-MAC |
应用领域 | 密码存储、文件校验 | 金融通信、认证加密 |
5. 总结
本文介绍了密码学中的两个基础构件:哈希函数 和 消息认证码(MAC),并重点分析了它们的核心区别与应用场景。我们还介绍了 HMAC,它是将哈希与 MAC 结合的一种安全机制。
在实际开发中,选择使用哈希还是 MAC,取决于你是否需要验证消息来源。如果只需要确保数据未被篡改,使用哈希即可;如果还需要验证发送者身份,则应使用 MAC 或 HMAC。
掌握这些基础概念,对于构建安全可靠的系统至关重要。希望本文能帮助你更好地理解和应用这些密码学工具。