普通 SHA-256 为何不适合密码
理解彩虹表、暴力破解速度和盐值
普通 SHA-256 为何不适合密码 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。
欢迎
安全地存储密码是安全领域中最容易被误解的主题之一。本课将帮助您理解为什么 SHA-256 这类快速哈希算法完全不适合密码。
数据库泄露时会发生什么
数据库泄露一直在发生。2024 年,RockYou2024 泄露了 100 亿个密码。如果您以可恢复的形式存储用户密码,攻击者就能将它们恢复出来。
简单的 SHA-256 存储
错误模式:
hashed = sha256(password)
store(username, hashed)
问题:(1) sha256 速度极快;(2) 相同密码会产生相同哈希值(没有盐值);(3) 常见密码存在彩虹表。
彩虹表攻击
彩虹表是针对数百万个常见密码预先计算的 hash→password 映射。SHA-256('password') 始终产生相同的哈希值。查表即可瞬间解密大多数密码。
盐值的作用
盐值 = 在哈希前添加到密码前面的随机字节。
hash = sha256(salt + password)
每个用户都会获得唯一的盐值。彩虹表因此失去作用,攻击者必须分别对每个用户进行暴力破解。
但仅有盐值还不够
现代 GPU 每秒可计算 10 BILLION 个 SHA-256 哈希值。即使盐值各不相同,攻击者拿到泄露的哈希值后,仍可在几分钟内暴力破解 8 位密码。
速度问题
SHA-256 的设计目标就是高速运行——用于文件完整性、TLS 等场景。速度对于密码哈希来说是敌人。我们需要有意放慢速度、抵抗暴力破解的算法。
密钥拉伸
密钥拉伸会将哈希函数迭代数千次:for i in range(100000): h = sha256(h)。这会同时拖慢攻击者和防御者,但硬件优势仍然偏向攻击者。
内存密集型函数
现代密码哈希算法需要大量 RAM,而不仅仅是 CPU 运算周期。与 CPU 相比,GPU 的每核心 RAM 有限。Argon2 的内存密集特性可以抵消 GPU/ASIC 的优势。
常见错误
不要这样做:
- sha256(password)
- sha256(salt + password)(没有迭代)
- md5(password)(或任何 MD5)
- 加密密码(可以被解密)
- sha256(sha256(password))(仍然很快)
应该使用什么
请使用:bcrypt(部署最广泛)、Argon2id(OWASP 推荐,内存密集型)、PBKDF2-SHA256(符合 FIPS,能够接受)。这三种算法都经过有意减速,并且设计上都会使用盐值。
快速检查
即使使用盐值,SHA-256 为什么仍不适合密码哈希?
回顾
SHA-256 不适合密码。接下来我们将学习 bcrypt——一种有意放慢哈希过程并抵抗硬件攻击的算法。
常见问题解答
「普通 SHA-256 为何不适合密码」课时是免费的吗?
是的 — 「普通 SHA-256 为何不适合密码」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。
「普通 SHA-256 为何不适合密码」这节课中我会学到什么?
理解彩虹表、暴力破解速度和盐值 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cryptology Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「普通 SHA-256 为何不适合密码」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cryptology Academy 课中编写并运行代码吗?
能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 普通 SHA-256 为何不适合密码
- bcrypt:算法与成本因子
- Argon2:内存困难型密码哈希
- PBKDF2 与算法选择