zxcvbn. Оценщик надежности пароля
В исходном дистрибутиве установлено по умолчанию: да.
Связанные компоненты: отсутствуют.
Схема размещения:
ext
.
Библиотека zxcvbn
предоставляет альтернативный к синтаксическим (например, количество символов, количество заглавных букв) проверкам способ проверки сложности пароля. Основные задачи библиотеки:
- отсечь простые для подбора пароли, которые могут пройти классические методы оценки сложности пароля;
- принять пароли, сложные для подбора, но которые не пройдут классически методы оценки сложности пароля, а также просты для запоминания.
Библиотека использует:
- словарь самых распространенных паролей.
- частотный словарь имен и фамилий США.
- словарь английского языка.
Библиотеку можно использовать совместно с другими механизмами проверки пароля.
Параметры конфигурации
Параметр | Описание | Тип | POSIX шаблон | Ограничение значения | Значение по умолчанию | Аналог в pg_pp_policy |
---|---|---|---|---|---|---|
password_policy.use_password_strength_estimator | Включение использования библиотеки zxcvbn для оценки сложности пароля | boolean | on /off | on /off | on | usepasswordstrengthestimator |
password_policy.password_strength_estimator_score | Минимальная оценка сложности пароля | integer | [0-4] | 0-4 | 3 | passwordstrengthestimatorscore |
Алгоритм работы библиотеки zxcvbn
-
Из введенного пароля выделяются словарные слова или популярные парольные фразы. При этом учитываются возможные замены символов (o → 0, A → 4, l → |).
-
Вычисляется, что может быть известно злоумышленнику, укравшему кеш пароля. Рассматривается комбинация словарных слов и оставшихся символов. Примеры:
rrrrr
– нужно перебрать 26 вариантов повторяющейся буквы.correcthorsebatterystaple
– нужно перебрать все варианты фраз из 4 слов общей длинной 25 символов.Tr0ub4dour&3
– нужно перебрать все варианты слов длинной 10 символов + 2 случайных символа.
-
Количество попыток делится пополам, для получения среднего количества слов из словаря, которые нужно проверить злоумышленнику.
-
Вычисляется сложность пароля.
Проверка сложности пароля с использованием библиотеки zxcvbn
Для проверки сложности пароля требуется включить функциональность проверки пароля и использование библиотеки zxcvbn
.
Сложность пароля оценивается количеством итераций, необходимых для подбора пароля:
Сложность | Описание |
---|---|
0 | Слишком простой пароль (< 10^3) |
1 | Скорее подби раемый (< 10^6) |
2 | Возможно подбираемый (< 10^8) |
3 | Надежный пароль (< 10^10) |
4 | Очень надежный пароль (>= 10^10) |
Минимальная сложность пароля для парольной политики указывается в поле passwordstrengthestimatorscore
таблицы pg_pp_policy
и в параметре password_policy.password_strength_estimator_score
(см. раздел «Парольные политики» документа «Функциональное администрирование»).
Недостатки библиотеки zxcvbn
К недостаткам библиотеки zxcvbn
относятся:
- малое количество используемых словарей, общеупотребимых фраз, индексов;
- нет обработки опечаток.
Доработка
Доработка не проводилась.
Ограничения
Ограничения отсутствуют.
Установка
Установка не требуется.
Настройка
Настройка выполняется посредством параметров конфигурации, применяемых для парольных политик.
Использование модуля
Добавление политики, проверяющей сложность пароля с помощью библиотеки zxcvbn
:
-
Создайте парольную политику с использованием библиотеки:
SELECT * FROM set_role_policies('user1', use_password_strength_estimator('1'), password_strength_estimator_score(1), check_syntax('1'), policy_enable('1'));
-
Задайте пароль пользователю не соответствующий созданной политике:
ALTER USER user1 WITH ENCRYPTED PASSWORD '12345679';
При попытке создания пользователя с паролем, не проходящим проверку, выводится сообщение:
ERROR: Syntax check fail: minimum number of special characters for password is 1
Syntax check fail: minimum number of uppercase characters for password is 1 -
Задайте надежный пароль пользователю:
ALTER USER user1 WITH ENCRYPTED PASSWORD '165A!@qwert';
Команда проходит успешно
ALTER ROLE
Ссылки на документацию разработчика
Дополнительно поставляемый модуль zxcvbn: https://github.com/dropbox/zxcvbn.