Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 我如何告诉我的用户他们';您输入了旧密码吗?_Security_Passwords - Fatal编程技术网

Security 我如何告诉我的用户他们';您输入了旧密码吗?

Security 我如何告诉我的用户他们';您输入了旧密码吗?,security,passwords,Security,Passwords,在阅读之后,我一直在想如何实现这样的特性 我当前正在用户表中存储密码 ID | Email | Pswd ------------------------------------------ 1 | bob@no.domain | Argon2ID hash salted 因此,我需要某种类型的password\u history表 UID | Pswd | Date | IP --------------

在阅读之后,我一直在想如何实现这样的特性

我当前正在用户表中存储密码

ID  | Email         | Pswd
------------------------------------------
1   | bob@no.domain | Argon2ID hash salted
因此,我需要某种类型的
password\u 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毫秒

这种方法似乎效率低下。我如何实现这一点

  • 测试更少的密码。此功能的大部分价值来自测试可能是最近的1或2个密码,或者可能是最近的一个和很久以前的一个密码。对用户进行任何测试都没有什么价值,可能会让他们面临更大的风险

  • 将密码哈希的强度调低一点。160毫秒的密码散列时间过长,并且可能会通过多次分布式登录尝试使服务器面临拒绝服务的风险


  • 是否要存储所有用户的旧密码?我想说的是,您可以更改加密方法,以减少使用较旧密码的时间。当用户更改为新密码时,您可以从用户处获取旧密码。如果您担心安全问题,存储所有用户的密码实际上不是一个好主意。也许仅仅存储最后两个密码就足够了。您可以向用户表中再添加两列并放弃密码历史记录表。您不应100%阻止用户使用旧密码,也不应警告用户重复使用密码。这种警告的最初概念来自这样一个世界,在这个世界上,安全人员将密码过期视为一种良好做法(现在已知为错误),并假设用户就像拥有完美内存的计算机。这个世界现在被认为是虚构的,2003年的旧NIST指南已经被抛弃,取而代之的是有利于用户的新指南。不要把恼人和安全混为一谈。@kks21199不,不能对旧密码使用较弱的加密格式!!它们和当前密码一样敏感。@Daskwuff我的意思是用与主密码相同的加密方式存储两个密码,但就我个人而言,我不认为必须存储旧密码并承担更多的保护责任有什么意义。