我想知道使用bcrypt比基于一些加密哈希函数(如SHA-1 (或SHA-3) )的迭代和盐渍KDF的优点是什么?我想bcrypt的作者选择Blowfish (一种分组密码)是出于一个严重的原因,但我们几乎无法用SHA-1/SHA-3 (一个哈希函数)代替它。这种做法有什么问题呢?非哈希函数所带来的分组密码带来的安全属性是什么?
发布于 2019-07-07 00:07:17
bcrypt KDF不按原样使用整个块密码。它依赖于其密钥计划的修改版本。这是很重要的,因为河豚,不像其他许多密码,有一个非常昂贵的密钥时间表。它需要大约四千字节的快速内存,与SHA-1相比,SHA-1非常轻,几乎可以在x86寄存器中完全计算。尽管bcrypt不像其他像Argon2这样的现代KDF那样内存困难,但它在当时还是相当不错的,而且在许多方面仍然比PBKDF2好,后者在内部使用像SHA-1或SHA-2家族的散列函数。
有关内存硬度好的更多信息,请参见为什么一个人不能在库达实现bcrypt?。这就解释了为什么你不能从具有bcrypt的GPU的大规模并行中获得如此多的信息。另外还有Thomas在其他地方发布的精彩的答案,它更详细地介绍了bcrypt的安全性。
发布于 2019-07-04 13:33:22
要了解作者的意思,最好的办法可能是阅读他们介绍bcrypt:https://www.usenix.org/legacy/event/usenix99/provos/provos.pdf的原始论文。
我认为比较bcrypt和例如pbkdf2对bcrypt不太公平,因为它是一个早期的构造,并且像可调整的迭代次数这样的想法实际上是受到bcrypt的启发。
https://crypto.stackexchange.com/questions/71727
复制相似问题