我的一个SaaS软件供应商要求我每90天更改一次密码,这很好。
令我感到惊讶的是,密码更改屏幕错误,注明了new password is too similar to an old password.
如果我在密码中更改少于三个或四个字符,则最常发生这种情况。
如果它与旧密码完全匹配,我会相信他们正在哈希我的密码,并比较哈希。 "相似性"匹配使我认为他们正在存储和比较明文版本。
是否可以确定"相似性"通过将一个哈希与另一个哈希进行比较,或者该供应商是否更有可能以纯文本形式存储我的密码?
答案 0 :(得分:6)
这是可能的。无论何时更改密码,软件都可以为相同密码的所有组合创建哈希码,并隐藏或删除一些字符。
如果您的密码为hello
,则可以为_ello
,h_llo
,he_lo
,hel_o
,hell_
,{创建哈希码{1}},__llo
,_e_lo
,_ell_
,he_l_
...等等。
下次更改密码时,它可以创建该密码的同一组合,并与之前的所有哈希代码进行比较。如果匹配,则只更改几个字符。
当然,以纯文本格式保存密码要简单得多。
答案 1 :(得分:3)
他们很可能存储纯文本。使用良好的散列算法,原始内容和散列值之间应该没有相关性(这就是它的优点)。
他们可能会存储原始密码的一些特征以用作参考。例如字符数,任何数字值等,然后与之比较,但我对此表示怀疑。
答案 2 :(得分:1)
这取决于他们是在检查所有旧密码,还是只检查最后一个。
如果您必须输入旧密码才能设置新密码,那么最后一个将在内存中可用。表单通常要求输入三个:旧密码,新密码和确认新密码。
如果他们以散列形式存储您的最后几个密码,他们可以检查这些密码是否完全匹配,他们可以使用您刚刚重新输入的旧密码使用算法检查您之前的密码是否相似。