Argon2
Argon2 是什么?
Argon2现代的内存密集型口令哈希与密钥派生函数,在 2015 年口令哈希竞赛中胜出,并由 RFC 9106 标准化。
Argon2 是由 Biryukov、Dinu 与 Khovratovich 设计的内存密集型密钥派生与口令哈希函数,在 2015 年的 Password Hashing Competition 中胜出,并由 RFC 9106 标准化。它有三种变体:Argon2d(数据相关索引,速度最快,但其内存访问模式依赖于密钥,因而会通过侧信道泄露信息)、Argon2i(数据无关索引,抗侧信道,但对时间-内存权衡攻击的抵抗力较弱),以及推荐使用的 Argon2id(一种混合变体,在第一遍的前半段使用 Argon2i 索引,其后改用 Argon2d)。
它的安全性来自于填满一大块在整个计算过程中都必须保留的内存。这种内存密集性是相较于旧方案的关键优势:GPU 或 ASIC 破解器可以并行运行成千上万个廉价的哈希核心,但却无法廉价地为每个核心提供数百兆字节(MiB)的高速 RAM,因此 Argon2 对每次猜测所抬高的成本远超 PBKDF2,甚至超过 bcrypt(后者仅使用约 4 KiB)。可调参数包括内存代价(m)、时间/迭代次数(t)、并行度(p)与输出长度。
RFC 9106 推荐了两套配置:高内存方案为 m=2 GiB、t=1、p=4,内存受限方案为 m=64 MiB、t=3、p=4。OWASP 的《Password Storage Cheat Sheet》给出了一个保守的 Web 服务器基线:Argon2id,m=19456(19 MiB),t=2,p=1。务必为每个口令搭配唯一的随机盐值,并根据自身的延迟预算来调整参数。
flowchart LR P[口令] --> H[Argon2id] S[唯一随机盐值] --> H PARAMS[m 内存代价<br/>t 迭代次数<br/>p 并行度] --> H H --> MEM[填满大块内存<br/>内存密集] MEM --> O[派生哈希或密钥] MEM -. 抬高成本 .-> GPU[GPU 或 ASIC 破解<br/>变得昂贵]
● 示例
- 01
使用 Argon2id(m=64 MiB,t=3,p=1)存储用户口令。
- 02
在磁盘加密工具中从用户口令短语派生对称加密密钥。
● 常见问题
Argon2 是什么?
现代的内存密集型口令哈希与密钥派生函数,在 2015 年口令哈希竞赛中胜出,并由 RFC 9106 标准化。 它属于网络安全的 密码学 分类。
Argon2 是什么意思?
现代的内存密集型口令哈希与密钥派生函数,在 2015 年口令哈希竞赛中胜出,并由 RFC 9106 标准化。
如何防御 Argon2?
针对 Argon2 的防御通常结合技术控制与运营实践,详见上方完整定义。
Argon2 还有哪些其他名称?
常见的别称包括: Argon2id, PHC 冠军。