Несколько раз я пытался изменить пароль пользователя на разных машинах Linux, и когда новый пароль был похож на старый, ОС жаловалась, что они слишком похожи.
Я всегда задавался вопросом, как система узнает об этом? Я думал, что пароль сохраняется как хеш. Означает ли это, что когда система может сравнить новый пароль на предмет сходства, старый пароль фактически сохраняется в виде простого текста?
Ответы:
Поскольку при использовании вам необходимо указывать как старый, так и новый пароль
passwd
, их можно легко сравнить в открытом тексте, в памяти, не записывая их где-нибудь на диске.Действительно, ваш пароль хэшируется, когда он наконец сохраняется, но пока это не произойдет, инструмент, в котором вы вводите свой пароль, может, конечно, просто получить к нему доступ напрямую, как любая другая программа, может получить доступ к вещам, которые вы вводили на клавиатуре, когда он читал из STDIN.
Это особенность системы PAM, которая используется в фоновом режиме
passwd
инструмента. PAM используется в современных дистрибутивах Linux.Более конкретно,
pam_cracklib
это модуль для PAM, который позволяет отклонять пароли на основании нескольких недостатков, которые делают их очень уязвимыми.Не только пароли, которые слишком похожи, могут считаться небезопасными. Исходный код имеет различные примеры того , что можно проверить, например , является ли пароль палиндром или то , что изменить расстояние между двумя словами. Идея состоит в том, чтобы сделать пароли более устойчивыми к атакам по словарю.
Смотрите также на
pam_cracklib
страницу руководства.источник
По крайней мере, в моем Ubuntu "слишком похожие" сообщения появляются
когда: «... более половины символов - это разные ....» (подробности см. ниже).благодаря поддержке PAM, как четко объяснено в ответе @slhck.Для другой платформы, где PAM не используется, появляются «слишком похожие» сообщения, когда: «... более половины символов - это разные ....» (подробности см. Ниже)
Чтобы дополнительно проверить это утверждение самостоятельно, можно проверить исходный код. Вот как.
Программа passwd входит в состав пакета passwd:
Поскольку мы имеем дело с технологиями с открытым исходным кодом, у нас есть неограниченный доступ к исходному коду. Получить это так же просто, как:
После этого легко найти соответствующий фрагмент кода:
Быстрая проверка в "obscure.c" выдает это (я вырезал и вставил только соответствующий фрагмент кода):
Итак, теперь мы знаем, что есть «похожая» функция, которая на основе старых и новых проверяет, схожи ли оба. Вот фрагмент:
Я не рассматривал код C Я ограничил себя в доверии к комментарию как раз перед определением функции :-)
Различие между платформами, поддерживающими PAM и NON-PAM, определено в файле "obscure.c", который имеет следующую структуру:
источник
passwd
запрашивает как старые, так и новые пароли, является ответом . Остальная часть этого ответа не имеет отношения к делу.Ответ гораздо проще, чем вы думаете. На самом деле, это почти квалифицируется как магия, потому что как только вы объясните хитрость, она исчезнет:
Он знает, что ваш новый пароль похож ... Потому что вы ввели старый пароль всего минуту назад.
источник
Хотя другие ответы верны, стоит упомянуть, что вам не нужно указывать старый пароль, чтобы это работало!
Фактически, можно создать группу паролей, аналогичную введенному вами новому паролю, хэшировать их, а затем проверить, совпадает ли какой-либо из этих хэшей со старым. Если это так, то новый пароль оценивается как старый! :)
источник
n
), то есть62 * (n!)/(6 * (n - 3)!)
, что равно 13540 для пароля длиной 12 символов. Но если кто-то думает о чем-то другом, уравнение бесполезно, так зачем беспокоиться?Один аспект не был покрыт: история паролей. Некоторые системы поддерживают это. Для этого он хранит историю паролей и шифрует их с помощью текущего пароля. Когда вы меняете свой пароль, он использует «старый» пароль для расшифровки списка и проверки. И когда он устанавливает новый пароль, он сохраняет список (снова) зашифрованный ключом, полученным из нового пароля.
Вот как
remember=N
работает в PAM (хранится в/etc/security/opasswd
). Но также Windows и другие поставщики Unix предлагают аналогичные функции.источник