SHA-1 与 SHA-2 系列详解
理解 SHA-1 的弱点,以及 SHA-256 和 SHA-512 的区别
SHA-1 与 SHA-2 系列详解 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。
欢迎
SHA-1 和 SHA-2 是由 NSA 设计、用于替代 MD5 的后继算法。SHA-1 现已弃用。SHA-256 和 SHA-512 仍是大多数应用所采用的行业标准。
SHA-1 概览
SHA-1 生成 160 位(20 字节)的哈希。由 NSA 设计,于 1995 年发布。示例:SHA1('hello') = aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
SHA-1 结构
SHA-1 使用 80 轮,分为 4 个阶段,每个阶段包含 20 轮。每个阶段使用不同的逻辑函数(Ch、奇偶函数、Maj)。它使用 XOR 和循环移位,将 16 个输入字扩展为 80 个。
SHA-1 碰撞:SHAttered(2017)
2017 年,Google 和 CWI Amsterdam 产生了首个实用的 SHA-1 碰撞(SHAttered 攻击)。两个 PDF 具有相同的 SHA-1 哈希,但内容不同。成本:约 6500 个 GPU 年。
SHA-2 系列
SHA-2 包括:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。它们全部采用 Merkle-Damgård 结构。SHA-256 是最常用的变体。
SHA-256 结构
SHA-256 对 512 位分组执行 64 轮处理。它维护 8 个状态字,每个为 32 位(a、b、c、d、e、f、g、h)。每一轮使用 Ch、Maj、Σ0、Σ1 函数混合输入字。
Python 中的 SHA-256
import hashlib
msg = b'hello'
digest = hashlib.sha256(msg).hexdigest()
print(digest)
# 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
SHA-512 与 SHA-256
SHA-512 使用 64 位字执行 80 轮处理,生成 512 位结果。它在 64 位硬件上速度更快,但会生成更大的摘要。当需要 256 位安全级别时,请使用 SHA-512。
SHA-3(Keccak)
SHA-3 于 2015 年标准化,作为一种替代设计。它使用海绵结构,而不是 Merkle-Damgård 结构,因此不会受到长度扩展攻击的影响。
针对 SHA-2 的长度扩展攻击
SHA-256(secret || message) 存在漏洞:知道 Hash(message) 的攻击者可以计算出 Hash(message || padding || extra)。这正是 HMAC 使用双重哈希结构的原因。
如何选择
SHA-256:适用于通用场景、TLS、证书和 HMAC。SHA-512:适用于需要更高安全裕度的应用。SHA-3:适用于不必考虑长度扩展的新协议。新设计绝不要使用 SHA-1 或 MD5。
快速检查
SHA-3 使用了什么结构,使其不会受到长度扩展攻击的影响?
回顾
您已经了解了 SHA 系列的演变。接下来我们将学习哈希的实际应用:校验和、HMAC 以及 Git 对 SHA 的使用。
常见问题解答
「SHA-1 与 SHA-2 系列详解」课时是免费的吗?
是的 — 「SHA-1 与 SHA-2 系列详解」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。
「SHA-1 与 SHA-2 系列详解」这节课中我会学到什么?
理解 SHA-1 的弱点,以及 SHA-256 和 SHA-512 的区别 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cryptology Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「SHA-1 与 SHA-2 系列详解」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cryptology Academy 课中编写并运行代码吗?
能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 优秀哈希函数的特征
- MD5:历史、用途与失效原因
- SHA-1 与 SHA-2 系列详解
- 哈希应用:校验和、HMAC 与 Git