我并不真正了解有关散列算法强度的最新发展;目前我存储密码的最佳选择是什么?
此外,加盐和密钥拉伸可以为我提供多少安全性?
至于散列提供的额外安全性,这取决于您使用多少散列迭代。例如,假设您决定使用 2^14 次哈希迭代。这将密码的熵增加了 14 位。根据摩尔定律,哈希提供的每多一点熵意味着在与今天相同的时间内破解密码大约需要额外的 18 个月。因此,要在今天破解原始密码的同时破解迭代哈希将需要 21 年(14 x 18 个月)。
salting 提供的额外安全性是双重的:它阻止了彩虹表的有效使用,并且使得破解大量密码列表(但不是单个密码)变得更加耗时。
security.stackexchange 上的这个问题很好地讨论了 bcrypt 与 PBKDF2 -是否有安全专家推荐 bcrypt 用于密码存储?
关键是散列函数本身并不能防止预计算攻击(例如彩虹表)。添加盐不会保护您免受字典或暴力攻击。使用 bcrypt 或 PBKDF2 比使用散列算法构建自己的方案要好得多。