阅读this question on SO Security之后,我一直想知道如何实现这种功能。
我当前正在用户表中存储密码
ID | Email | Pswd
------------------------------------------
1 | bob@no.domain | Argon2ID hash salted
所以我需要某种password_history
表。
UID | Pswd | Date | IP
-------------------------------------------------------------------
1 | Argon2ID hash salted | 1454-01-05 21:18:01 | 127.0.0.1
如果用户密码与当前密码不匹配,请检索所有旧密码并进行验证。
这可能要花一些时间,因为Argon2ID密码验证大约需要160毫秒,具体取决于服务器。
10个旧密码x 160毫秒=仅1600毫秒的验证次数
此方法似乎效率低下。我该如何实施?
答案 0 :(得分:3)
测试更少的密码。此功能的大部分价值来自测试最新的1或2个密码,或者测试来自较久以前的最新密码。进行更多测试,只会给用户带来很少的价值,并且可能使他们面临更多风险。
稍微降低密码哈希的强度。 160毫秒的密码哈希过长,可能会使您的服务器通过多次分布式登录尝试而遭受拒绝服务的风险。