Это действительно скорее дополнение к умному ответу @ Брайана. Снимаю шляпу перед @Martijn Pieters за добавление подробностей о том, как перебрать старые пароли на основе текущего, и у @ratchet freak за «расстояние Хэмминга». Я не удаляю свой ответ, потому что я думаю, что он обеспечивает интересную основу для их поддержки.
Современное хранилище паролей требует использования нескольких циклов надежного одностороннего криптографического хэша (SHA-512 +) с уникальной солью (128 бит +) для каждого пользователя. Но не поддавайтесь искушению хранить дополнительную информацию о каждом пароле. Чем больше информации вы будете хранить о каждом пароле, тем больше вы подрываете безопасность вашего алгоритма хеширования.
пример
Подумайте, как легко взломать пароль, если вы знаете, что:
- Это 7 символов в длину
- Символы 3-5 в верхнем регистре (4 ниже)
- 1 и 7 числа
- 6 является символом
Американская клавиатура имеет 95 печатаемых символов, поэтому, зная, что пароль длиной 7 символов, получается 95 ^ 7 = 69 833 729 610 000 = 7x10 ^ 13 перестановок. Если бы это было действительно случайно, то на взлом одного процессора 3Ghz потребовался бы год. Но:
- Есть только 26 заглавных и 26 строчных букв
- Есть только 10 цифр, дающих 100 возможностей для этих двух чисел
- Всего 32 символа
Итак (исправлено благодаря @Hellion):
26^4 (charcters 2-5 are known upper or lower-case)
x 100 (characters 1 & 7 are digits)
x 32 (character 6 is a symbol)
====
1,462,323,200 possible passwords.
Это в 50000 раз легче взломать! Хранение полезной информации для предотвращения подобных паролей в этом случае заняло у вас время взлома 7-символьного пароля с года до пары часов. Расшифровка всех ваших паролей на мощном многопроцессорном рабочем столе с хорошей видеокартой и небольшим терпением теперь вполне осуществима. Я надеюсь, что этот простой пример демонстрирует, что чем более содержательно вы сможете сравнить похожие пароли, тем менее безопасным будет ваше хеширование.
Важность сильного хеширования
Базы данных с паролями регулярно крадут, с огромными взломами в новостях каждый месяц. Черт, только в прошлом месяце штат SC потерял все номера социального страхования - упс! Сколько еще этих нарушений скрыто?
Заключительная мысль
Самое страшное для меня - это когда люди выбирают один и тот же или похожий пароль для нескольких сайтов, так что взлом одного дает злоумышленнику доступ ко всем им. Мне бы хотелось увидеть проверенный метод предотвращения такой ситуации, хотя я думаю, что предотвращение наиболее распространенных неверных паролей могло бы помочь не только тому, чтобы отдельный пользователь мог повторно использовать свой неверный пароль на том же сайте. Лучшее, что я могу предложить, - это политика всей компании по использованию безопасного менеджера паролей, который генерирует очень случайные пароли для каждого из ваших пользователей и надежно сохраняет их.