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

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

Сло́жность (или сила, стойкость) паро́ля — мера оценки времени, которое необходимо затратить на угадывание пароля или его подбор каким-либо методом, например, методом полного перебора. Оценка того, как много попыток (времени) в среднем потребуется взломщику для угадывания пароля. Другое определение термина — функция от длины пароля, его запутанности и непредсказуемости.

Слабый пароль — пароль, который может быть легко угадан или подобран методом полного перебора. Сильный пароль — пароль, который трудно угадать и долго подбирать методом полного перебора.

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

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

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

Существуют два фактора, определяющих сложность пароля:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Энтропия на один символ (L=1) для разных наборов символов
Набор символов Количество символов, N Энтропия на один символ, 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].

Национальный институт стандартов и технологий (США) (NIST) для оценки энтропии пароля, созданного человеком и не включающего символы из неанглийских алфавитов, предлагает использовать следующий алгоритм:

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

По этому алгоритму энтропия придуманного человеком пароля, составленного из 8 символов, не содержащего заглавных букв и не содержащего неалфавитных символов, составит около 4+7*2=18 бит. Алгоритм основан на том предположении, что люди выбирают пароли с той же энтропией, что и обычный английский текст.

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

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

Некоторые критерии надёжности были найдены при поиске ключа, используемого для шифрования данных, методом полного перебора. Эта проблема не та же самая, так как эти методы включают в себя астрономическое количество попыток, но результаты могут помочь определиться с выбором пароля. В 1999 году участники проекта Electronic Frontier 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»), повторяющиеся наборы букв («passpass»), буквенные или числовые последовательности («aaa», «123»), ники, имена (собственное имя, имена родственников), клички домашних животных, романтические отсылки (нынешние или прошлые), биографическую информацию.
  • Рекомендуется включать в пароль цифры и иные символы, если это разрешено системой.
  • Рекомендуется использовать как прописные, так и строчные буквы, когда это возможно. Однако, см. пункт 1, может быть лучше добавить к паролю слово, чем каждый раз нажимать и отпускать в нужных местах клавишу Shift.
  • Рекомендуется избегать использования одного пароля для различных сайтов или целей.
  • В качестве пароля можно использовать осмысленные вещи, которые представляют собой сложные наборы символов. Например, номера автомобилей, коды от домофона, химические и физические формулы, записи шахматных комбинаций и т.д.

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

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

Некоторые похожие пароли оказываются слабее, чем другие. Например, разница между паролем, состоящим из словарного слова, и паролем, состоящим из слова спутанного (то есть слова, буквы в котором заменены на, скажем, цифры сходного начертания, например: «о» на «0», «ч» на «4»), может стоить прибору для взлома паролей несколько лишних секунд — это добавляет к паролю немного сложности. В приведённых ниже примерах показаны разнообразные способы создания слабых паролей. В способах используются простые шаблоны, чем и объясняется низкая энтропия получаемых паролей — лёгкость их угадывания.

  • Пароли по умолчанию: «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», номер телефона, имя пользователя, ИНН, адрес и другие.

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

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

Политика создания паролей — набор правил, призванных:

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

Некоторые политики требуют, чтобы:

  • любой пароль, который был потерян или дискредитирован и, возможно, использовался дольше определённого времени, был изменён;
  • любой пароль содержал определённые в шаблоне символы.

Установка интервала времени, в течение которого пароль может использоваться, служит для предоставления гаратий того, что:

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

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

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

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

Брюс Шнайер 2005

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

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

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

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

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

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

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

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

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

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

Ссылки[править | править код]