哈希密码算法Argon2

Argon2 是一种密码哈希函数,是 2015 年 Password Hashing Competition (PHC) 的获胜者,被认为是当前最安全的哈希算法之一。

核心特点

  • 抗 GPU/ASIC 攻击:设计时考虑了硬件加速攻击,通过大量内存需求来增加攻击成本
  • 可调节参数
    • memoryCost — 使用的内存量(KB)
    • timeCost — 迭代次数
    • parallelism — 并行线程数
    • hashLength — 输出哈希长度
  • 抗侧信道攻击:恒定时间操作

argon2变体

变体 特点 用途
Argon2id 混合 Type 2 和 Type 3 密码哈希(推荐)
Argon2i 内存访问与密码无关 密钥派生
Argon2d 内存访问与密码相关 加盐

Argon2id 是最推荐的变体,它结合了 Type 2(抗 GPU 攻击)和 Type 3(抗侧信道攻击)的优点。

Python 示例

1
2
3
4
5
6
7
8
9
10
11
12
13
from argon2 import PasswordHasher
from argon2.exceptions import VerifyMismatchError

# 哈希密码
ph = PasswordHasher()
hashed = ph.hash("my_secret_password")

# 验证密码
try:
ph.verify(hashed, "my_secret_password") # True
print("密码匹配")
except VerifyMismatchError:
print("密码不匹配")

安全建议

  1. 始终使用 Argon2id 作为密码哈希
  2. 默认参数:时间开销 3,内存开销 65536 KB,并行度 4
  3. 定期升级:随着硬件发展,适时增加参数值
  4. 不要自己实现:使用经过审计的库,不要手写