我已经阅读了关于 Bcrypt 或 PDBKF2 是否是更好的密钥派生散列方法的各种意见。答案似乎取决于很多不容易分析的复杂因素。是否会同时使用它们(可能以串行方式一个在另一个之前)累积两者的好处,从而实现最佳安全解决方案?
一起使用 Bcrypt 和 PBKDF2 有意义吗?
信息安全
密码
哈希
密钥生成
bcrypt
pbkdf2
2021-08-27 11:09:53
1个回答
混合这两个功能并没有真正的帮助。Bcrypt 和 PBKDF2 都具有可配置的成本:您应该将迭代次数设置为在您的情况下仍然可以容忍的最大值,考虑到可用的硬件和环境限制(例如平均用户耐心)。如果你想同时使用这两个功能,那么它们必须共享相同的 CPU 预算;换句话说,与单独在任一函数中使用的迭代次数相比,您将不得不减少迭代次数。
因此,您不会以这种方式获得更强大的东西;相反,您获得的安全级别是单独使用 Bcrypt 或单独使用 PBKDF2 可获得的平均安全级别。
将两个散列函数或类似函数组合在一起可以很好地避免灾难性故障,如果一个结果被破坏;但是,假设 Bcrypt 和 PBKDF2 都很强大,问题主要是关于性能的(bcrypt 和 PBKDF2 都是为了让穷举搜索变慢,所以这都是关于性能的)。为了获得最佳的慢度,结合 bcrypt 和 PBKDF2并不是一个好主意。
对于 bcrypt 和 PBKDF2 之间的选择,请参阅这个先前的答案。总结一下:
如果您的硬件类似于 PC(即有几千字节的 RAM 并且可以快速访问),那么 Bcrypt 会更好。与 PBKDF2 相比,如果使用 bcrypt,攻击者更难使用 GPU 优化穷举搜索。
PBKDF2 有 NIST 的祝福(它已获得批准,带有一个大“A”)。NIST 对 bcrypt 只字未提。
Bcrypt 输出 192 位,这对于密码验证令牌来说很好,或者如果您只需要 192 位(或更少)的密码派生密钥材料。另一方面,PBKDF2 是一个密钥派生函数,可以生成任意多的位,如果您需要超过 192 位的密钥材料,这很好。
其它你可能感兴趣的问题