当我在某些网络服务器(如电子邮件、云和社交网络)上更改我的密码并尝试使用我以前的密码时,服务器会拒绝它并显示消息“不要使用你以前的密码”。
这是否意味着服务器存储了我以前的密码?那怎么安全?
当我在某些网络服务器(如电子邮件、云和社交网络)上更改我的密码并尝试使用我以前的密码时,服务器会拒绝它并显示消息“不要使用你以前的密码”。
这是否意味着服务器存储了我以前的密码?那怎么安全?
哈希函数是确定性的;相同的输入总是产生相同的输出。他们可以存储您旧密码的先前哈希值,并将它们与您建议的新密码的哈希值进行比较。为了实现这一点,他们还需要至少存储盐值。这意味着您在此站点中的盐和其他参数必须相同。
正如迈克尔指出的那样
旧密码的盐不必与新密码相同。
这样,您可以使用不同的盐和其他参数。这可以被认为比通过增加存储重用盐更安全。
从这里开始,没有服务器端代码,我们不能说更多。
大多数情况下,您必须重新进行身份验证才能更改密码。在这种情况下,后端可以
将明文(旧)密码与明文(新)密码与Levenshtein等指标进行比较,以防止密码更改,如
S3cur3Pa55w0rd_1 -> S3cur3Pa55w0rd_2
可能是的,在实践中未知,假设他们这样做。
网站可能存储一个或多个旧密码(或者,如果它们有三个工作脑细胞,密码哈希)的原因有很多。
最常见的是它会存储更改前的最后一个密码/哈希,以防您打电话说“密码更改不是我”。在这种情况下,他们可以恢复以前的密码,这比重置为新密码更好。
第二个常见的事情是您描述的情况 - 密码策略指出您的密码不能等于您使用的最后 n 个密码。为了验证这一点,需要将最后 n 个密码或其哈希值存储在单独的数据库表中(因此它们可能包含在数据泄露中,也可能不包含在数据泄露中)。
最后,密码/哈希可能存在于各种日志文件、调试转储、备份和其他辅助数据存储中。
由于您很少深入了解您使用的网站的实施细节,您很可能永远不会知道。因此,您应该假设他们可能会这样做。