Сложность пароля

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Сложность пароля — мера эффективности, с которой пароль способен противостоять его угадыванию или методу полного перебора. В своей обычной форме сложность пароля является оценкой того, как много попыток в среднем потребуется взломщику, без прямого доступа к паролю, для его угадывания. Другое определение термина — функция от длины пароля, а также его запутанности и непредсказуемости.

Использование[править | править вики-текст]

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

Определение сложности пароля[править | править вики-текст]

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

Проверка предположительного пароля на правильность[править | править вики-текст]

Самый очевидный способ проверить догадку — попытаться использовать её для допуска к ресурсу, защищённому угадываемым паролем.

Однако этот способ может быть медленным, и достаточно большое количество систем задерживает или блокирует доступ к аккаунту после нескольких неверных попыток. С другой стороны, системы, которые используют пароли для аутентификации, должны хранить их в каком-либо виде, чтобы сверять их с введёнными значениями. Обычно вместо самого пароля хранится только криптографическая хеш-функция пароля. Если хеш-функция достаточно сложная, то её очень сложно обратить. То есть если атакующий имеет на руках значение хешированного пароля, то он не сможет напрямую восстановить из него пароль. Однако, если украдена криптографическая хеш-функция, то знание хешированного значения позволит атакующему быстро проверять предположительные пароли.

Ещё один способ быстрого угадывания возможен, когда пароль используется для формирования криптографического ключа. В таких случаях атакующий может быстро проверить пароль, смотря насколько успешно он декодирует зашифрованные данные.

Если в системе паролей не используется криптографическая соль, то атакующий может заранее вычислить значение хеш-функции для распространённых вариантов паролей, а также для всех паролей меньше определённой длины, что позволяет очень быстро восстановить пароль. Большие списки заранее посчитанных хеш-функций паролей можно эффективно хранить, используя радужную таблицу. Такие таблицы доступны в интернете для некоторых публичных систем аутентификации паролей.

Создание пароля[править | править вики-текст]

Пароли создаются или автоматически (используя генераторы случайных чисел), или человеком. Сложность произвольно выбранного пароля против атаки полным перебором может быть точно вычислена. В большинстве случаев, пароли изначально создаются человеком, которого просят выбрать пароль, иногда направляя его советами или набором правил. Это типично происходит во время создания аккаунта для компьютерных систем или веб-сайтов. В этом случае возможны только оценки сложности пароля, так как люди склонны следовать шаблонам в таких задачах, и эти шаблоны всегда играют на руку атакующему. Кроме того, списки часто выбираемых паролей всеобще распространены для использования в программах угадывания паролей. Любой из многочисленных словарей для разнообразных языков — это такой список. Все элементы в таком списке считаются слабыми при использовании в качестве пароля. Несколько десятилетий анализа паролей в многопользовательских компьютерных системах показали[1], что больше 40 % паролей легко отгадать, используя только компьютерные программы, и ещё больше можно отгадать, когда во время нападения учитывается информация о конкретном пользователе.

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

Энтропия как мера сложности пароля[править | править вики-текст]

В компьютерной индустрии обычно оценивают сложность пароля в терминах информационной энтропии (понятие из теории информации), измеряемой в битах. Вместо количества попыток, необходимых, чтобы точно угадать пароль, берется логарифм по основанию 2 от этого числа и называется количеством «битов энтропии» в пароле. Пароль со, скажем, 42-битной сложностью, посчитанной таким путем, будет соответствовать случайно сгенерированному паролю длиной в 42 бита. Другими словами, чтобы взломать пароль с 42-битной сложностью, необходимо произвести 242 попыток, исчерпав все возможные варианты методом полного перебора. Таким образом, добавление одного бита энтропии к паролю удваивает количество необходимых догадок, что делает задачу атакующего в два раза сложнее. В среднем, атакующий должен будет проверить половину из всех возможных вариантов пароля, до того как найдет правильный. (Закон больших чисел)

Случайные пароли[править | править вики-текст]

Случайные пароли состоят из строки символов специфичной длины, взятых из какого-либо набора символов, используя процесс случайного выбора, в котором каждый символ равновероятен. Сложность случайного пароля зависит от фактической энтропии подразумеваемого генератора случайных чисел; зачастую используются генераторы псевдослучайных чисел. Множество публично-доступных генераторов паролей используют генераторы случайных чисел, находящихся в программных библиотеках, которые предлагают ограниченную энтропию. Однако, большинство современных операционных систем имеют криптографически сильные генераторы случайных чисел, которые подходят для генерации пароля. Для создания случайного пароля также возможно использовать обычные игральные кости. Программы для случайных паролей часто имеют свойство гарантировать, что результат будет удовлетворять местной политике паролей; например, всегда создавая пароль из смеси букв, чисел и специальных символов. Сложность случайного пароля, измеренная в терминах информационной энтропии, будет равна

H = log_2 N^L = L\log_2 N = L {\log N \over \log 2}

где N — это количество возможных символов, а L — количество символов в пароле. H измеряется в битах.

Энтропия на 1 символ для разных наборов символов
Набор символов Количество символов N Энтропия на 1 символ H
Арабские цифры (0-9) 10 3.3219 бита
Шестнадцатеричная система (0-9, A-F) 16 4.0000 бита
Латинский алфавит без верхнего регистра (a-z) 26 4.7004 бита
Алфавитные и числовые символы без верхнего регистра (a-z, 0-9) 36 5.1699 бита
Латинский алфавит с верхним регистром (a-z, A-Z) 52 5.7004 бита
Алфавитные и числовые символы с верхним регистром (a-z, A-Z, 0-9) 62 5.9542 бита
Все печатные символы ASCII 95 6.5699 бита

Пароли, придуманные людьми[править | править вики-текст]

Живые люди чаще создают пароли с недостаточно высокой энтропией. Некоторые фокусники используют эту человеческую неспособность для развлечения и увеселения зрителей, угадывая предположительно случайные числа, загаданные зрителями. Так например, в одном анализе из трех миллионов восьмизначных паролей, буква «e» была использована 1.5 миллиона раза, в то время как бука «f» была использована только 250,000 раз. При равномерном распределении каждый символ встречался бы 900,000 раз. Самая распространенная цифра это «1», тогда как наиболее популярные буквы это a, e,o и r.[2]. НИСТ(США) предполагает следующую схему, чтобы оценить энтропию пароля созданного человеком:

  • Энтропия первого символа равна 4 битам;
  • Энтропия следующих семи символов по 2 бита каждый;
  • От 9го до 20 символа 1.5 бита энтропии на символ;
  • От 21 и дальше каждый символ несет в себе 1 бит энтропии;
  • Если используется также верхний регистр букв и неалфавитные символы, то добавляется ещё 6 битов.

Это значит, что пароль длиной в 8 символов, придуманный человеком, без верхнего регистра и без неалфавитных символов имеет сложность около 18 битов. Однако, схема основана на том предположении, что пользователи выбирают пароли с той же энтропией, что и обычный английский текст.

Битовый порог сложности[править | править вики-текст]

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

Некоторые основные критерии надежности были установлены для метода полного перебора, в контексте попытки нахождения ключа, используемого при шифровании. Эта проблема не та же самая, так как эти методы включают в себя астрономическое количество попыток, но результаты могут помочь определиться с выбором пароля. В 1999 году проект Electronic Freedom Foundation взломал 56-битный DES шифр меньше чем за один день, используя специально спроектированное аппаратное оборудование[3]. В 2002 году distributed.net взломал 64-битный ключ за 4 года 9 месяцев и 23 дня[4]. А 12 октября 2011 distributed.net оценила, что для взлома 72-битного ключа используя нынешние возможности потребуется 124.8 лет[5]. Ввиду огромной сложности и из-за ограничений, связанных с нашим пониманием законов физики, нельзя ожидать, чтобы какой-либо цифровой компьютер (или комбинация) был способен взломать 256-битный шифр с помощью метода полного перебора[6]. Так или иначе, в теории существует возможность (Алгоритм Шора), что квантовые компьютеры смогут решать такие задачи, однако, возможно ли это будет на практике — доподлинно неизвестно.

Как результат — нельзя дать точный ответ на, в некоторой степени другую проблему, проблему оптимальной сложности пароля. NIST рекомендует использовать пароль в 80-бит энтропии для наилучшей защиты, который может быть достигнут с помощью 95-символьного алфавита (то есть символьный набор ASCII) 12-символьным паролем (12 * 6.5 битов = 78).

Рекомендации по созданию сложного пароля[править | править вики-текст]

Общие рекомендации[править | править вики-текст]

Рекомендации по выбору хорошего пароля составлены для того, чтобы сделать пароль более стойким к разнообразным ухищрениям взломщиков[7][8].

  • Минимальная длина пароля в пределах от 12 до 14 символов. Увеличение пароля всего на 2 символа дает в 500 раз больше вариантов, чем увеличение алфавита на 18 символов
  • Генерирование случайных паролей, если это возможно
  • Избегать пароли, основанные на повторении, словарных словах, буквенных или числовых последовательностях, имени пользователя, именах родственников или домашних животных, романтических отсылках (нынешних или прошлых), биографической информации.
  • Включение в пароль цифр и иных символов, если это разрешено системой.
  • Использовать как прописные, так и строчные буквы, когда это возможно.
  • Избегать использовать один и тот же пароль для различных сайтов или целей.

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

Примеры слабых паролей[править | править вики-текст]

Некоторые похожие пароли оказываются слабее чем другие. Например, разница между тем как если бы пароль был задан словарным словом и словом спутанным (то есть буквы в пароле заменены на, скажем, цифры — распространенный подход) может стоить прибору для взлома паролей несколько лишних секунд — это добавляет к паролю немного сложности. Примеры ниже иллюстрируют разнообразные способы, которыми могут быть созданы слабые пароли. Каждый из них основан на простом шаблоне, из чего следует очень низкая энтропия, что позволяет очень быстро их угадывать.

  • Пароль по умолчанию: password, default, admin, guest и другие. Список паролей по умолчанию широко распространен по интернету.
  • Словарные слова: chameleon, RedSox, sandbags, bunnyhop!, IntenseCrabtree и другие, включая слова из не английских словарей.
  • Слова с добавленными числами: password1, deer2000, ivan1234 и другие. Могут быть очень быстро проверены.
  • Слова с простой заменой букв: p@ssw0rd, l33th4x0r, g0ldf1sh и другие. Могут быть проверены автоматически с небольшими временными затратами.
  • Удвоенные слова: crabcrab, stopstop, treetree, passpass и другие.
  • Распространенные последовательности на клавиатуре: qwerty, 12345, asdfgh, fred и другие.
  • Числовые последовательности, основанные на хорошо известных наборах: 911, 314159… или 271828…, 112358… и другие.
  • Личные данные: ivpetrov123, 1/1/1970, номер телефона,%username%, номер ИНН, адрес и другие.

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

Политика паролей[править | править вики-текст]

Политика создания паролей это проводник для выбора удовлетворительного пароля. Обычно она представляет собой:

  • Помощь пользователем в выборе мощного пароля.
  • Гарантия того, что пароли будут подходить к целевой аудитории.
  • Рекомендации пользователям в отношении обращения с их паролями.
  • Требования изменить любой пароль, который был потерян или дискредитирован и возможно использовался дольше определенного времени.
  • Некоторые политики содержат шаблон символов, которые должен содержать пароль.

В политику создания паролей часто включают истечение срока годности. Срок годности служит двум целям:

  • Если время взлома пароля оценивается в 100 дней, то срок годности менее 100 дней может помочь гарантировать, что атакующему не хватит времени для взлома.
  • Если пароль был дискредитирован, требование регулярно его изменять должно ограничить время доступа атакующего к системе.

Создание и обращение с паролем[править | править вики-текст]

При заданной длине и наборе возможных символов труднее всего взломать пароли в виде строки случайных символов. Они достаточно долго выдерживают атаку полным перебором (из-за высокой энтропии), но их и труднее всего запомнить. Если потребовать наличия у пользователей сложных паролей, это будет способствовать тому, что пароли станут записывать на бумажке, мобильных телефонах, на КПК или делиться ими с другими на случай ошибок в памяти. Брюс Шнайер рекомендует записывать свои пароли.

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

— Брюс Шнайер 2005

Техники запоминания[править | править вики-текст]

Политики паролей иногда предлагают техники запоминания, помогающие запоминать пароли:

  • Мнемонические пароли: Некоторые пользователи разрабатывают мнемонические фразы и используют их, чтобы генерировать высокоэнтропийные пароли, которые тем не менее относительно легче запомнить (например, первая буква каждого слова в запомнившейся фразе). Также, вместо букв, можно для более простого запоминания использовать слоги.
  • Мнемоника постфактум: После того как пароль был придуман, необходимо придумать фразу или предложение которое к нему подходит. Оно необязательно должно быть разумным, только запоминающимся. Это позволит паролю быть случайным.
  • Шаблоны паролей: Любые шаблоны в пароле делают угадывание (автоматичное или нет) легче и уменьшает работу атакующему.

Защита паролей[править | править вики-текст]

Компьютерным пользователям обычно советуют «никогда не записывайте нигде свои пароли» и «никогда не используйте один пароль больше чем на одном аккаунте». В то время как обычный пользователь может иметь десятки аккаунтов защищенных паролями. Пользователи со множеством аккаунтов часто сдаются и используют один и тот же пароль для всех аккаунтов. Существует программное обеспечение, которое позволяет хранить пароли в зашифрованной форме. Другой метод — зашифровать пароль вручную и записать шифрограмму на бумаге, запомнив метод расшифровки и ключ. Ещё один метод — это слегка изменять пароли для обычных аккаунтов и выбирать сложные и различные пароли для меньшего количества высокоценных приложений, таких как например Интернет-банкинг.

Менеджеры паролей[править | править вики-текст]

Разумный компромисс использования большого количества паролей — записать их в менеджер паролей. Такое приложение позволяет пользователю использовать сотни различных паролей, запоминая при этом только один, который открывает зашифрованные данные. Такой пароль, естественно, должен быть как можно более сложным и не должен быть нигде записан.

См. также[править | править вики-текст]

Примечания[править | править вики-текст]

  1. Анастасия Симакина 40 % паролей можно взломать из-за простоты // Сайт cnews.ru  (Проверено 7 ноября 2011)
  2. Распределение символов в паролях // Сайт habrahabr.ru.  (Проверено 7 ноября 2011)
  3. Задача взлома шифра DES решена за 22 часа // Сайт AlgoNet.ru.  (Проверено 7 ноября 2011)
  4. Взломан 64-битный шифр RSA // Сайт Securitylab.ru, 29 сентября, 2002 года.  (Проверено 7 ноября 2011)
  5. RC5-72 / Overall Project Stats // Сайт stats.distributed.net (на английском языке) (Проверено 7 ноября 2011)
  6. Bruce Schneier«Snakeoil: Warning Sign #5: Ridiculous key lengths» // Сайт www.schneier.com  (англ.) (Проверено 7 ноября 2011)
  7. Как обеспечить безопасность пароля? // Сайт www.google.com, рекомендации.  (Проверено 7 ноября 2011)
  8. Bruce Schneier Choosing Secure Passwords // Сайт www.schneier.com, 11 января 2007 года. (на английском языке) (Проверено 7 ноября 2011)

Ссылки[править | править вики-текст]