在我工作的一家公司,我必须每 90 天更改一次密码,并且只能在 8 次迭代后重复使用密码。这种不可重复使用包括密码与旧密码过于相似,例如,当我只更改一个字母时,新密码不被接受。
这是否意味着他们以明文形式存储此密码?这对我来说似乎是相当糟糕的做法。或者是否有一些允许相似性比较的哈希函数?
在我工作的一家公司,我必须每 90 天更改一次密码,并且只能在 8 次迭代后重复使用密码。这种不可重复使用包括密码与旧密码过于相似,例如,当我只更改一个字母时,新密码不被接受。
这是否意味着他们以明文形式存储此密码?这对我来说似乎是相当糟糕的做法。或者是否有一些允许相似性比较的哈希函数?
不,这并不意味着他们以纯文本形式存储密码。这个问题并没有完全描述这种行为。它们是仅与您当前密码中的模式匹配,还是与您以前的所有8 个密码中的模式匹配?
如果是第一种情况,答案很简单,这是因为它们有 8 个以前密码的哈希值进行比较,当你更改密码时,你输入当前密码和新密码,然后他们现在将这两者都以纯文本形式比较模式。这更可能是正在发生的事情。
如果是第二种情况,还有其他几种方法可以做到这一点,包括以加密(而不是散列)格式存储密码,以便可以解密和比较它们,或者存储您的模式(或掩码)密码以及哈希值,然后禁止与任何旧掩码匹配的新密码。可以说,这些选项不如仅存储哈希值那么安全,但这不应该让您特别担心......这对企业来说是风险而不是对您来说,如果他们认为这是可以接受的风险,那么这就是他们的决定。您唯一关心的问题(无论贵公司的密码政策如何,这应该始终请注意)是确保您用于工作网络的密码与您在其他地方使用的密码不同,因此您的工作密码的泄露不会危及您的个人帐户,反之亦然。
根据定义,哈希不应允许您查找它是否与其他内容相似。
来自维基百科:
您是否测试过系统是否真的验证了此规则?如果不以可恢复的格式存储密码(例如明文或使用对称密钥加密),我想不出办法做到这一点
我能想到几个选项
最有可能的是,他们存储的密码是加密的而不是散列的。这不像使用强哈希算法的哈希那样安全,但只要加密密钥得到适当保护,它就不成问题
另一种可能的选择是在输入时将新密码与之前的密码进行比较。您可以使用忘记密码功能或尝试使用与前一个密码相似但不是最后一个密码的密码来检查这是否属实
其他选项是获取新密码并执行一些排列、替换、附加和/或减去一些字符,然后对修改后的密码进行散列并与以前的散列进行比较。它与在更改密码时存储类似密码的哈希值基本相同,但由于需要空间来存储这么多哈希值,这可能是不可行的
最后一个选项是使用明文密码。不用说它有多不安全