UNIXマシンでパスワードを変更したかった。通常の「passwd」を実行し、古いパスワードと新しいパスワードを入力しました。
その後、マシンは次のメッセージで私に戻ってきました:
BAD PASSWORD: is too similar to the old one
それは私に考えさせられました...それは、マシンがどこかにクリアテキストで私のパスワードを持っているということですか?そうしないと、古いパスワードと新しいパスワードを比較できないはずですよね?それとも、それを可能にするハッシュ関数はありますか?
OK、それで私は Michael Hampton の提案に従い、 pam_cracklib.c のコードを調べましたが、pam_cracklibが古い(現在の)パスワードを取得しているようです。 PAMは関数呼び出し(認証のために現在のパスワードを入力したばかりなので、完全に問題ないと思います)を介して、古いパスワードと入力したばかりの新しいパスワードの間で類似性分析(距離関数)を実行します。
ただし、履歴内のすべての古いパスワードに対してこの分析を行うわけではありません。それらはハッシュとしてのみ保存されるため、それは不可能です。彼らにとっては、それらが同じであるかどうかのチェックしかありません。思った通り、すべて順調に見えますが、なぜなのかわかりました…ありがとうございました。
古いパスワードはプレーンテキストで保存されません。
代わりに、古いパスワードハッシュはPAMによって/etc/security/opasswd
に保存されます。次に、PAM構成で指定されている内容に基づいて、パスワードを変更するときに比較を行います。
PAM構成の例:
password required pam_unix.so sha512 remember=12 use_authtok
ここで、remember
により、12個の以前のパスワードが記憶されます。
詳細については、 pam_cracklibを使用したLinuxパスワードセキュリティ を参照してください。
一部のシステムでは、エントロピー(パスワードの複雑さ)を保存/計算して比較できますが、PAMの場合かどうかはわかりません。