Исследование алгоритмов оценки стойкости пароля
Определение энтропии как меры стойкости паролей, способ противодействия их взлому. Вычисление веса и информационной емкости пароля с помощью SeaMonkey, Password Strength Tester. Алгоритм работы дежурного и вспомогательного анализаторов от Microsoft.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 18.06.2011 |
Размер файла | 632,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Министерство образования и науки Российской Федерации
ГОУ ВПО «Северо-Кавказский государственный технический университет»
Факультет информационных технологий и телекоммуникаций
Курсовая работа
На тему: Исследование алгоритмов оценки стойкости пароля
Специальность 090105 «Комплексное обеспечение информационной безопасности автоматизированных систем»
Обозначение курсового проекта КР-СевКавГТУ-081023-11
Автор дипломного проекта
Воронин В.Ю.
Группа БАС-081
Руководитель работы
Воронкин Р.А.
Ставрополь 2011
Содержание
Введение
1. Стойкость паролей
2. Исследование некоторых алгоритмов оценки стойкости пароля
2.1 Анализатор паролей SeaMonkey
2.2 Password Strength Meter (jQuery plugin)
2.3 Cornell University - Password Strength Checker
2.4 Password Strength Tester
3. Алгоритм оценки стойкости пароля от Microsoft
Заключение
Список использованных источников
Приложение
Введение
Пароли представляют собой наиболее распространённый инструмент, используемый для получения доступа к информационным ресурсам.
Для пользователей это один из самых удобных вариантов, который, к тому же, не требует наличия какого-либо дополнительного оборудования или специальных навыков. Все, что требуется - это придумать и запомнить стойкий пароль (или несколько паролей). Кажется, это совсем не сложно? К сожалению, суровая реальность вносит свои коррективы в этот процесс.
Согласно проведенному американским Ponemon Institute опросу, 88% респондентов в течение последних двух лет забывали свой пароль хотя бы один раз. Часто сотрудники компаний считают политику безопасности в отношении паролей излишней, и требование менять пароль каждые 30 дней вызывает у них бурю негодования. В таких случаях в качестве нового пароля используется немного видоизмененный старый, к которому добавляется «0», «1» или текущий год.
К сожалению, с точки зрения компьютерной безопасности парольную аутентификацию далеко не всегда можно назвать удачным выбором. Как и многие технические решения, она страдает от двух проблем: человеческого фактора и технического несовершенства.
- Человеческий фактор (ошибки пользователей). Многие люди не могут (или попросту не хотят, не видят смысла) запоминать стойкие пароли, поскольку это объективно сложно. Поэтому они используют простые, нестойкие пароли, или, если их все же заставляют использовать стойкие, записывают их на ковриках для мышки, на обороте клавиатуры или на стикерах, приклеенных к монитору.
- Техническое несовершенство (ошибки разработчиков), чаще всего заключающееся в ошибках, допущенных на этапах проектирования и/или реализации программного обеспечения, осуществляющего проверки паролей.
1. Стойкость паролей
Мерой стойкости паролей традиционно является энтропия - мера неопределенности, измеряемая обычно в битах. Энтропия в 1 бит соответствует неопределенности выбора из двух паролей, в 2 бита - из 4 паролей, в 3 бита - из 8 паролей и т. д. Энтропия в N бит соответствует неопределенности выбора из паролей. В случае случайных паролей (например, сгенерированных с помощью генератора случайных чисел) энтропия вычисляется достаточно просто: она равна логарифму по основанию два количества возможных паролей для заданных параметров. Так, для случайного пароля длиной N символов, составленного из алфавита, содержащего M букв, энтропия будет равна:
. (1)
Значения энтропии для некоторых длин паролей и наборов символов представлены в таблице 1.
Если же пароль сгенерирован не беспристрастным генератором случайных чисел, а человеком, то вычислить его энтропию гораздо труднее. Самым распространенным подходом к подсчету энтропии в этом случае является подход, который был предложен американским институтом NIST:
- энтропия первого символа пароля составляет 4 бита;
- энтропия следующих семи символов пароля составляет 2 бита на символ;
- энтропия символов с 9-го по 20-й составляет 1,5 бита на символ;
- все последующие символы имеют энтропию 1 бит на символ;
- если пароль содержит символы верхнего регистра и неалфавитные символы, то его энтропия увеличивается на 6 бит.
Таблица 1.1 - Значения энтропии для некоторых длин паролей
Длина пароля |
Цифры (10) (1) |
Латинские буквы без учета регистра (26) |
Цифры и латинские буквы без учета регистра (36) |
Латинские буквы с учетом регистра (52) |
Цифры и латинские буквы с учетом регистра (62) |
Цифры, латинские буквы и специальные символы (96) |
|
6 |
19,9 |
28,2 |
31,0 |
34,2 |
35,7 |
39,5 |
|
7 |
23,3 |
32,9 |
36,2 |
39,9 |
41,7 |
46,1 |
|
8 |
26,6 |
37,6 |
41,4 |
45,6 |
47,6 |
52,7 |
|
9 |
29,9 |
42,3 |
46,5 |
51,3 |
53,6 |
59,3 |
|
10 |
33,2 |
47,0 |
51,7 |
57,0 |
59,5 |
65,8 |
|
11 |
36,5 |
51,7 |
56,9 |
62,7 |
65,5 |
72,4 |
|
12 |
39,9 |
56,4 |
62,0 |
68,4 |
71,5 |
79,0 |
Стойкость того или иного пароля должна рассматриваться только в контексте конкретной системы парольной аутентификации: пароль, являющийся стойким для одной системы, может оказаться совершенно не стойким при использовании другой. Это происходит из-за того, что разные системы в разной степени реализуют (или вовсе не реализуют) механизмы противодействия атакам, направленным на взлом паролей, а также потому, что некоторые системы содержат ошибки или используют ненадежные алгоритмы.
Основной способ противодействовать взлому паролей - искусственно замедлить процедуру их проверки. Действительно, займет ли проверка 10 наносекунд или 10 миллисекунд - для пользователя разница будет совершенно незаметной, а с точки зрения взлома скорость упадет очень существенно - со 100 миллионов до 100 паролей в секунду. Замедление обычно достигается за счет многократного вычисления криптографических функций, причем эти вычисления построены таким образом, чтобы атакующая сторона не могла проверить пароль без повторения вычислений (то есть недостаточно просто добавить вызов Sleep в процедуре проверки пароля). Впервые такой вариант был предложен в 1997 году в работе «Secure Applications of Low-Entropy Keys».
Системы, реализующие подобные замедления, увеличивают эффективную энтропию пароля на величину, где C - количество итераций при вычислении криптографического преобразования. Примеры подобных систем приведены в таблице 2.
Таблица 1.2 - Системы, увеличивающие эффективную энтропию
пароля
Где применяется |
Количество итераций, алгоритм |
Изм. эффективной энтропии пароля |
|
WPA |
4x4096 SHA-1 (PBKDF2) |
+14 бит |
|
MS Office 2007 |
50 000 SHA-1 |
+15,6 бит |
|
WinRAR 3.0+ |
~100 000 SHA-1 |
+16,6 бит |
|
PGP 9.0+ |
2x1024 SHA-1 |
+11 бит |
|
Adobe Acrobat 5.0 - 8.0 |
50 MD5 + 20 RC4 |
+6,1 бит |
Как было сказано выше, системы могут содержать ошибки, снижающие ее стойкость. Например, для шифрования данных может использоваться алгоритм с ключом недостаточной длины или сама процедура преобразования пароля может быть ненадежной. Так, все версии Microsoft Word и Excel, начиная с 97 и до 2003 включительно, для шифрования документов по умолчанию используют потоковый алгоритм RC4 с длиной ключа 40 бит.
Стойкость системы определяется стойкостью самого слабого звена, поэтому если известно, что для шифрования используется 40-битный ключ, нет никакого смысла использовать пароль с большей энтропией. Другой, ставший уже классическим, пример - алгоритм проверки паролей в операционной системе Windows NT/2000/XP/2003. Эти системы поддерживают два алгоритма - LM и NTLM. При создании пользователя или изменении его пароля эти системы вычисляют LM- и NTLM-хэши пароля и сохраняют его в базе данных учетных записей.
Алгоритм вычисления LM-хэша выглядит следующим образом:
- символы пароля приводятся к верхнему регистру и преобразуются в OEM-кодировку;
- если пароль короче 14 символов, он дополняется пробелами до этой величины;
- полученная последовательность из 14 символов делится на две части по 7 символов;
- каждая из полученных частей используется в качестве ключа для шифрования фиксированного значения алгоритмом DES;
- полученные в результате шифрования блоки объединяются - это и есть LM-хэш пароля.
2. Исследование некоторых алгоритмов оценки стойкости пароля
2.1 Анализатор паролей SeaMonkey
Этот анализатор паролей разработан как часть проекта SeaMonkey - свободного набора программ для работы в Internet, созданного и поддерживаемого организацией Seamonkey Council, выделившейся из Mozilla Foundation. Сам механизм анализа пароля является частью JavaScript библиотеки по работе с паролями. Алгоритм его работы заключается в вычислении веса пароля, основывающемся на данных о символах, из которых этот пароль составлен. Вес пароля вычисляется по следующей формуле:
(2)
где:
- pwlength равно 5, если количество символов в пароле больше 5, или равно длине пароля;
- numeric равно 3, если количество цифр в пароле больше 3, в противном случае - равно количеству цифр;
- numsymbols считается равным 3, если число символов в пароле, отличных от букв, цифр и знаков подчёркивания, больше 3, иначе - количеству таких символов;
- upper равно 3, если количество букв в верхнем регистре больше 3, или количеству заглавных букв в противном случае.
После вычисления вес пароля нормируется таким образом, чтобы его значение заключалось в интервале от 0 до 100. Нормировка проводится в том случае, когда значение веса не попадает в этот диапазон. В случае, когда pwstrength меньше 0, значение pwstrength приравнивают к нулю, а когда больше 0, значение веса устанавливают равным 100. Ранжирование же пароля по степени стойкости оставлено на усмотрение разработчиков.
Описанный анализатор не использует никаких проверок с использованием словарей, что делает его оценки несколько однобокими, и, вероятно, менее точными.
2.2 Password Strength Meter (jQuery plugin)
Ещё одним вариантом оценщика пароля, работающего на клиентской стороне, является Password Strength Meter - плагин, разработанный для JavaScript фреймворка jQuery.
Процедура оценки работает следующим образом. Известно множество качеств, обладая которыми пароль увеличивает или уменьшает свою стойкость к подбору. Каждое такое качество имеет свой строго определённый вес. Алгоритм заключается в поэтапной проверке наличия у пароля этих качеств и, в случае их присутствия происходит увеличения суммарного веса пароля, по величине которого после просмотра всех характеристик делается заключение об уровне стойкости пароля.
Рассмотрим полный алгоритм процедуры оценки пароля:
1. Вес пароля устанавливается равным нулю.
2. Если длина пароля менее 4 символов, то работа алгоритма заканчивается и возвращается результат “слишком короткий пароль”. Иначе переходим к шагу 3.
3. Вес пароля увеличиваем на величину , где len - длина пароля.
4. Осуществляется попытка сжатия пароля по следующему алгоритму. Если в пароле встречается подстрока вида SS, где S - строка длины 1, то первая часть этой подстроки удаляется и сжатие продолжается с позиции начала второй части этой подстроки. Например, применяя этот алгоритм к строке aaabbcab, на выходе получим строку abcab. После выполнения операции сжатия вес пароля уменьшается на величину , где len - длина пароля, а lenCompress - длина пароля после сжатия.
5. Проводятся попытки сжатия пароля для случаев строк S длинной 2, 3 и 4 символов. Вес пароля уменьшается аналогично на величину .
Отметим, что сжатие каждый раз производится на проверяемом пароле, а не строках, полученных на предыдущих попытках.
6. Если пароль содержит не меньше 3 цифр, то увеличить вес на 5.
7. Если пароль содержит не менее 2 знаков, то увеличить вес на 5.
8. Если пароль содержит буквы, как в верхнем, так и в нижнем регистрах, то увеличить вес пароля на 10.
9. Если пароль содержит буквы и цифры, то увеличить вес пароля на 15.
10. Если пароль содержит знаки и цифры, то увеличить вес на 15.
11. Если пароль содержит буквы и знаки, то увеличить вес на 15.
12. Если пароль состоит только из букв или только из цифр, то уменьшить вес пароля на 10.
13. Если вес пароля меньше 0, то установить его равным 0. Если больше 100, то установить равным 100.
14. Пароль, вес которого меньше 34, признаётся “слабым”. Если вес от 34 до 67, то пароль относится к категории “хороший”, а если более 67, то пароль считается “отличным”.
Рисунок 2.1 - Пример оценки стойкости пароля с использованием
Password Strength Meter
2.3 Cornell University - Password Strength Checker
Официальный on-line сервис, предоставляемый центром безопасности Корнелльского университета (Итака, США). С его помощью пользователи могут проверить свой пароль, заполнив web-форму и отправив его на проверку. Оценка пароля, как и в случае с сервисом Google, производится на стороне сервера.
Реализация алгоритма не раскрыта для общего доступа, однако в описании сервиса указаны требования, которым должен удовлетворять пароль, чтобы проверка прошла успешно:
1. Пароль должен иметь длину не менее 8 символов.
2. При составлении пароля используются символы, по крайней мере, трёх алфавитов из следующего списка.
- заглавные латинские буквы;
- строчные латинские буквы;
- цифры;
- специальные знаки (такие как ! * () : |);
3. пароль не должен содержать слов из словаря;
4. пароль не должен содержать последовательностей повторяющихся букв (например, ААА) и последовательностей вида abc, qwerty, 123, 321.
Эти требования должны строго выполняться. Если хотя бы какое-то требование не выполняется, то пароль признаётся ненадёжным.
2.4 Password Strength Tester
JavaScript анализатор паролей, который разрабатывается и поддерживается в рамках проекта Rumkin.com.
Алгоритм оценки, реализованный в данном анализаторе, основывается на общих положениях теории информации. В качестве основной оценки пароля используется его энтропия, вычисление которой производится с использование таблиц диаграмм для английского языка.
Под энтропией (информационной ёмкостью) пароля понимается мера случайности выбора последовательности символов, составляющих пароль, оцененная методами теории информации.
Информационная ёмкость E измеряется в битах и характеризует стойкость к подбору пароля методом полного перебора при условии отсутствия априорной информации о характере пароля и применении злоумышленником оптимальной стратегии перебора, при которой среднее ожидаемое количество попыток до наступления удачной равняется . По утверждению создателя этого оценщика, с целью уменьшения загружаемого на клиентскую сторону объёма информации все небуквенные символы были объединены в одну группу. Эта группа выступает неким универсальным символом, который и используется в частотной таблице.
Как отмечает разработчик, при данном допущении значение получаемой энтропии будет меньше, нежели в случае, когда в частотной таблице все символы представлены раздельно.
В зависимости от полученного значения энтропии паролю присваивается соответствующая характеристика его стойкости.
Таблица 2.1 - Зависимость уровня стойкости пароля от значения
энтропии
Энтропия |
Уровень стойкости |
Комментарий |
|
< 28 бит |
Очень слабый |
Допустимо защищать только не ценную информацию. |
|
28-35 бит |
Слабый |
Способен остановить большое число начинающих взломщиков, идеально подходит для использования в качестве desktop-пароля. |
|
36-59 бит |
Средний |
Вполне пригоден для компьютеров в корпоративной сети. |
|
60-127 бит |
Высокий |
Может быть хорошим, чтобы охранять финн. информацию |
|
> 128 бит |
Сверхнадёжный |
Пароль обладает очень большой стойкостью к подбору. |
В плагине Password Strength Meter для jQuery при оценке осуществляется выявление паролей построенных путём повторения групп символов. Особо следует отметить проект Password Strength Tester, в котором используется математическая модель, построенная на основе положений теории информации.
Необходимо сказать, что в рассмотренных программных решениях существуют ряд проблем, не позволяющих считать оценку уровня надёжности пароля полной. Так on-line анализаторы, реализованные посредствам сценариев JavaScript, выполняемых на клиентской стороне, ограничены в своих ресурсах, что исключает возможность осуществлять проверку по словарям больших объёмов. В тоже время вариант проверки пароля на стороне сервера хотя и решает проблему использования словарей, однако оставляет открытым вопрос о надёжности передачи и, главное, защищённости оцениваемого пароля от несанкционированного использования. В последнем случае пользователь может надеяться лишь на то, что обработку пароля проводит сервер, выполняющий лишь «чистые» операции, а не служащий поставщиком информации для злоумышленников.
Кроме этого, следует отметить, что все рассмотренные программные продукты не поддерживают оценку паролей, содержащих буквы кириллицы.
Рисунок 2.2 - Пример оценки стойкости пароля с использованием
Password Strength Tester
Вывод: В рассмотренных выше программах используются различные способы оценки паролей, причём в каждой из них акцент сделан на оценку лишь какого-то определённого свойства пароля. Так анализатор паролей для проекта SeaMonkey в качестве основы для оценки использует знания о длине пароля и количестве символах из того или иного алфавита, используемых при построении пароля.
3. Алгоритм оценки стойкости пароля от Microsoft
энтропия стойкость пароль анализатор
Анализ кода показал, что алгоритм использует два анализатора стойкости пароля - основной, достаточно упрощенный, и вспомогательный - более глубокий.
Начнем с текущего алгоритма, по которому анализатор работает в дежурном режиме.
1. Уровень стойкости пароля дается в диапазоне [0; 4] в зависимости от вычисляемой «битовой стойкости» bits.
- bits ? 128 - 4;
- 128 < bits ? 64 - 3;
- 64 < bits ? 56 - 2;
- bits < 56 - 1;
- пустой пароль - 0.
2. Для оценки «битовой стойкости» используется формула (3).
(3)
где
- bits - битовая стойкость;
- log - натуральный логарифм;
- length - длина пароля;
- charset - суммарный размер множеств для каждого из типов ниже, если они присутствуют в строке.
1. Малые английские буквы [abcdefghijklmnopqrstuvwxyz].
2. Заглавные английские буквы [A-Z].
3. Специальные символы [~`!@#$%^&*()-_+="].
4. Цифры [1234567890].
5. Остальные символы.
Рассмотрим алгоритм работы вспомогательного анализатора.
Для анализа стойкости используются следующие показатели:
- длина пароля;
- количество используемых типов символов: заглавные латинские, малые латинские, цифры, спец-символы;
- отсутствие слова в словаре (слова длиной от 3 до 16 символов) с учетом подобия символов;
- близость слова к словарному слову с определенной вероятностью;
Стойкость пароля подразделяется на пять классов:
1. Отличный (Best).
- длина пароля - не менее 14;
- количество используемых различных типов символов - не менее 3;
- в словаре отсутствует близкое с вероятностью 0.6 слово с учетом подобия символов.
2. Стойкий (Strong).
- длина пароля - не менее 8;
- количество используемых различных типов символов - не менее 3;
- в словаре отсутствует близкое с вероятностью 0.6 слово с учетом подобия символов.
3. Средний (Medium).
- длина пароля - не менее 8;
- количество используемых различных типов символов - не менее 2;
- слово отсутствует в словаре с учетом подобия символов;
4. Слабый (Weak).
- пароль состоит как минимум из одного произвольного символа.
5. Никакой.
- все остальные пароли.
Таблица 3.1 - Подобие символов:
`3' |
- |
`e' |
`9' |
- |
`g' |
||
`x' |
- |
`k' |
`+' |
- |
`t' |
||
`5' |
- |
`s' |
`@' |
- |
`a' |
||
`$' |
- |
`s' |
`0' |
- |
`o' |
||
`6' |
- |
`g' |
`1' |
- |
`1' |
||
`7' |
- |
`t' |
`2' |
- |
`z' |
||
`8' |
- |
`b' |
`!' |
- |
`i' |
||
`|' |
- |
`1' |
Словари:
#1: oat, not, ken, keg, ham, hal, gas, cpu, cit, bop, bah
#2: zeus, ymca, yang, yaco, work, word, wool, will, viva, vito, vita, visa, vent, vain, uucp, util, utah, unix, trek, town, torn, tina, time, tier, tied, tidy, tide, thud, test, tess, tech, tara, tape, tapa, taos, tami, tall, tale, spit, sole, sold, soil, soft, sofa, soap, slav, slat, slap, slam, shit, sean, saud, sash, sara, sand, sail, said, sago, sage, saga, safe, ruth, russ, rusk, rush, ruse, runt, rung, rune, rove, rose, root, rick, rich, rice, reap, ream, rata, rare, ramp, prod, pork, pete, penn, penh, pend, pass, pang, pane, pale, orca, open, olin, olga, oldy, olav, olaf, okra, okay, ohio, oath, numb, null, nude, note, nosy, nose, nita, next, news, ness, nasa, mike, mets, mess, math, mash, mary, mars, mark, mara, mail, maid, mack, lyre, lyra, lyon, lynx, lynn, lucy, love, lose, lori, lois, lock, lisp, lisa, leah, lass, lash, lara, lank, lane, lana, kink, keri, kemp, kelp, keep, keen, kate, karl, june, judy, judo, judd, jody, jill, jean, jane, isis, iowa, inna, holm, help, hast, half, hale, hack, gust, gush, guru, gosh, gory, golf, glee, gina, germ, gatt, gash, gary, game, fred, fowl, ford, flea, flax, flaw, finn, fink, film, fill, file, erin, emit, elmo, easy, done, disk, disc, diet, dial, dawn, dave, data, derek, damn, dame, crab, cozy, coke, city, cite, chem, chat, cats, burl, bred, bill, bilk, bile, bike, beth, beta, benz, beau, bath, bass, bart, bank, bake, bait, bail, aria, anne, anna, andy, alex, abcd
#3:
…
#9: ventriloquist, ventriloquism, poliomyelitis, phosphorylate, oleomargarine, massachusetts, jitterbugging, interpolatory, inconceivable, imperturbable, impermissible, decomposition, comprehensive, comprehension
#10: slaughterhouse, irreproducible, incompressible, comprehensible, bremsstrahlung
#11: irreconciliable, instrumentation, incomprehension
#12: incomprehensible
Заключение
Рассмотренные алгоритмы оценки стойкости пароля позволяют по какому-либо определённому признаку оценить стойкость пароля к взлому. Для этого каждым алгоритмом оценки стойкости используются свой комплекс процедур, называемый анализатором в алгоритме, который направлен на изучение самого пароля, соответствие пароля каким-либо распространённым «заготовкам». Независимо от того, используется ли для сравнения база данных самых распространённых паролей, называемая словарём, к паролю предъявляются довольно жесткие требование, такие, как наличие цифр, заглавных и строчных букв, специальных символов, знака подчёркивания, а так же фиксированная длина - начиная с 8 символов (гарантирует довольно низкую оценку со стороны анализатора).
Несмотря на достаточное количество алгоритмов и анализаторов, лишь единицы из них предоставляют клиенту возможность допустимости генерации паролей, содержащих кириллицу. Содержание символов различных шрифтов способствует многократному увеличению стойкости пароля, а равно его энтропии.
Список использованных источников
1. Андреев Н.Н. О некоторых направлениях исследований в области защиты информации / Н.Н. Андреев // Международная конференция “Безопасность информации”. - 1997. - №2. - С. 94-97.
2. Баpичев С.С. Основы современной кpиптогpафии / С.С. Баричев, В.В. Гончаров, Р.Е. Серов // - 1997. - №1. - С. 176.
3. Грушо А.А. Теоретические основы защиты информации / А.А. Грушо, Е.Е. Тимонина // - 1996. - С. 31.
4. Домашев А.В. Программирование алгоритмов защиты информации / А.В. Домашев, А.Ю. Щербаков // - 2000. - С. 288.
5. Варфоломеев А.А. Блочные криптосистемы. Основные свойства и методы анализа стойкости / А.А. Варфоломеев, А.Е. Жуков // - 1998. - С. 200.
6. Спесивцев А.В. Защита информации в персональных / А.В. Спесивцев // - 1992. - С. 278.
7. Ростовцев А.Г. Защита информации в компьютерных системах. Элементы криптологии / А.Г. Ростовцев, В.А. Матвеев / Под редакцией П.Д. Зегжды. - 1993. - С. 365.
8. Fluhrer S.R. Statistical analysis of the alleged RC4 keystream generator / S.R. Fluhrer, D.A. McGrew // Fast Software Encryption, Cambridge Security Workshop Proceedings. - 2000. - Р. 127-139.
9. Golic J.Dj. Linear models for keystream generators / J.Dj. Golic // IEEE Transactions on Computers. - 1996. - V. 45. - Р. 41-49.
10. Menezes A.J. Handbook of Applied Cryptography / A.J. Menezes, S.A. Vanstone // - 1996. - Р. 780.
Приложение
Листинг алгоритма оценки стойкости пароля от Microsoft
var kNoCanonicalCounterpart = 0;
var kCapitalLetter = 0;
var kSmallLetter = 1;
var kDigit = 2;
var kPunctuation = 3;
var kAlpha = 4;
var kCanonicalizeLettersOnly = true;
var kCananicalizeEverything = false;
var gDebugOutput = null;
var kDebugTraceLevelNone = 0;
var kDebugTraceLevelSuperDetail = 120;
var kDebugTraceLevelRealDetail = 100;
var kDebugTraceLevelAll = 80;
var kDebugTraceLevelMost = 60;
var kDebugTraceLevelFew = 40;
var kDebugTraceLevelRare = 20;
var gDebugTraceLevel = kDebugTraceLevelNone;
function DebugPrint(){
var string = "";
if (gDebugTraceLevel && gDebugOutput && DebugPrint.arguments && (DebugPrint.arguments.length > 1) && (DebugPrint.arguments[0] <= gDebugTraceLevel)){
for(var index = 1; index < DebugPrint.arguments.length; index++){
string += DebugPrint.arguments[index] + " ";
}
string += "
\n";
gDebugOutput(string);
}
}
function CSimilarityMap(){
this.m_elements = "";
this.m_canonicalCounterparts = "";
}
function SimilarityMap_Add(element, canonicalCounterpart){
this.m_elements += element;
this.m_canonicalCounterparts += canonicalCounterpart;
}
function SimilarityMap_Lookup(element){
var canonicalCounterpart = kNoCanonicalCounterpart;
var index = this.m_elements.indexOf(element);
if (index >= 0){
canonicalCounterpart = this.m_canonicalCounterparts.charAt(index);
}
else{
}
return canonicalCounterpart;
}
function SimilarityMap_GetCount(){
return this.m_elements.length;
}
CSimilarityMap.prototype.Add = SimilarityMap_Add;
CSimilarityMap.prototype.Lookup = SimilarityMap_Lookup;
CSimilarityMap.prototype.GetCount = SimilarityMap_GetCount;
function CDictionaryEntry(length, wordList){
this.m_length = length;
this.m_wordList = wordList;
}
function DictionaryEntry_Lookup(strWord){
var fFound = false;
if (strWord.length == this.m_length){
var nFirst = 0;
var nLast = this.m_wordList.length - 1;
while(nFirst <= nLast){
var nCurrent = Math.floor((nFirst + nLast)/2);
if(strWord == this.m_wordList[nCurrent]){
fFound = true;
break;
}
else if (strWord > this.m_wordList[nCurrent]){
nLast = nCurrent - 1;
}
else{
nFirst = nCurrent + 1;
}
}
}
return fFound;
}
CDictionaryEntry.prototype.Lookup = DictionaryEntry_Lookup;
function CDictionary(){
this.m_entries = new Array()
}
function Dictionary_Lookup(strWord){
for (var index = 0; index < this.m_entries.length; index++){
if (this.m_entries[index].Lookup(strWord)){
return true;
}
}
}
function Dictionary_Add(length, wordList){
var iL=this.m_entries.length;
var cD=new CDictionaryEntry(length, wordList)
this.m_entries[iL]=cD;
}
CDictionary.prototype.Lookup = Dictionary_Lookup;
CDictionary.prototype.Add = Dictionary_Add;
var gSimilarityMap = new CSimilarityMap();
var gDictionary = new CDictionary();
function CharacterSetChecks(type, fResult){
this.type = type;
this.fResult = fResult;
}
function isctype(character, type, nDebugLevel){
var fResult = false;
switch(type){
case kCapitalLetter:
if((character >= 'A') && (character <= 'Z')){
fResult = true;
}
break;
case kSmallLetter:
if ((character >= 'a') && (character <= 'z')){
fResult = true;
}
break;
case kDigit:
if ((character >= '0') && (character <= '9')){
fResult = true;
}
break;
case kPunctuation:
if ("!@#$%^&*()_+-='\";:[{]}\|.>,</?`~".indexOf(character) >= 0){
fResult = true;
}
break;
case kAlpha:
if (isctype(character, kCapitalLetter) || isctype(character, kSmallLetter)){
fResult = true;
}
break;
default:
break;
}
return fResult;
}
function CanonicalizeWord(strWord, similarityMap, fLettersOnly){
var canonicalCounterpart = kNoCanonicalCounterpart;
var strCanonicalizedWord = "";
var nStringLength = 0;
if ((strWord != null) && (strWord.length > 0)){
strCanonicalizedWord = strWord;
strCanonicalizedWord = strCanonicalizedWord.toLowerCase();
if (similarityMap.GetCount() > 0){
nStringLength = strCanonicalizedWord.length;
for(var index = 0; index < nStringLength; index++){
if (fLettersOnly && !isctype(strCanonicalizedWord.charAt(index), kSmallLetter, kDebugTraceLevelSuperDetail)){
continue;
}
canonicalCounterpart = similarityMap.Lookup(strCanonicalizedWord.charAt(index));
if (canonicalCounterpart != kNoCanonicalCounterpart){
strCanonicalizedWord = strCanonicalizedWord.substring(0, index) + canonicalCounterpart +
strCanonicalizedWord.substring(index + 1, nStringLength);
}
}
}
}
return strCanonicalizedWord;
}
function IsLongEnough(strWord, nAtLeastThisLong){
if ((strWord == null) || isNaN(nAtLeastThisLong)){
return false;
}
else if (strWord.length < nAtLeastThisLong){
return false;
}
return true;
}
function SpansEnoughCharacterSets(strWord, nAtLeastThisMany){
var nCharSets = 0;
var characterSetChecks = new Array(
new CharacterSetChecks(kCapitalLetter, false),
new CharacterSetChecks(kSmallLetter, false),
new CharacterSetChecks(kDigit, false),
new CharacterSetChecks(kPunctuation, false)
);
if ((strWord == null) || isNaN(nAtLeastThisMany)){
return false;
}
for(var index = 0; index < strWord.length; index++){
for(var nCharSet = 0; nCharSet < characterSetChecks.length;nCharSet++){
if (!characterSetChecks[nCharSet].fResult && isctype(strWord.charAt(index), characterSetChecks[nCharSet].type, kDebugTraceLevelAll)){
characterSetChecks[nCharSet].fResult = true;
break;
}
}
}
for(var nCharSet = 0; nCharSet < characterSetChecks.length;nCharSet++){
if (characterSetChecks[nCharSet].fResult){
nCharSets++;
}
}
if (nCharSets < nAtLeastThisMany){
return false;
}
return true;
}
function FoundInDictionary(strWord, similarityMap, dictionary){
var strCanonicalizedWord = "";
if((strWord == null) || (similarityMap == null) || (dictionary == null)){
return true;
}
strCanonicalizedWord = CanonicalizeWord(strWord, similarityMap, kCanonicalizeLettersOnly);
if (dictionary.Lookup(strCanonicalizedWord)){
return true;
}
return false;
}
function IsCloseVariationOfAWordInDictionary(strWord, threshold, similarityMap, dictionary){
var strCanonicalizedWord = "";
var nMinimumMeaningfulMatchLength = 0;
if((strWord == null) || isNaN(threshold) || (similarityMap == null) || (dictionary == null)){
return true;
}
strCanonicalizedWord = CanonicalizeWord(strWord, similarityMap, kCananicalizeEverything);
nMinimumMeaningfulMatchLength = Math.floor((threshold) * strCanonicalizedWord.length);
for (var nSubStringLength = strCanonicalizedWord.length; nSubStringLength >= nMinimumMeaningfulMatchLength; nSubStringLength--){
for(var nSubStringStart = 0; (nSubStringStart + nMinimumMeaningfulMatchLength) < strCanonicalizedWord.length; nSubStringStart++){
var strSubWord = strCanonicalizedWord.substr(nSubStringStart, nSubStringLength);
if (dictionary.Lookup(strSubWord)){
return true;
}
}
}
return false;
}
function ClientSideStrongPassword(){
return (IsLongEnough(ClientSideStrongPassword.arguments[0], "8") && SpansEnoughCharacterSets(ClientSideStrongPassword.arguments[0], "3") && (!(IsCloseVariationOfAWordInDictionary(ClientSideStrongPassword.arguments[0], "0.6", ClientSideStrongPassword.arguments[1], ClientSideStrongPassword.arguments[2]))));
}
function ClientSideBestPassword(){
return (IsLongEnough(ClientSideBestPassword.arguments[0], "14") &&
SpansEnoughCharacterSets(ClientSideBestPassword.arguments[0], "3") && (!(IsCloseVariationOfAWordInDictionary(ClientSideBestPassword.arguments[0], "0.6", ClientSideBestPassword.arguments[1], ClientSideBestPassword.arguments[2]))));
}
function ClientSideMediumPassword(){
return (IsLongEnough(ClientSideMediumPassword.arguments[0], "8") && SpansEnoughCharacterSets(ClientSideMediumPassword.arguments[0], "2") && (!(FoundInDictionary(ClientSideMediumPassword.arguments[0], ClientSideMediumPassword.arguments[1], ClientSideMediumPassword.arguments[2]))));
}
function ClientSideWeakPassword(){
return (IsLongEnough(ClientSideWeakPassword.arguments[0], "1") || (!(IsLongEnough(ClientSideWeakPassword.arguments[0], "0"))));
}
function GEId(sID){
return document.getElementById(sID);
}
function EvalPwdStrength(oF,sP){
if(ClientSideBestPassword(sP,gSimilarityMap,gDictionary)){
DispPwdStrength(4,'pwdChkCon4');
}
else if(ClientSideStrongPassword(sP,gSimilarityMap,gDictionary)){
DispPwdStrength(3,'pwdChkCon3');
}
else if(ClientSideMediumPassword(sP,gSimilarityMap,gDictionary)){
DispPwdStrength(2,'pwdChkCon2');
}
else if(ClientSideWeakPassword(sP,gSimilarityMap,gDictionary)){
DispPwdStrength(1,'pwdChkCon1');
}
else{
DispPwdStrength(0,'pwdChkCon0');
}
}
function PadPasswd(oF,lPwd){
if(typeof oF.PwdPad=="object"){
var sPad="djg";
var lPad=sPad.length-lPwd;
oF.PwdPad.value=sPad.substr(0,(lPad<0)?0:lPad);
}
}
function DispPwdStrength(iN,sHL){
if(iN>4){ iN=4;
}
for(var i=0;i<5;i++){
var sHCR="pwdChkCon0";if(i<=iN){
sHCR=sHL;}if(i>0){
GEId("idSM"+i).className=sHCR;
}
GEId("idSMT"+i).style.display=((i==iN)?"inline":"none");
}
}
Размещено на Allbest.ru
Подобные документы
Количественная оценка стойкости пароля. Создание программы на базе разработанного алгоритма. Экспериментальная проверка количественных оценок стойкости пароля. Понятие и назначение интерфейса. Методы защиты от несанкционированного доступа к информации.
курсовая работа [22,8 K], добавлен 13.11.2009Разработка программного средства для анализа значений хэш-функций с целью формальной оценки стойкости пароля. Проблема слабых паролей. Оценка ущерба, возникающего вследствие атаки на защищаемый объект. Метод поиска по словарям и "радужным таблицам".
дипломная работа [1022,5 K], добавлен 10.06.2013Принципы работы клавиатурного шпиона. Способ взлома брутфорсом. Захват информации программ-снифферов. Противодействие раскрытию и угадыванию пароля, пассивному перехвату, несанкционированному воспроизведению. Защита при компрометации проверяющего.
курсовая работа [454,7 K], добавлен 28.03.2016Використовування програм для підбору пароля на Microsoft Office Word та WinRAR. Здійснення контролю за забезпеченням захисту інформації. Використання цифр та літер при складанні паролю. Впровадження систем допуску співробітників до роботи з документами.
лабораторная работа [667,8 K], добавлен 21.01.2014Написание программы входа пользователя в систему через пароль. Необходимость содержания входа в систему через ввод, проверки пароля, а также регистрации пользователя с занесением его имени и пароля в базу данных. Блокировка системы при неверном пароле.
лабораторная работа [2,7 M], добавлен 19.10.2009Знакомство с возможностями перехвата пароля при аутентификации в почтовых системах. Характеристика почтовой программы "The Bat!", анализ способов настройки и проверки работоспособности. Рассмотрение распространенных методов защиты от перехвата пароля.
контрольная работа [1,1 M], добавлен 19.05.2014Проблемы использования паролей на предприятии. Общие понятия и технологии идентификации и аутентификации. Принцип работы и структура программного средства SecureLogin от компании ActiveIdentity. Автоматическая генерация пароля, фишинг и фарминг.
курсовая работа [2,5 M], добавлен 22.01.2015Значение WEB-браузеров для организации доступа к Интернет-ресурсам, для просмотра страниц, видео, управления/администрирование ресурсов. Механизмы хранения паролей современных web-браузеров. Особенности применения функций дешифровки имени и пароля.
лабораторная работа [408,4 K], добавлен 04.12.2014Разработка алгоритмов на персональном компьютере, среда Турбо Паскаль. Работа программы для шифровки и дешифровки текста. Алгоритм шифрования: с помощью команды ORD. Функция Password а преобразовании символа, введенного пользователем ключа в его числовой
курсовая работа [19,6 K], добавлен 17.10.2008Виявлення та усунення помилок при розробці програмно-апаратних засобів. Захист від загроз цілісності та конфіденційності інформації. Розробка програми для визначення складності пароля. Структура і функціональне призначення модулів програмного продукту.
дипломная работа [2,3 M], добавлен 01.10.2013