Cryptology Academy · 课时

Argon2:内存困难型密码哈希

探索 Argon2i、Argon2d、Argon2id,以及内存困难特性为何重要

第 3 / 4 课13 个步骤

Argon2:内存困难型密码哈希 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。

欢迎

Argon2 于 2015 年赢得密码哈希竞赛(PHC),也是 OWASP 的首选建议。它的内存硬化设计能够抵御 bcrypt 无法抵御的 GPU 和 ASIC 攻击。

为什么内存硬化很重要

GPU 拥有数千个核心,但每个核心可用的 RAM 有限(约 1KB)。Argon2 要求每个哈希使用至少 64MB RAM。攻击者若尝试并行计算 1000 个哈希,就需要 64GB RAM,这既昂贵又有限。

Argon2 变体

Argon2d:数据相关访问——速度最快,但容易受到侧信道计时攻击。 Argon2i:数据无关访问——能够抵御计时攻击。 Argon2id:混合模式——建议大多数应用使用。

Argon2 参数

m:内存大小,单位为千字节(OWASP:最低 19456 KB = 19 MB,建议 64 MB) t:时间成本 / 迭代次数(建议为 3) p:并行度 / 线程数(建议为 4) salt:16 字节随机值 output:32 字节

Python 中的 Argon2id

from argon2 import PasswordHasher ph = PasswordHasher( memory_cost=65536, # 64 MB time_cost=3, parallelism=4 ) hash = ph.hash('my_password') # Verify: ph.verify(hash, 'my_password') # True

Argon2 哈希格式

$argon2id$v=19$m=65536,t=3,p=4$ bmFuZG9tc2FsdHJhbmRvbQ$ KaE5Jjy7E8...hashed... 所有参数都存储在哈希字符串中。验证过程自包含,无需单独存储参数。

OWASP 2024 年 Argon2id 建议

最低配置:m=19456 KB(19 MB)、t=2、p=1 建议配置:m=65536 KB(64 MB)、t=3、p=4 高安全性:m=262144 KB(256 MB)、t=4、p=8 请根据服务器可用的内存进行调整。

Argon2、bcrypt 与 PBKDF2

Argon2id:内存硬化、能抵抗 ASIC,建议用于新系统。 bcrypt:支持广泛、不具备内存硬化特性,适合兼容旧系统。 PBKDF2:符合 FIPS,不具备内存硬化特性,适用于受监管环境。

哈希升级策略

从 bcrypt 升级到 Argon2 时: 1. 为新哈希值添加新列 2. 下次登录时:使用旧的 bcrypt 进行验证,使用 Argon2 重新哈希,并存储新的哈希值 3. X 个月后,强制尚未升级的用户重置密码

真实框架中的 Argon2

Django:设置 PASSWORD_HASHERS=['django.contrib.auth.hashers.Argon2PasswordHasher'] Node.js:使用 argon2 软件包(不要使用 argon2-ffi) PHP 7.2+:password_hash() 中内置 PASSWORD_ARGON2ID 常量

Pepper:服务器端秘密值

Pepper 是一种服务器端秘密值,会在哈希前与密码混合:hash(password + pepper)。即使数据库泄露,攻击者仍然需要 Pepper。轮换 Pepper 会使所有哈希值失效。

快速检查

为什么 Argon2 比 bcrypt 更能抵抗 GPU 攻击?

回顾

Argon2id 是目前进行密码哈希的最佳工具。接下来我们将比较这三种算法,并学习如何根据您的场景选择合适的算法。
免费开始

用 AI 导师学习 Cryptology Academy — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
67
课程
261

常见问题解答

「Argon2:内存困难型密码哈希」课时是免费的吗?

是的 — 「Argon2:内存困难型密码哈希」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。

「Argon2:内存困难型密码哈希」这节课中我会学到什么?

探索 Argon2i、Argon2d、Argon2id,以及内存困难特性为何重要 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cryptology Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「Argon2:内存困难型密码哈希」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cryptology Academy 课中编写并运行代码吗?

能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 普通 SHA-256 为何不适合密码
  2. bcrypt:算法与成本因子
  3. Argon2:内存困难型密码哈希
  4. PBKDF2 与算法选择
← 返回 Cryptology Academy