哈希算法与消息摘要

约 6 分钟读完

哈希算法与消息摘要

概述

哈希函数(Hash Function)是密码学中最重要的基础工具之一,它能够将任意长度的输入映射为固定长度的输出(称为哈希值或消息摘要)。密码学安全的哈希函数具有三个核心性质:抗原像攻击(给定哈希值难以找到对应的输入)、抗第二原像攻击(给定一个输入难以找到另一个产生相同哈希值的输入)和抗碰撞攻击(难以找到两个不同的输入产生相同的哈希值)。

哈希算法在信息安全中的应用极为广泛:密码存储(存储哈希值而非明文密码)、数据完整性校验(验证文件是否被篡改)、数字签名(对消息摘要进行签名而非直接对消息签名)、区块链(工作量证明的核心组件)等场景都依赖哈希函数的安全性。

了解各类哈希算法的特点、安全强度和已知攻击方法,是密码学学习的重要组成部分,也是 CTF 竞赛中密码学类题目的常见考点。

核心概念

MD5 算法及其安全性

MD5 由 Ron Rivest 于 1991 年设计,输出长度为 128 位(16 字节)。MD5 对输入消息进行分组(每组 512 位),经过四轮共 64 步的压缩函数处理,最终输出 128 位的哈希值。MD5 的设计简洁高效,曾经被广泛用于文件校验和密码存储。

然而,MD5 已经不再安全。2004 年,王小云教授团队展示了 MD5 的碰撞攻击,可以在普通计算机上短时间内找到碰撞对。2008 年,研究人员利用 MD5 碰撞成功伪造了 SSL 证书。目前 MD5 已被 NIST 正式弃用,不应再用于任何安全相关的场景,但可以用于非安全目的的文件校验。

SHA 系列算法

SHA(Secure Hash Algorithm)是由 NIST 标准化的哈希函数家族。SHA-1 输出 160 位哈希值,2017 年由 Google 的 SHAttered 项目首次实现了实际碰撞攻击,已被弃用。SHA-2 家族包括 SHA-224、SHA-256、SHA-384 和 SHA-512,目前仍是主流的安全哈希算法,广泛应用于 TLS、数字签名、比特币等领域。

SHA-3(Keccak)是 NIST 于 2015 年标准化的新一代哈希函数,采用了与 SHA-2 完全不同的海绵结构(Sponge Construction),而非 Merkle-Damgard 结构。SHA-3 的设计目标是作为 SHA-2 的备选方案,即使 SHA-2 被攻破也能提供替代方案。SHA-3 支持任意输出长度,具有高度的灵活性。

SM3 国密哈希算法

SM3 是中国国家密码管理局于 2010 年发布的哈希算法标准,输出长度为 256 位。SM3 的设计借鉴了 SHA-256 的结构,但在压缩函数中加入了更多的非线性操作和消息扩展,以增强安全性。SM3 已被广泛应用于中国的商用密码体系中,包括数字证书、电子政务、金融支付等领域。

在 CTF 竞赛中,与国密相关的题目也时有出现,了解 SM3 的基本原理有助于应对这类题目。SM3 的计算过程包括消息填充、消息扩展和压缩函数三个阶段,整体结构与 SHA-256 类似但细节不同。

碰撞攻击与生日攻击

碰撞攻击的目标是找到两个不同的消息 M1 和 M2,使得 H(M1) = H(M2)。根据生日悖论,对于一个输出长度为 n 位的哈希函数,大约只需要 2^(n/2) 次计算就能找到碰撞,这远小于穷举所需的 2^n 次。生日攻击是所有哈希函数面临的通用碰撞攻击,因此一个 n 位输出的哈希函数的实际碰撞抵抗力只有 2^(n/2) 位安全性。

HMAC 消息认证码

HMAC(Hash-based Message Authentication Code)是基于哈希函数构造的消息认证码,结合了密钥和哈希函数来验证消息的完整性和真实性。HMAC 的计算公式为 HMAC(K, m) = H((K' XOR opad) || H((K' XOR ipad) || m)),其中 K' 是从密钥 K 派生的定长密钥,ipad 和 opad 是固定的填充常量。

HMAC 的安全性可以归约到底层哈希函数的安全性,即使哈希函数被发现存在某些弱点(如长度扩展攻击),HMAC 仍然能够保持安全。HMAC 广泛应用于 API 签名(如 AWS Signature)、TLS MAC 计算、IPSec 认证等场景。

实战要点

  1. 识别哈希值类型:通过哈希值的长度判断算法类型——32 个十六进制字符为 MD5,40 个为 SHA-1,64 个为 SHA-256,128 个为 SHA-512。
  2. 彩虹表破解:对于未加盐的哈希值,可使用彩虹表(如 CrackStation、hashes.org)快速查找原始值;加盐哈希则需要使用 Hashcat 或 John the Ripper 进行暴力破解。
  3. 长度扩展攻击:基于 Merkle-Damgard 结构的哈希函数(MD5、SHA-1、SHA-256)都容易受到长度扩展攻击,攻击者可以在不知道原始消息的情况下,为原始消息追加内容计算出有效的哈希值。
  4. 哈希碰撞利用:在 CTF 中,有时可以利用已知的碰撞对(如 fastcoll 工具生成的 MD5 碰撞)来绕过文件完整性校验或构造特殊语句。

总结

哈希算法是密码学的三大基础工具之一(与对称加密、非对称加密并列),在数据完整性、密码存储、数字签名等众多场景中发挥着不可替代的作用。随着 MD5 和 SHA-1 的安全性被逐步攻破,SHA-2 和 SHA-3 成为当前推荐使用的安全哈希算法。

对于安全从业者来说,不仅要了解各哈希算法的理论安全性,还要关注实际应用中可能出现的误用问题,如未加盐哈希、弱哈希选择、忽略长度扩展攻击等。正确的哈希使用方式是安全系统设计的重要组成部分。

← 安全基线检查标准 后门排查完全指南 →