Ещё об оценке стойкости пароля
Недавние обзоры существующих инструментов оценки паролей (Оценка стойкости пароля от Google, Алгоритм оценки стойкости пароля от Microsoft (Часть 1) и Алгоритм оценки стойкости пароля от Microsoft (Часть 2)), сделанные Juggler, подтолкнули меня к мысли поделиться своими «находками». В данной статье приводится описание ещё некоторых подходов к оценке сложности паролей.
Анализатор паролей SeaMonkey
Этот анализатор паролей разработан как часть проекта SeaMonkey – свободного набора программ для работы в Internet, созданного и поддерживаемого организацией Seamonkey Council, выделившейся из Mozilla Foundation. Сам механизм анализа пароля является частью JavaScript библиотеки по работе с паролями. Алгоритм его работы заключается в вычислении веса пароля, основывающемся на данных о символах, из которых этот пароль составлен. Вес пароля вычисляется по следующей формуле:
pwstrength = ((pwlength * 10) - 20) + (numeric * 10) + (numsymbols * 15) + (upper * 10)
, где
- pwlength равно 5, если количество символов в пароле больше 5, или равно длине пароля;
- numeric равно 3, если количество цифр в пароле больше 3, в противном случае — равно количеству цифр;
- numsymbols считается равным 3, если число символов в пароле, отличных от букв, цифр и знаков подчёркивания, больше 3, иначе — количеству таких символов;
- upper равно 3, если количество букв в верхнем регистре больше 3, или количеству заглавных букв в противном случае.
После вычисления вес пароля нормируется таким образом, чтобы его значение заключалось в интервале от 0 до 100. Нормировка проводится в том случае, когда значение веса не попадает в этот диапазон. В случае когда pwstrength меньше 0, значение pwstrength приравнивают к нулю, а когда больше 0, значение веса устанавливают равным 100. Ранжирование же пароля по степени стойкости оставлено на усмотрение разработчиков, использующих библиотеку.
Как видно, описанный анализатор не использует никаких проверок с использованием словарей, что делает его оценки несколько однобокими, и, вероятно, менее точными по сравнению с программами от Google и Microsoft, рассмотренными выше.
Password Strength Meter (jQuery plugin)
Ещё одним вариантом оценщика пароля, работающего на клиентской стороне, является Password Strength Meter (архив с плагином) – плагин, разработанный для JavaScript фреймворка jQuery.
Процедура оценки работает следующим образом. Известно множество качеств, обладая которыми пароль увеличивает или уменьшает свою стойкость к подбору. Каждое такое качество имеет свой строго определённый вес. Алгоритм заключается в поэтапной проверке наличия у пароля этих качеств и, в случае их присутствия происходит увеличения суммарного веса пароля, по величине которого после просмотра всех характеристик делается заключение об уровне стойкости пароля.
Рассмотрим полный алгоритм процедуры оценки пароля:
- Вес пароля устанавливается равным нулю.
- Если длина пароля менее 4 символов, то работа алгоритма заканчивается и возвращается результат “слишком короткий пароль”. Иначе переходим к шагу 3.
- Вес пароля увеличиваем на величину 4 * len, где len – длина пароля.
- Осуществляется попытка сжатия пароля по следующему алгоритму. Если в пароле встречается подстрока вида SS, где S – строка длины 1, то первая часть этой подстроки удаляется и сжатие продолжается с позиции начала второй части этой подстроки. Например, применяя этот алгоритм к строке aaabbcab, на выходе получим строку abcab. После выполнения операции сжатия вес пароля уменьшается на величину len — lenCompress, где len – длина пароля, а lenCompress – длина пароля после сжатия.
- Проводятся попытки сжатия пароля для случаев строк S длинной 2, 3 и 4 символов. Вес пароля уменьшается аналогично на величину len — lenCompress. Отметим, что сжатие каждый раз производится на проверяемом пароле, а не строках, полученных на предыдущих попытках.
- Если пароль содержит не меньше 3 цифр, то увеличить вес на 5.
- Если пароль содержит не менее 2 знаков, то увеличить вес на 5.
- Если пароль содержит буквы как в верхнем так и в нижнем регистрах, то увеличить вес пароля на 10.
- Если пароль содержит буквы и цифры, то увеличить вес пароля на 15.
- Если пароль содержит знаки и цифры, то увеличить вес на 15.
- Если пароль содержит буквы и знаки, то увеличить вес на 15.
- Если пароль состоит только из букв или только из цифр, то уменьшить вес пароля на 10.
- Если вес пароля меньше 0, то установить его равным 0. Если больше 100, то установить равным 100.
- Пароль, вес которого меньше 34, признаётся “слабым”. Если вес от 34 до 67, то пароль относится к категории “хороший”, а если более 67, то пароль считается “отличным”.
Рассмотренный анализатор также как и продукт от SeaMonkey, не проводит проверку пароля по какому-либо словарю. К тому же остаётся открытым вопрос об обоснованности выбора тех или иных значений весовых коэфициентов при формировании оценки пароля.
Доступна страница, демонстрирующая возможность данного плагина.
Cornell University — Password Strength Checker
Официальный on-line сервис, предоставляемый центром безопасности Корнелльского университета (Итака, США). С его помощью пользователи могут проверить свой пароль, заполнив web-форму и отправив его на проверку. Оценка пароля, как и в случае с сервисом Google, производится на стороне сервера.
Реализация алгоритма не раскрыта для общего доступа, однако в описании сервиса указаны требования, которым должен удовлетворять пароль, чтобы проверка прошла успешно:
- пароль должен иметь длину не менее 8 символов;
- при составлении пароля используются символы по крайней мере трёх алфавитов из следующего списка:
- заглавные латинские буквы
- строчные латинские буквы
- цифры
- специальные знаки (такие как
! * ( ) : |
)
- пароль не должен содержать слов из словаря;
- пароль не должен содержать последовательностей повторяющихся букв (например, ААА) и последовательностей вида abc, qwerty, 123, 321.
Эти требования должны строго выполняться. Если хотя бы какое-то требование не выполняется, то пароль признаётся ненадёжным.
К такому подходу можно сделать следующее критическое замечания. Так пароль произвольно большой длины, например, какое-то предложение на естественном языке, не будет удовлетворять условию №3, что автоматически обеспечит паролю низкую оценку, хотя это, может быть, и не совсем оправдано.
Password Strength Tester
JavaScript анализатор паролей, который разрабатывается и поддерживается в рамках проекта Rumkin.com.
Алгоритм оценки, реализованный в данном анализаторе, основывается на общих положениях теории информации. В качестве основной оценки пароля используется его энтропия, вычисление которой производится с использование таблиц диграмм для английского языка.
Под энтропией (информационной ёмкостью) пароля понимается мера случайности выбора последовательности символов, составляющих пароль, оцененная методами теории информации.
Информационная ёмкость E измеряется в битах и характеризует стойкость к подбору пароля методом полного перебора при условии отсутствия априорной информации о характере пароля и применении злоумышленником оптимальной стратегии перебора, при которой среднее ожидаемое количество попыток до наступления удачной равняется 2E-1. По утверждению создателя этого оценщика с целью уменьшения загружаемого на клиентскую сторону объёма информации все небуквенные символы были объединены в одну группу. Эта группа выступает неким универсальным символом, который и используется в частотной таблице. Как отмечает разработчик, при данном допущении значение получаемой энтропии будет меньше, нежели в случае, когда в частотной таблице все символы представлены раздельно.
В зависимости от полученного значения энтропии паролю присваивается соответствующая характеристика его стойкости.
Энтропия | Уровень стойкости | Комментарий |
---|---|---|
< 28 бит | Очень слабый | Допустимо защищать только не ценную информацию. |
28-35 бит | Слабый | Способен остановить большое число начинающих взломщиков, идеально подходит для использования в качестве desktop-пароля. |
36-59 бит | Средний | Вполне пригоден для использования для компьютеров в корпоративной сети. |
60-127 бит | Высокий | Может быть хорошим для того, чтобы охранять финансовую информацию. |
> 128 бит | Сверхнадёжный | Пароль обладает очень большой стойкостью к подбору. |
Резюме
В рассмотренных выше программах используются различные способы оценки паролей, причём в каждой из них акцент сделан на оценку лишь какого-то определённого свойства пароля. Так анализатор паролей для проекта SeaMonkey в качестве основы для оценки использует знания о длине пароля и количестве символах из того или иного алфавита, используемых при построении пароля. В плагине Password Strength Meter для jQuery при оценке осуществляется выявление паролей построенных путём повторения групп символов. Особо следует отметить проект Password Strength Tester, в котором используется математическая модель, построенная на основе положений теории информации.
Необходимо сказать, что в рассмотренных программных решениях существуют ряд проблем, не позволяющих считать оценку уровня надёжности пароля полной. Так on-line анализаторы, реализованные посредствам сценариев JavaScript, выполняемых на клиентской стороне, ограничены в своих ресурсах, что исключает возможность осуществлять проверку по словарям больших объёмов. В тоже время вариант проверки пароля на стороне сервера хотя и решает проблему использования словарей, однако оставляет открытым вопрос о надёжности передачи и, главное, защищённости оцениваемого пароля от несанкционированного использования. В последнем случае пользователь может надеяться лишь на то, что обработку пароля проводит сервер, выполняющий лишь «чистые» операции, а не служащий поставщиком информации для злоумышленников.
Кроме этого, следует отметить, что все рассмотренные программные продукты не поддерживают оценку паролей, содержащих буквы кириллицы.