密码哈希:bcrypt、Argon2、PBKDF2
了解明文存储为何危险,以及加盐哈希如何保护密码
密码哈希:bcrypt、Argon2、PBKDF2 是 CoddyKit 上的免费 Cyber Security Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cyber Security Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cyber Security Academy 课程共包含 4 节课。
为什么不能以明文存储密码
以明文存储密码是灾难性的——一次数据库泄露就会暴露所有账户。密码在存储前必须经过单向函数处理,这样即使有人访问数据库,也无法得出原始密码。
什么是哈希处理
哈希函数会将任意长度的输入转换为固定长度的输出。同一个输入始终产生相同的输出,但无法从哈希值恢复原始内容。示例包括:SHA-256、bcrypt 和 Argon2。
为什么不能使用 SHA-256 处理密码
SHA-256 这类通用哈希函数的设计目标是高速运行。攻击者可以利用 GPU 每秒计算数十亿个 SHA-256 哈希值,使暴力破解变得可行。
密码哈希处理需要使用速度慢且计算成本高的函数。
加盐
盐值是在每个密码进行哈希处理前加入的随机值。它可以确保使用相同密码的两个用户得到不同的哈希值,从而防止彩虹表攻击和批量破解。盐值会与哈希值一同存储(无需保密)。
# Conceptual salt example
hash = bcrypt("password" + random_salt)bcrypt
bcrypt 于 1999 年专门为密码哈希处理而设计。它具有可配置的成本因子,用于控制哈希处理的缓慢程度。随着硬件性能提升,应提高成本因子以维持安全性。
目前常见的成本因子为 12,在现代 CPU 上完成一次哈希处理约需 250 毫秒。
PBKDF2
PBKDF2(基于密码的密钥派生函数 2)会多次应用哈希函数(例如 HMAC-SHA256),这个次数称为迭代次数。迭代次数越多,处理速度越慢,安全性越高。NIST 推荐使用它,WPA2 也用它处理 Wi-Fi 密码。
Argon2
Argon2 于 2015 年赢得密码哈希竞赛,是现代标准。它可以配置以下参数:
- 时间成本——迭代次数
- 内存成本——所需 RAM(限制 GPU 加速)
- 并行度——线程数
对于大多数应用,请使用 Argon2id。
彩虹表
彩虹表是预先计算好的哈希值到明文的查找表。不加盐时,拥有哈希值的攻击者可以立即在表中查到对应内容。加盐会使每个哈希值都具有唯一性,从而让彩虹表失去作用。
密码破解技术
常见的离线破解方法:
- 字典攻击——尝试常见密码及其变体
- 暴力破解——尝试所有字符组合
- 基于规则的破解——对字典应用变换规则(添加年份、改为首字母大写、进行字母数字替换)
- 工具:Hashcat、John the Ripper
选择合适的算法
新应用的优先选择顺序:
- Argon2id——最能抵抗 GPU/ASIC 破解
- bcrypt——支持广泛,经过实践验证
- PBKDF2——获 NIST 批准,在某些合规场景中为必需
密码绝不能使用:MD5、SHA-1 或未加盐的 SHA-256。
验证过程
当用户登录时:
- 获取该用户已存储的哈希值和盐值
- 使用相同的盐值和算法对提交的密码进行哈希处理
- 将生成的哈希值与已存储的哈希值进行比较(使用恒定时间比较)
- 绝不解密——仅进行比较
快速检查:密码哈希
哪种密码哈希算法被认为是当前的最佳实践,并且曾在密码哈希竞赛中获胜?
课程回顾
密码必须以哈希值形式存储,而不是以明文形式存储。SHA-256 这类快速算法并不适合此用途——请使用缓慢的密码哈希函数:Argon2id(首选)、bcrypt 或 PBKDF2。始终为每个密码使用随机盐值,以防范彩虹表攻击。绝不要自行编写密码学算法——请使用经过验证的库。
常见问题解答
「密码哈希:bcrypt、Argon2、PBKDF2」课时是免费的吗?
是的 — 「密码哈希:bcrypt、Argon2、PBKDF2」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cyber Security Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cyber Security Academy 课程共包含 4 节课。
「密码哈希:bcrypt、Argon2、PBKDF2」这节课中我会学到什么?
了解明文存储为何危险,以及加盐哈希如何保护密码 你通过在浏览器中直接运行的动手代码来练习 Cyber Security Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cyber Security Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cyber Security Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「密码哈希:bcrypt、Argon2、PBKDF2」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cyber Security Academy 课中编写并运行代码吗?
能。每节 Cyber Security Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。