我不得不破解我的密码,因为我用的是bcrypt。通过遵循一个教程,我发现了以下代码:
const saltRounds = 10;
bcrypt.hash(password, saltRounds).then(hashedPassword => {
//...
}我在谷歌上搜索了什么是saltRound以及它的恰当之处,直到我在这里发现What are Salt Rounds and how are Salts stored in Bcrypt?,您可以控制密码散列所需的时间。
这是否意味着您只需使用一个属性saltRounds就可以控制加密密码的强度?
发布于 2022-06-15 22:17:03
是的,为bcrypt做更多的工作确实会增加密码安全性。增加工作因素的总体目的是提供这种增加。
更高的bcrypt工作因素改善了单个用户级别的密码安全性,因为很难单独破解每个用户的散列(如果攻击者只对一个特定帐户感兴趣)。没有散列/因素可以保护非常弱的密码,但是更强的散列更有可能通过较弱/中间的密码强度范围来“向下”扩展保护。
更强的工作因素还会在总体安全级别(针对整个目标用户集)增加密码安全性。这是因为更高的bcrypt工作因素使得同时攻击整个集合变得更加困难--特别是随着用户数量的增加。所需的计算/核心/内存越多,对攻击者来说(在时间和资源上)就越昂贵。
当然,交换条件是,攻击者需要做更多的工作(更难破解),这也意味着维护者/维护者的工作量更大(有效身份验证所需的资源成本更高)。重要的是将工作因素调整为您和您的用户都能容忍的最高水平,包括“身份验证风暴”这样的最坏情况(您的所有用户都需要同时进行身份验证)。bcrypt成本为12,目标用户延迟为.5秒,通常是这些因素的一个很好的平衡,但您需要评估(并测试!)这是你自己的用例。
额外建议:确保您的库和支持代码能够同时支持多成本。随着硬件变得更快,您将希望增加新密码/重置密码的工作因数,同时支持现有密码。幸运的是,大多数库都以透明的方式处理这个问题--但是,还是要为您自己的用例进行测试。
https://stackoverflow.com/questions/72630584
复制相似问题