Page 1 of 1

Spring-Security 中的占空比也应该默认

Posted: Thu Jan 30, 2025 7:14 am
by suchona.kani.z
然而,具有较高内存要求的方法的优点是,它们不能轻易地使用专用硬件进行暴力破解,因为 FPGA 通常只有少量内存。例如,Bcrypt 就具有更高的内存要求。

Bcrypt 于 1999 年在 Usenix 会议上推出,专为散列密码而设计。它使用 Blowfish 加密。这是一种多轮对称加密方法。每轮都会派生出一个新密钥。 Bcrypt 现在利用了这样一个事实:轮密钥的密钥派生是资源密集型的。它使用从要散列的密码和盐派生的轮密钥对固定明文“OrpheanBeholderScryDoubt”进行加密。为此,要散列的密码首先与 128 位盐连接。通过参数cost来控制轮数,因此这里也可以响应计算性能的提高。然后重复该过程2次。此外,Blowfish 加密进行了调整,因此需要更多内存,并且优化不太适用于 GPU 和 FPGA,这比 PBKDF2 具有优势。

1999 年的参数建议值为 6 到 8 之间,而如今(截至 2020 年底)默认值为 10,OWASP 基金会建议将其增加到 12。这种简单的参数化和明确的建议使 Bcrypt 成为值得推荐且易于使用的方法。

增加。与 PBKDF2 类似,Bcrypt 的用法如下:


然而,Bcrypt 创建的字符串与 PBKDF2 中已知的字符串的 平面设计电子邮件列表 形式略有不同,如下所示:


该字符串包含使用的 Bcrypt 的以 $ 分隔的版本 2a、使用的工作因子以及 Base64 编码的盐和实际哈希值。它包含使用哈希验证密码所需的所有内容,也可以存储在数据库中。

在 4 KB 时,内存要求比 PBKDF2 更大,但仍然相对较低。 Bcrypt 的后继者参加了密码哈希竞赛。然而,这场比赛最终由Argon2获胜。

氩气2
2015 年密码哈希竞赛的获胜者是 Argon2。该方法通过创建一个大的内部向量来确保更好的内存利用率,从而使使用专用硬件的暴力攻击的优化潜力较小。内部使用 Blake2b 哈希函数。 Argon2 有多个版本:

Argon2d:对内部向量的索引访问依赖于密码或盐,因此容易受到缓存定时旁路攻击。运行时用于测量向量中的哪些条目可以被缓存(后端服务器和加密货币中的某些应用程序)。
Argon2i:索引访问独立于所提供的秘密而发生,因此具有侧通道抗性,但可以在专用硬件(例如硬盘加密中的应用)上进行更好的优化。
Argon2id: 2017 年的混合版本,比 Argon2d 更不容易受到侧通道泄漏的影响,并且比 Argon2i 更好地防止专用硬件的优化。
所有变体都提供三种不同的参数化选项:

内存 m:要使用的内存(以 KB 为单位)
并行度p:可以并行使用的线程数
迭代次数 t:影响计算时间
原论文没有对这些参数提供任何具体的建议。所有参数值应选择尽可能高的。