1. 引言

密码学(Cryptography)是通过一系列算法和数学规则来保障信息与通信安全的技术。它能有效防止第三方窃取或篡改私密信息。现代密码学中使用了多种基础构件,包括哈希(Hash)、消息认证码(MAC)以及数字签名等。

在本文中,我们将重点介绍 哈希函数MAC 函数 的工作原理、区别以及它们在实际中的应用。我们还将介绍 HMAC,它是将哈希与 MAC 结合的一种常用算法。目标是帮助你更好地理解这些基础构件在安全系统中的作用。

2. 哈希 vs. MAC:核心区别

2.1 技术层面的对比

  • 哈希函数 是一种 单向加密过程,用于将任意长度的原始明文转换为固定长度的摘要(digest),也叫哈希值。它是一个 确定性函数,相同输入始终生成相同输出。

    • 常见哈希算法包括:SHA-1、SHA-2、SHA-3、SHA-256、MD5 等。
    • 输入:单个消息(message),无密钥。
    • 输出:固定长度的哈希值。

    Hash

  • MAC(消息认证码) 是一种基于 对称密钥 的加密过程,通常使用哈希函数作为其一部分。它不仅验证数据完整性,还能验证消息来源。

    • 常见 MAC 算法包括:CBC-MAC、UMAC、HMAC 等。
    • 输入:消息 + 共享密钥(shared key)。
    • 输出:标签(tag),长度通常与输入有关。

    MAC

2.2 安全目标对比

功能 哈希(Hash) MAC
完整性(Integrity)
机密性(Confidentiality)
身份验证(Authentication)
  • 哈希用于验证数据是否被篡改,但无法验证消息来源。
  • MAC 不仅验证完整性,还能验证发送者身份,前提是双方共享密钥。

3. HMAC:哈希与 MAC 的结合体

HMAC(Hash-based Message Authentication Code) 是一种结合了哈希函数与对称密钥的认证机制。

3.1 工作原理

HMAC 的核心思想是:

  1. 从原始密钥中派生出两个子密钥 K1 和 K2。
  2. 第一轮:使用 K1 对原始消息进行哈希运算,生成中间哈希值 HMAC1。
  3. 第二轮:使用 K2 对 HMAC1 进行哈希运算,生成最终的 HMAC 值。

接收方使用相同的密钥和流程重新计算 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。

掌握这些基础概念,对于构建安全可靠的系统至关重要。希望本文能帮助你更好地理解和应用这些密码学工具。


原始标题:Hash vs. Message Authentication Code

» 下一篇: UDP 丢包解析