我想在 unix 机器上更改密码。我执行了常规“passwd”,然后输入了旧密码和新密码。
然后机器回复了我以下信息:
BAD PASSWORD: is too similar to the old one
这让我开始思考...这是否意味着机器在某处以明文形式保存了我的密码?否则它就无法比较旧密码和新密码,对吧?或者是否存在可以实现这一点的哈希函数?
答案1
好的,所以我按照迈克尔·汉普顿然后去查看了pam_cracklib.c并且似乎 pam_cracklib 通过函数调用从 PAM 获取旧密码(即当前密码)(我认为这完全没问题,因为我刚刚输入了当前密码进行身份验证),然后在旧密码和我刚刚输入的新密码之间执行相似度分析(距离函数)。
但是它不会对历史记录中的所有旧密码进行这种分析。这是不可能的,因为它们仅以哈希形式存储。对于它们,只能检查它们是否相同。所以一切似乎都井然有序,就像我预期的那样,但现在我明白了为什么会这样......谢谢大家。
答案2
您的旧密码不会以纯文本形式存储。
相反,你的旧密码哈希存储在/etc/security/opasswd
PAM 中。然后,当您更改密码时,它会根据 PAM 配置中指定的内容进行比较。
PAM 配置示例:
password required pam_unix.so sha512 remember=12 use_authtok
这里,remember
让它记住12个以前的密码。
有关详细信息,请参阅使用 pam_cracklib 实现 Linux 密码安全。
答案3
有些系统可以存储/计算熵(密码复杂性)并进行比较,我不知道 PAM 是否也是如此。