我想在 unix 机器上更改密码。我做了一个普通的“passwd”并输入了我的旧密码和新密码。
然后机器返回给我以下消息:
BAD PASSWORD: is too similar to the old one
这让我开始思考......这是否意味着机器在某处以明文形式存储了我的密码?不然应该不能比对新旧密码吧?或者是否有一个哈希函数可以实现?
我想在 unix 机器上更改密码。我做了一个普通的“passwd”并输入了我的旧密码和新密码。
然后机器返回给我以下消息:
BAD PASSWORD: is too similar to the old one
这让我开始思考......这是否意味着机器在某处以明文形式存储了我的密码?不然应该不能比对新旧密码吧?或者是否有一个哈希函数可以实现?
好的,所以我听从了Michael Hampton的建议并查看了pam_cracklib.c的代码,似乎 pam_cracklib 通过函数调用从 PAM 获取了旧的(又名当前的)密码(我认为完全可以,因为我只是输入当前密码进行身份验证),然后在旧密码和我刚输入的新密码之间进行相似性分析(距离函数)。
但它不会对其历史上的所有旧密码进行这种分析。那是不可能的,因为它们仅存储为散列。对于它们,只能检查它们是否相同。所以一切似乎都井井有条,就像我预期的那样,但现在我明白为什么会这样了……谢谢大家。
您的旧密码不会以明文形式存储。
相反,您的旧密码哈希
/etc/security/opasswd
由 PAM存储。然后,当您更改密码时,它会根据 PAM 配置中指定的内容进行比较。示例 PAM 配置:
在这里,
remember
让它记住 12 个以前的密码。有关更多详细信息,请参阅使用 pam_cracklib 的 Linux 密码安全性。
有些系统可以存储/计算熵(密码复杂度)并进行比较,我不知道 PAM 是否如此。