是否有比 bcrypt 和 scrypt 更现代的密码散列方法?

信息安全 密码 密码管理 bcrypt pbkdf2 加密
2021-08-27 15:48:36

这个问题让我再次开始思考密码哈希。我目前使用bcrypt(特别是py-bcrypt)。我听说过很多关于PBKDF2scrypt的信息。

我想知道是否有任何我可能不知道的“更现代”的密码哈希方法(因为它们是新的,所以人们不怎么谈论它们),或者我不知道的其他方法知道关于。

然后从那里继续,我应该使用哪一个?大多数人似乎都推荐 bcrypt,但我想知道这是否只是因为它很旧(阅读:众所周知)。scrypt 似乎更好(可变的内存使用量)。我对 PBKDF2 了解不多。

因此,如果我正在制定用户管理方案,我应该使用哪一个?还是我应该使用完全不同的东西?

2个回答

在密码学中,“新”不是“好”的同义词。那个 bcrypt 已经有 12 年历史了(12 年......真的是“老”吗?)只是意味着它持续了12 年的公开曝光和广泛使用而没有被破坏,所以它必须非常强大。根据定义,“较新”的方法不能吹嘘那么多。作为一名密码学家,我会说 12 岁正好是合适的年龄,任何比 5 岁小的年龄对于一般部署来说绝对“太年轻”(当然,这些估计取决于算法的曝光程度得到;早期、广泛的部署,虽然对那些决定部署的人来说是有风险的,但将大大有助于建立对安全的信心——或在早期阶段揭示弱点)。

Scrypt bcrypt更新得多它可以追溯到 2009 年。这个想法非常聪明。也就是说,缓慢的密码处理意味着字典攻击对攻击者来说成本要高出N倍,而对于诚实的系统来说,正常处理的成本要高出N'倍。理想情况下,N = N'scrypt 作者认为,使用 PBKDF2 或 bcrypt,使用 ASIC 允许攻击者获得比N '低得多的 N(换句话说,攻击者可以使用专门的硬件,因为他只对破解密码感兴趣,因此每秒散列的密码比诚实系统多得多)。为了解决这个问题,scrypt 依赖于一种需要大量 RAM 的算法,因为快速访问 RAM 是 PC 的专长,也是 ASIC 设计的痛点。scrypt 在该领域的成功程度还有待衡量;2009 年是最近的时间,scrypt 作者给出的数字是基于 130 nm ASIC 技术和“5 秒处理价值”的假设,这远远超出了普通用户准备等待的时间。

对于现在的实际使用,我推荐 bcrypt。

尽管有 Scrypt,但目前对密码处理概念的研究更多的是关于允许不仅仅是密码验证的特殊转换。例如,SRP协议允许使用基于密码的相互身份验证的加密密钥协议,并且可以抵御字典攻击(即使在攻击者主动冒充客户端或服务器的情况下);这需要一些数学结构,并且 SRP 中的密码散列涉及模幂运算。

现在是 2016 年,所以值得重新审视这个 5 年前的问题。从 2013 年到 2016 年进行密码哈希竞赛,接受了 24 份提交,并选择Argon2作为其推荐的密码哈希算法。

托马斯所说的关于新与好的一切仍然适用。就在 2016 年 2 月(比赛结束后),Argon2 对其进行了小改动(版本 1.3),以加强它以克服一个小弱点。所以我现在还不会自动跳上它,但它的工作是将它保持在一个人的眼角,因为 Argon2 很可能在未来几年变得更加普遍。