Я хотел изменить свой пароль на машине unix. Я сделал обычный пароль и ввел свой старый и новый пароль.
Затем машина вернулась ко мне со следующим сообщением:
BAD PASSWORD: is too similar to the old one
Это заставило меня задуматься ... Значит ли это, что на машине где-то есть мой пароль в виде открытого текста? В противном случае он не сможет сравнивать старый и новый пароль, верно? Или есть хеш-функция, которая позволяет это сделать?
Хорошо, поэтому я последовал предложению Майкл Хэмптон и пошел и посмотрел код pam_cracklib.c и кажется, что pam_cracklib получает старый (он же текущий) пароль из PAM через вызов функции (что я считаю полностью нормальным, поскольку я только что ввел текущий пароль для аутентификации), а затем выполняет анализ сходства (функция расстояния) между этими старый пароль и новый, который я только что ввел.
Но он не делает этот анализ для всех старых паролей в своей истории. Это невозможно, потому что они хранятся только как хэши. Для них может быть только проверка, совпадают ли они. Так что вроде все в порядке, как я и ожидал, но теперь я понимаю, почему ... спасибо всем.
Ваши старые пароли не хранятся в виде обычного текста.
Вместо этого ваш старый пароль хеши хранятся в /etc/security/opasswd
пользователя PAM. Затем он выполняет сравнение, когда вы меняете пароль, на основе того, что было указано в конфигурации PAM.
Пример конфигурации PAM:
password required pam_unix.so sha512 remember=12 use_authtok
Вот, remember
заставляет его запомнить 12 предыдущих паролей.
Подробнее см. Безопасность паролей Linux с помощью pam_cracklib.
Некоторые системы могут хранить / вычислять энтропию (сложность пароля) и сравнивать их, я не знаю, относится ли это к PAM.