我正在使用bcrypt将密码存储在我的数据库中,使用 7 的工作系数,在我相当现代的笔记本电脑上散列一个密码大约需要 0.02 秒。
Coda Hale 说,使用 bcrypt 可以通过调整工作因子来“跟上摩尔定律”。但是没有办法重新加密用户的密码,因为我没有存储明文。如何使我的数据库保持最新并且难以破解(假设它存在 5 年以上,这将成为一个问题)?
我正在使用bcrypt将密码存储在我的数据库中,使用 7 的工作系数,在我相当现代的笔记本电脑上散列一个密码大约需要 0.02 秒。
Coda Hale 说,使用 bcrypt 可以通过调整工作因子来“跟上摩尔定律”。但是没有办法重新加密用户的密码,因为我没有存储明文。如何使我的数据库保持最新并且难以破解(假设它存在 5 年以上,这将成为一个问题)?
登录时重新加密。请参阅最佳 bcrypt 工作因子。
请记住,该值存储在密码中:
$2a$(2 chars work)$(22 chars salt)(31 chars hash)
。它不是一个固定值。如果你发现负载太高,那就让它下次登录时,你加密到更快的计算。同样,随着时间的推移,您会获得更好的服务器,如果负载不是问题,您可以在他们登录时升级其哈希强度。
诀窍是让它与摩尔定律一起在未来永远花费大致相同的时间。数字是 log2,所以每次计算机速度翻倍,默认数字加 1 ...