Исследование алгоритмов оценки стойкости пароля

 

Министерство образования и науки Российской Федерации

ГОУ ВПО «Северо-Кавказский государственный технический университет»

Факультет информационных технологий и телекоммуникаций










Курсовая работа

На тему: Исследование алгоритмов оценки стойкости пароля

Специальность 090105 «Комплексное обеспечение информационной безопасности автоматизированных систем»

Обозначение курсового проекта КР-СевКавГТУ-081023-11




Автор дипломного проекта

Воронин В.Ю.

Группа БАС-081

Руководитель работы

Воронкин Р.А.





Ставрополь 2011

Содержание


Введение

. Стойкость паролей

. Исследование некоторых алгоритмов оценки стойкости пароля

.1 Анализатор паролей SeaMonkey

.2 Password Strength Meter (jQuery plugin)

2.3 Cornell University - Password Strength Checker

.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)619,928,231,034,235,739,5723,332,936,239,941,746,1826,637,641,445,647,652,7929,942,346,551,353,659,31033,247,051,757,059,565,81136,551,756,962,765,572,41239,956,462,068,471,579,0

Стойкость того или иного пароля должна рассматриваться только в контексте конкретной системы парольной аутентификации: пароль, являющийся стойким для одной системы, может оказаться совершенно не стойким при использовании другой. Это происходит из-за того, что разные системы в разной степени реализуют (или вовсе не реализуют) механизмы противодействия атакам, направленным на взлом паролей, а также потому, что некоторые системы содержат ошибки или используют ненадежные алгоритмы.

Основной способ противодействовать взлому паролей - искусственно замедлить процедуру их проверки. Действительно, займет ли проверка 10 наносекунд или 10 миллисекунд - для пользователя разница будет совершенно незаметной, а с точки зрения взлома скорость упадет очень существенно - со 100 миллионов до 100 паролей в секунду. Замедление обычно достигается за счет многократного вычисления криптографических функций, причем эти вычисления построены таким образом, чтобы атакующая сторона не могла проверить пароль без повторения вычислений (то есть недостаточно просто добавить вызов Sleep в процедуре проверки пароля). Впервые такой вариант был предложен в 1997 году в работе «Secure Applications of Low-Entropy Keys».

Системы, реализующие подобные замедления, увеличивают эффективную энтропию пароля на величину, где C - количество итераций при вычислении криптографического преобразования. Примеры подобных систем приведены в таблице 2.


Таблица 1.2 - Системы, увеличивающие эффективную энтропию

пароля

Где применяетсяКоличество итераций, алгоритмИзм. эффективной энтропии пароляWPA4x4096 SHA-1 (PBKDF2)+14 битMS Office 200750 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.050 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 <#"25" src="doc_zip7.jpg" />

(2)


где:

-pwlength равно 5, если количество символов в пароле больше 5, или равно длине пароля;

-numeric равно 3, если количество цифр в пароле больше 3, в противном случае - равно количеству цифр;

-numsymbols считается равным 3, если число символов в пароле, отличных от букв, цифр и знаков подчёркивания, больше 3, иначе - количеству таких символов;

-upper равно 3, если количество букв в верхнем регистре больше 3, или количеству заглавных букв в противном случае.

После вычисления вес пароля нормируется таким образом, чтобы его значение заключалось в интервале от 0 до 100. Нормировка проводится в том случае, когда значение веса не попадает в этот диапазон. В случае, когда pwstrength меньше 0, значение pwstrength приравнивают к нулю, а когда больше 0, значение веса устанавливают равным 100. Ранжирование же пароля по степени стойкости оставлено на усмотрение разработчиков.

Описанный анализатор не использует никаких проверок с использованием словарей, что делает его оценки несколько однобокими, и, вероятно, менее точными.


.2 Password Strength Meter (jQuery plugin)


Ещё одним вариантом оценщика пароля, работающего на клиентской стороне, является Password Strength Meter - плагин, разработанный для JavaScript фреймворка jQuery.

Процедура оценки работает следующим образом. Известно множество качеств, обладая которыми пароль увеличивает или уменьшает свою стойкость к подбору. Каждое такое качество имеет свой строго определённый вес. Алгоритм заключается в поэтапной проверке наличия у пароля этих качеств и, в случае их присутствия происходит увеличения суммарного веса пароля, по величине которого после просмотра всех характеристик делается заключение об уровне стойкости пароля.

Рассмотрим полный алгоритм процедуры оценки пароля:

1.Вес пароля устанавливается равным нулю.

2.Если длина пароля менее 4 символов, то работа алгоритма заканчивается и возвращается результат слишком короткий пароль. Иначе переходим к шагу 3.

3.Вес пароля увеличиваем на величину , где len - длина пароля.

.Осуществляется попытка сжатия пароля по следующему алгоритму. Если в пароле встречается подстрока вида SS, где S - строка длины 1, то первая часть этой подстроки удаляется и сжатие продолжается с позиции начала второй части этой подстроки. Например, применяя этот алгоритм к строке aaabbcab, на выходе получим строку abcab. После выполнения операции сжатия вес пароля уменьшается на величину , где len - длина пароля, а lenCompress - длина пароля после сжатия.

.Проводятся попытки сжатия пароля для случаев строк S длинной 2, 3 и 4 символов. Вес пароля уменьшается аналогично на величину .

Отметим, что сжатие каждый раз производится на проверяемом пароле, а не строках, полученных на предыдущих попытках.

6.Если пароль содержит не меньше 3 цифр, то увеличить вес на 5.

7.Если пароль содержит не менее 2 знаков, то увеличить вес на 5.

.Если пароль содержит буквы, как в верхнем, так и в нижнем регистрах, то увеличить вес пароля на 10.

.Если пароль содержит буквы и цифры, то увеличить вес пароля на 15.

10.Если пароль содержит знаки и цифры, то увеличить вес на 15.

11.Если пароль содержит буквы и знаки, то увеличить вес на 15.

.Если пароль состоит только из букв или только из цифр, то уменьшить вес пароля на 10.

.Если вес пароля меньше 0, то установить его равным 0. Если больше 100, то установить равным 100.

.Пароль, вес которого меньше 34, признаётся слабым. Если вес от 34 до 67, то пароль относится к категории хороший, а если более 67, то пароль считается отличным.


Рисунок 2.1 - Пример оценки стойкости пароля с использованием

Password Strength Meter

2.3 Cornell University - Password Strength Checker


Официальный on-line сервис <http://netid.cornell.edu/psc/>, предоставляемый центром безопасности Корнелльского университета (Итака, США). С его помощью пользователи могут проверить свой пароль, заполнив 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


Вывод: В рассмотренных выше программах <#"justify">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].

.Специальные символы [~`!@#$%^&*()-_+="].

.Цифры [1234567890].

.Остальные символы.

Рассмотрим алгоритм работы вспомогательного анализатора.

Для анализа стойкости используются следующие показатели:

-длина пароля;

-количество используемых типов символов: заглавные латинские, малые латинские, цифры, спец-символы;

-отсутствие слова в словаре (слова длиной от 3 до 16 символов) с учетом подобия символов;

-близость слова к словарному слову с определенной вероятностью;

Стойкость пароля подразделяется на пять классов:

1.Отличный (Best).

-длина пароля - не менее 14;

-количество используемых различных типов символов - не менее 3;

-в словаре отсутствует близкое с вероятностью 0.6 слово с учетом подобия символов.

2.Стойкий (Strong).

-длина пароля - не менее 8;

-количество используемых различных типов символов - не менее 3;

-в словаре отсутствует близкое с вероятностью 0.6 слово с учетом подобия символов.

3.Средний (Medium).

-длина пароля - не менее 8;

-количество используемых различных типов символов - не менее 2;

-слово отсутствует в словаре с учетом подобия символов;

4.Слабый (Weak).

-пароль состоит как минимум из одного произвольного символа.

.Никакой.

-все остальные пароли.


Таблица 3.1 - Подобие символов:

3?e9?gx?k+?t5?s@?a$?s0?o6?g1?17?t2?z8?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.

.Грушо А.А. Теоретические основы защиты информации / А.А. Грушо, Е.Е. Тимонина // - 1996. - С. 31.

.Домашев А.В. Программирование алгоритмов защиты информации / А.В. Домашев, А.Ю. Щербаков // - 2000. - С. 288.

.Варфоломеев А.А. Блочные криптосистемы. Основные свойства и методы анализа стойкости / А.А. Варфоломеев, А.Е. Жуков // - 1998. - С. 200.

.Спесивцев А.В. Защита информации в персональных / А.В. Спесивцев // - 1992. - С. 278.

.Ростовцев А.Г. Защита информации в компьютерных системах. Элементы криптологии / А.Г. Ростовцев, В.А. Матвеев / Под редакцией П.Д. Зегжды. - 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.

.Golic J.Dj. Linear models for keystream generators / J.Dj. Golic // IEEE Transactions on Computers. - 1996. - V. 45. - Р. 41-49.

.Menezes A.J. Handbook of Applied Cryptography / A.J. Menezes, S.A. Vanstone // - 1996. - Р. 780.


Приложение


Листинг алгоритма оценки стойкости пароля от Microsoft


var kNoCanonicalCounterpart = 0;kCapitalLetter = 0;kSmallLetter = 1;kDigit = 2;kPunctuation = 3;kAlpha = 4;

var kCanonicalizeLettersOnly = true;kCananicalizeEverything = false;

var gDebugOutput = null;kDebugTraceLevelNone = 0;kDebugTraceLevelSuperDetail = 120;kDebugTraceLevelRealDetail = 100;kDebugTraceLevelAll = 80;kDebugTraceLevelMost = 60;kDebugTraceLevelFew = 40;kDebugTraceLevelRare = 20;

var gDebugTraceLevel = kDebugTraceLevelNone;DebugPrint(){string = "";(gDebugTraceLevel && gDebugOutput && DebugPrint.arguments && (DebugPrint.arguments.length > 1) && (DebugPrint.arguments[0] <= gDebugTraceLevel)){(var index = 1; index < DebugPrint.arguments.length; index++){+= DebugPrint.arguments[index] + " ";

}+= "

\n";(string);

}

}CSimilarityMap(){.m_elements = "";.m_canonicalCounterparts = "";

}SimilarityMap_Add(element, canonicalCounterpart){.m_elements += element;.m_canonicalCounterparts += canonicalCounterpart;

}SimilarityMap_Lookup(element){canonicalCounterpart = kNoCanonicalCounterpart;index = this.m_elements.indexOf(element);(index >= 0){= this.m_canonicalCounterparts.charAt(index);

}{

}canonicalCounterpart;

}SimilarityMap_GetCount(){this.m_elements.length;

}.prototype.Add = SimilarityMap_Add;.prototype.Lookup = SimilarityMap_Lookup;.prototype.GetCount = SimilarityMap_GetCount;CDictionaryEntry(length, wordList){.m_length = length;.m_wordList = wordList;

}DictionaryEntry_Lookup(strWord){fFound = false;(strWord.length == this.m_length){nFirst = 0;nLast = this.m_wordList.length - 1;(nFirst <= nLast){nCurrent = Math.floor((nFirst + nLast)/2);(strWord == this.m_wordList[nCurrent]){= true;;

}if (strWord > this.m_wordList[nCurrent]){= nCurrent - 1;

}{= nCurrent + 1;

}

}

}fFound;

}.prototype.Lookup = DictionaryEntry_Lookup;CDictionary(){.m_entries = new Array()

}Dictionary_Lookup(strWord){(var index = 0; index < this.m_entries.length; index++){(this.m_entries[index].Lookup(strWord)){true;

}

}

}Dictionary_Add(length, wordList){iL=this.m_entries.length;cD=new CDictionaryEntry(length, wordList)

this.m_entries[iL]=cD;

}.prototype.Lookup = Dictionary_Lookup;.prototype.Add = Dictionary_Add;gSimilarityMap = new CSimilarityMap();gDictionary = new CDictionary();CharacterSetChecks(type, fResult){.type = type;.fResult = fResult;

}isctype(character, type, nDebugLevel){

var fResult = false;(type){

case kCapitalLetter:((character >= 'A') && (character <= 'Z')){= true;

};kSmallLetter:((character >= 'a') && (character <= 'z')){= true;

};kDigit:((character >= '0') && (character <= '9')){= true;

};kPunctuation:("!@#$%^&*()_+-=';:[{]}\|.>,</?`~".indexOf(character) >= 0){= true;

};kAlpha:(isctype(character, kCapitalLetter) || isctype(character, kSmallLetter)){= true;

};:;

}fResult;

}CanonicalizeWord(strWord, similarityMap, fLettersOnly){canonicalCounterpart = kNoCanonicalCounterpart;strCanonicalizedWord = "";nStringLength = 0;((strWord != null) && (strWord.length > 0)){= strWord;= strCanonicalizedWord.toLowerCase();(similarityMap.GetCount() > 0){= strCanonicalizedWord.length;(var index = 0; index < nStringLength; index++){(fLettersOnly && !isctype(strCanonicalizedWord.charAt(index), kSmallLetter, kDebugTraceLevelSuperDetail)){;

}= similarityMap.Lookup(strCanonicalizedWord.charAt(index));(canonicalCounterpart != kNoCanonicalCounterpart){= strCanonicalizedWord.substring(0, index) + canonicalCounterpart +.substring(index + 1, nStringLength);

}

}

}

}strCanonicalizedWord;

}IsLongEnough(strWord, nAtLeastThisLong){((strWord == null) || isNaN(nAtLeastThisLong)){false;

}if (strWord.length < nAtLeastThisLong){false;

}true;

}SpansEnoughCharacterSets(strWord, nAtLeastThisMany){nCharSets = 0;characterSetChecks = new Array(CharacterSetChecks(kCapitalLetter, false),CharacterSetChecks(kSmallLetter, false),CharacterSetChecks(kDigit, false),CharacterSetChecks(kPunctuation, false)

);((strWord == null) || isNaN(nAtLeastThisMany)){false;

}(var index = 0; index < strWord.length; index++){(var nCharSet = 0; nCharSet < characterSetChecks.length;nCharSet++){(!characterSetChecks[nCharSet].fResult && isctype(strWord.charAt(index), characterSetChecks[nCharSet].type, kDebugTraceLevelAll)){[nCharSet].fResult = true;;

}

}

}(var nCharSet = 0; nCharSet < characterSetChecks.length;nCharSet++){(characterSetChecks[nCharSet].fResult){++;

}

}(nCharSets < nAtLeastThisMany){false;

}true;

}FoundInDictionary(strWord, similarityMap, dictionary){strCanonicalizedWord = "";((strWord == null) || (similarityMap == null) || (dictionary == null)){true;

}= CanonicalizeWord(strWord, similarityMap, kCanonicalizeLettersOnly);(dictionary.Lookup(strCanonicalizedWord)){true;

}false;

}IsCloseVariationOfAWordInDictionary(strWord, threshold, similarityMap, dictionary){strCanonicalizedWord = "";nMinimumMeaningfulMatchLength = 0;((strWord == null) || isNaN(threshold) || (similarityMap == null) || (dictionary == null)){true;

}= CanonicalizeWord(strWord, similarityMap, kCananicalizeEverything);= Math.floor((threshold) * strCanonicalizedWord.length);(var nSubStringLength = strCanonicalizedWord.length; nSubStringLength >= nMinimumMeaningfulMatchLength; nSubStringLength--){(var nSubStringStart = 0; (nSubStringStart + nMinimumMeaningfulMatchLength) < strCanonicalizedWord.length; nSubStringStart++){strSubWord = strCanonicalizedWord.substr(nSubStringStart, nSubStringLength);(dictionary.Lookup(strSubWord)){true;

}

}

}false;

}ClientSideStrongPassword(){(IsLongEnough(ClientSideStrongPassword.arguments[0], "8") && SpansEnoughCharacterSets(ClientSideStrongPassword.arguments[0], "3") && (!(IsCloseVariationOfAWordInDictionary(ClientSideStrongPassword.arguments[0], "0.6", ClientSideStrongPassword.arguments[1], ClientSideStrongPassword.arguments[2]))));

}ClientSideBestPassword(){(IsLongEnough(ClientSideBestPassword.arguments[0], "14") &&(ClientSideBestPassword.arguments[0], "3") && (!(IsCloseVariationOfAWordInDictionary(ClientSideBestPassword.arguments[0], "0.6", ClientSideBestPassword.arguments[1], ClientSideBestPassword.arguments[2]))));

}ClientSideMediumPassword(){(IsLongEnough(ClientSideMediumPassword.arguments[0], "8") && SpansEnoughCharacterSets(ClientSideMediumPassword.arguments[0], "2") && (!(FoundInDictionary(ClientSideMediumPassword.arguments[0], ClientSideMediumPassword.arguments[1], ClientSideMediumPassword.arguments[2]))));

}ClientSideWeakPassword(){(IsLongEnough(ClientSideWeakPassword.arguments[0], "1") || (!(IsLongEnough(ClientSideWeakPassword.arguments[0], "0"))));

}GEId(sID){document.getElementById(sID);

}EvalPwdStrength(oF,sP){(ClientSideBestPassword(sP,gSimilarityMap,gDictionary)){(4,'pwdChkCon4');

}if(ClientSideStrongPassword(sP,gSimilarityMap,gDictionary)){(3,'pwdChkCon3');

}if(ClientSideMediumPassword(sP,gSimilarityMap,gDictionary)){(2,'pwdChkCon2');

}if(ClientSideWeakPassword(sP,gSimilarityMap,gDictionary)){(1,'pwdChkCon1');

}{(0,'pwdChkCon0');

}

}PadPasswd(oF,lPwd){(typeof oF.PwdPad=="object"){

var sPad="djg";lPad=sPad.length-lPwd;.PwdPad.value=sPad.substr(0,(lPad<0)?0:lPad);

}

}DispPwdStrength(iN,sHL){(iN>4){ iN=4;

}(var i=0;i<5;i++){sHCR="pwdChkCon0";if(i<=iN){=sHL;}if(i>0){("idSM"+i).className=sHCR;

}("idSMT"+i).style.display=((i==iN)?"inline":"none");

}

}


Министерство образования и науки Российской Федерации ГОУ ВПО «Северо-Кавказский государственный технический университет» Факультет информационн

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ