【发布时间】:2009-08-04 09:30:10
【问题描述】:
我正在寻找安全存储密码的方法。有些人声称 scrypt 比 bcrypt “更好”,到目前为止,我还没有看到有人声称相反,或者 scrypt 不安全,尽管有些人称 bcrypt “更有信誉”。
scrypt 比 bcrypt 有什么优势?根据 scrypt 网站,“对 scrypt 进行硬件暴力攻击的成本大约是对 bcrypt 进行类似攻击的成本的 4000 倍”。如果这是唯一的优势,那么我不能只使用更多轮数的 bcrypt 吗?
【问题讨论】:
-
Bcrypt 需要 4k 内存来执行它的计算。具有 8 GB RAM 的视频卡可以并行运行 2M bcrypts。这就是为什么 scrypt 具有可配置的内存要求。如果您要求它使用 128 MB 内存,则只能让其中的 64 个在 8GB 显卡中并行运行。大内存需求也是因为显卡随机读写内存非常慢。 scrypt 的另一个优点是 a) 它基本上是一个美化的 PBKDF2 - 所以审核员会很高兴 b) 它也可以用作密钥派生功能(不仅仅是密码存储)
-
Scrypt 旨在随机读写大量内存。这扼杀了 ASIC 的优势,并且使并行化变得令人望而却步。 Colin Percival 使用 PBKDF2 进行散列,但他基本上使用 “昂贵” 的方式来生成盐。所以算法至少和PBKDF2一样强。他使用 Salsa20 流密码作为对内存进行哈希处理并将其反复写回内存的一种方式。他在没有任何正式设计理念的情况下做到了这一点;只是我随机读写RAM。
-
argon2的人采用与 scrypt 相同的想法(我们希望读取/写入大块内存以阻止 ASIC 和视频卡)。但他们一开始就明白,他们希望为 CPU 用户提供一切可能的优势。他们的散列算法使用已知最快的纯软件散列算法 - 仅使用 CPU 上快速的操作码。他们不使用任何可以给 ASIC 带来优势的东西。他们意识到他们希望以 内存带宽对 RAM 进行读写,而 PC 表现出色而 GPU 表现不佳。这就是它使用 Blake2b 散列的原因,这是已知最快的纯软件散列。 -
SHA3 在定制硬件中比 Blake2b 更快,但我们并没有试图让它在定制硬件上更快 - 我们试图让它在 CPU 上最快。