python: argon2 和 bcrypt,两种慢哈希算法的区别

一,两者的不同

在 Python 的密码哈希库(如 pwdlib、Passlib 或高级框架 FastAPI 中常搭配使用的哈希方案)中,
Argon2 和 bcrypt 是当前最主流的两种慢哈希(Slow Hashing)算法。
它们的核心区别在于对硬件防御的维度(CPU vs 内存)以及安全设计的时代背景

二,比较:

image

三,详解:

核心区别详解
1. 硬件抵抗力(内存硬度)
  • bcrypt:设计于 1999 年。由于当年没有现在这样强大的 GPU 和 ASIC(专用集成电路)定制芯片,它只设计了消耗 CPU 时间的机制。
    黑客如果用上千个廉价的黑客专用显卡流处理器来并发暴力破解 bcrypt,防御效率会明显下降。
     
  • Argon2:是现代算法,引入了 “内存硬度(Memory-hard)”。这意味着它不仅让 CPU 算得慢,还会强制占用大量内存空间。
    黑客如果想用 GPU/ASIC 并发破解 Argon2,就必须为每个核心配备大量的物理内存,这导致黑客的硬件成本暴增,从而破产式放弃攻击。
2. 参数调优的灵活性
  • bcrypt:你只能调整一个“工作因子(rounds 或 work_factor)”。数值每加 1,计算时间翻倍。
  • Argon2:提供了三个维度的调优:
    • Memory:占用多少内存(如 64MB)。
    • Time:迭代多少轮。
    • Parallelism:并发使用多少个 CPU 核心。
      这允许你根据自己服务器的实际剩余资源(比如内存多、CPU强),量身定制防线。
3. 72 字节“截断”陷阱
  • bcrypt:存在一个历史遗留限制,只处理前 72 个字节的密码。如果用户输入了一个 100 字节的超长密码,bcrypt 只会对前 72 字节进行哈希,后面的 28 字节被直接忽略。
  • Argon2:没有这个限制,可以安全地处理任意长度的复杂密码或长短语。
4. 变体模式
  • bcrypt:算法单一固定。
  • Argon2:拥有三种变体:
    • Argon2d:最大化抵抗 GPU 攻击(常用于加密货币)。
    • Argon2i:针对防范侧信道定时攻击进行了优化。
    • Argon2id:结合了前两者的优势,是当前密码存储默认且最推荐的模式。
posted @ 2026-09-26 23:04  刘宏缔的架构森林  阅读(6)  评论(0)    收藏  举报