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