如何告诉我的用户他们输入了旧密码?
How can I tell my users that they've entered an old password?
阅读this question on SO Security后,我一直在想如何实现这样的功能。
我目前正在用户 table
中存储密码
ID | Email | Pswd
------------------------------------------
1 | bob@no.domain | Argon2ID hash salted
所以我需要某种 password_history
table。
UID | Pswd | Date | IP
-------------------------------------------------------------------
1 | Argon2ID hash salted | 1454-01-05 21:18:01 | 127.0.0.1
如果用户密码与当前密码不匹配,检索所有旧密码并验证所有密码。
这可能需要一些时间,因为 Argon2ID 密码验证需要大约 160 毫秒,具体取决于服务器。
10 个旧密码 x 160 毫秒 = 仅验证 1600 毫秒
这个方法好像效率不高。我该如何实现?
测试较少的密码。此功能的大部分价值来自于测试最近的 1 或 2 个密码,或者最近的一个和一个更早以前的密码。超出此范围的测试对用户的价值微乎其微,并可能使他们面临更多风险。
稍微降低密码哈希的强度。 160 毫秒的密码哈希过长,可能会使您的服务器因多次分布式登录尝试而面临拒绝服务的风险。
阅读this question on SO Security后,我一直在想如何实现这样的功能。
我目前正在用户 table
中存储密码ID | Email | Pswd
------------------------------------------
1 | bob@no.domain | Argon2ID hash salted
所以我需要某种 password_history
table。
UID | Pswd | Date | IP
-------------------------------------------------------------------
1 | Argon2ID hash salted | 1454-01-05 21:18:01 | 127.0.0.1
如果用户密码与当前密码不匹配,检索所有旧密码并验证所有密码。
这可能需要一些时间,因为 Argon2ID 密码验证需要大约 160 毫秒,具体取决于服务器。
10 个旧密码 x 160 毫秒 = 仅验证 1600 毫秒
这个方法好像效率不高。我该如何实现?
测试较少的密码。此功能的大部分价值来自于测试最近的 1 或 2 个密码,或者最近的一个和一个更早以前的密码。超出此范围的测试对用户的价值微乎其微,并可能使他们面临更多风险。
稍微降低密码哈希的强度。 160 毫秒的密码哈希过长,可能会使您的服务器因多次分布式登录尝试而面临拒绝服务的风险。