Мобильные телефоны и гаджеты

Мобильные телефоны и гаджеты

» » Самые сложные пароли в мире, проверка сложности паролей. Как создать и запомнить надёжный пароль Правильно генерируем пароль

Самые сложные пароли в мире, проверка сложности паролей. Как создать и запомнить надёжный пароль Правильно генерируем пароль

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

Сложность пароля обычно оценивают в терминах информационной энтропии (понятие из теории информации), измеряемой в битах. Вместо количества попыток, необходимых, чтобы точно угадать пароль, берется логарифм по основанию 2 от этого числа и называется количеством "битов энтропии" в пароле. Чтобы методом полного перебора взломать пароль с 40-битной сложностью, необходимо произвести 2 40 попыток, проверив все возможные варианты. Но обычно атакующему хватит проверки половины из всех возможных вариантов пароля, до того как найдет правильный. В одной из статей я уже приводил научное определение и формулу для вычисления энтропии, дублировать эту информацию не буду.

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

  1. function check_password_strength ($password ) {
  2. $h = 0 ;
  3. foreach (count_chars ($password , 1 ) as $v ) {
  4. $p = $v / strlen ($password );
  5. $h -= $p * log ($p )/ log (2 );
  6. $strength = intval (($h / 4 )* 100 );
  7. return $strength > 100 ? 100 : $strength ;

Чем ближе будет возвращаемое значение к 100, тем выше стойкость пароля. Вот результаты тестирования паролей из комикса и еще одного часто используемого простого пароля.Этот же алгоритм можно использовать не только на серверной стороне, но и на клиентской, еще на стадии ввода пароля пользователем. Вот функция на JavaScript, выполняющая проверку стойкости пароля:

  1. function check_password_strength (password ) {
  2. var h = 0 , p , chars =new Array;
  3. for (var i = 0 ; i < password . length ; i ++) {
  4. if (chars [ password . charAt (i )]== undefined ) {
  5. chars [ password . charAt (i )]= 0 ;
  6. chars [ password . charAt (i )]++;
  7. for (var v in chars ) {
  8. p = chars [ v ]/ password . length ;
  9. h -=(p * Math . log (p )/ Math . log (2 ));
  10. var strength = Math . round ((h / 4 )* 100 );
  11. return strength > 100 ? 100 : strength ;

Результаты тестирования совпадают с результатами PHP-функции:Эту функцию можно вызывать в обработчике onchange на поле ввода пароля и оповещать пользователя, например, изменением цвета фона текстового поля, сообщением или еще как-нибудь.

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

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

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

Использование

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

Определение сложности пароля

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

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

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

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

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

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

Создание пароля

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

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

Энтропия как мера сложности пароля

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

Случайные пароли

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

где 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. . НИСТ(США) предполагает следующию схему, чтобы оценить энтропию пароля созданного человеком:

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

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

Битовый порог сложности

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

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

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

  • Минимальная длина пароля в пределах от 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 дней может помочь гарантировать, что атакующему не хватит времени для взлома.
  • Если пароль был дискредитирован, требование, регулярно его изменять, должно ограничить время доступа атакующего к системе.

Создание и обращение с паролем

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

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

Оригинальный текст (англ.)

Simply, people can no longer remember passwords good enough to reliably defend against dictionary attacks, and are much more secure if they choose a password too complicated to remember and then write it down. We"re all good at securing small pieces of paper. I recommend that people write their passwords down on a small piece of paper, and keep it with their other valuable small pieces of paper: in their wallet.

Брюс Шнайер 2005

Техники запоминания

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

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

Защита паролей

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

Менеджеры паролей

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

См. также

Примечания

  1. Анастасия Симакина 40% паролей можно взломать из-за простоты // Сайт cnews.ru (Проверено 7 ноября 2011)

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

Известно, что 1% пользователей сети то ли из-за лени, то ли из-за халатности при регистрации предпочитают использовать примитивные комбинации, которые можно подобрать с 3-4 попыток. Примеры - «123456», «qwerty», «mypassword». Это, безусловно, является очень большой глупостью. «Лёгкий» ключ для пользователя является «лёгким» и для взломщика.

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

Какой пароль можно назвать надёжным?

Хорошие ключи от учётной записи имеют следующие характеристики:

1. Длина не меньше 10-15 символов (самые устойчивые комбинации и того больше - 20-35 символов).

2. Символьный состав: большие и маленькие английские буквы, цифры, спецсимволы.

3. В комбинации отсутствуют словарные слова (parol, kod, vhod), личные данные (номер телефона, имя, e-mail и т.д.), логические последовательности букв и цифр (1234, 246810, abcdefg).

Чем сложнее, надёжнее комбинация, тем труднее сделать её подбор. Чтобы установить придуманную пользователем последовательность из 12 знаков, может понадобиться свыше 1,5 млн. лет.

Создание сложного ключа

Рядовые пользователи Сети и специалисты по безопасности уже нашли множество правильных ответов-решений на вопрос «Как создать надёжный пароль?». В рамках этой статьи мы познакомимся с тремя наиболее практичными способами.

Способ №1: подмена букв

Не на всех первых мобильных телефонах поддерживался русский язык, и их владельцы отправляли СМС-ки, используя транслитерацию. То есть писали латинскими буквами по-русски, а недостающие литеры заменяли символами. Например: «ч» - «4». Фраза «Что делаешь?», выглядела как «4to delaesh?». Этот же принцип лежит и в основе данного способа составления ключей.

Возьмите какое-нибудь слово или словосочетание, а затем запишите его с использованием «хитрых» обозначений. Вместо пробелов можно использовать в качестве разделителей любые спецсимволы «~», «/», «.» и др. Например, можно придумать такую комбинацию:

«Опасная зона» запишем как «onACHA9I#3OHA».

Как видите, слова мы записали латинскими буквами и вдобавок заменили кое-какие русские литеры. Вместо «п» - «n», «я» - «9I», «з» - «3» (цифра «три»). И поставили разделитель «#» между словами. Вот и получился достаточно сложный вариант. Чтобы разгадать такой тип символьного сочетания, компьютерным злодеям придётся как следует покорпеть.

В помощь таблица символьных обозначений русских букв:

Способ №2: создание «читаемого» ключа в генераторе

1. Откройте в браузере онлайн-сервис - http://genpas.peter23.com/.

2. В опции «Режим работы» клацните радиокнопку «Произносимый пароль… ».

3. Дополнительно включите/отключите символьные наборы для комбинаций ключа и установите его длину.

4. Нажмите кнопку «Генерировать».

5. Выберите наиболее оптимальный вариант из генерированных последовательностей.

6. Разбейте выбранный пароль на фрагменты из 2-3 символов и придайте каждому фрагменту определённый смысл. В такой «логической цепочке» очень легко запомнить самую сложную комбинацию. В качестве примера давайте разберём ключ, созданный в этом генераторе:

Xoh)ohfo1koh

  • Xoh) - можно прочитать как «Хох» + «смайлик»;
  • oh - «ох»;
  • fo1 - пусть это будет какая-то загадочная аббревиатура;
  • koh - кох - опять вариация начального слога.

Способ №3: добавка спецсимволов в простые слова

1. Возьмите за основу какое-либо хорошо знакомое вам слово:

space2017

2. Придумайте сочетание спецсимволов из 2 или 3 знаков.

«+_&»

3. Добавьте сочетание в начале и в конце слова в зеркальном отображении.

+_&space2017&_+

4. В итоге вы получите достаточно «крепкий» ключ. Безусловно, его нельзя назвать самым устойчивым, однако он легко запоминается и по своей структуре не является примитивным.

Внимание! Перед составлением пароля обязательно ознакомьтесь с требованиями сервиса, на котором регистрируетесь. К примеру, на портале Майл.ру нельзя использовать кириллицу (русские буквы).

Проверка ключа на надёжность

Проанализировать устойчивость выбранной комбинации можно на специальных сервисах.

Предоставляет пользователю подробный анализ указанной комбинации (символьные наборы, длину), а также оценивает её сложность в процентах.

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

Пользуйтесь только надёжными паролями! Они являются залогом вашей безопасности в Сети.

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

"password" => [ "required", "confirmed", "min:8", "regex:/^(?=\S*)(?=\S*)(?=\S*[\d])\S*$/", ];
К сожалению, такие простые правила означают, что пароль Abcd1234 будет признан хорошим и качественным, так же как и Password1 . С другой стороны, пароль mu-icac-of-jaz-doad не пройдёт валидацию.

Вот первые два пароля.

А вот два пароля, которые не пройдут проверку на надёжность.

Что же делать? Может, не стоит принуждать к использованию спецсимволов и внедрять всё новые правила, вроде запрета на повтор нескольких символов подряд, использование не одного, а двух-трёх спецсимволов и цифр, увеличение минимальной длины пароля и т д.

Вместо всего этого достаточно сделать простую вещь - просто установить ограничение на минимальную энтропию пароля, и всё! Можно использовать для этого готовый оценщик zxcvbn .

Есть и другие решения, кроме zxcvbn. Буквально на прошлой неделе на конференции по безопасности ACM Computer and Communications Security была представлена научная работа (pdf) специалистов по безопасности из научно-исследовательского подразделения Symantec Research и французского исследовательского института Eurecom. Они разработали новую программу для проверки надёжности паролей, которая оценивает примерное количество необходимых попыток брутфорса, используя метод Монте-Карло . Предлагаемый способ отличается тем, что требует минимальное количество вычислительных ресурсов на сервере, подходит для большого количества вероятностных моделей и в то же время довольно точный. Метод проверили на паролях из базы 10 млн паролей Xato, которые лежат в открытом доступе (копия на Archive.org) - он показал хороший результат. Правда, это исследование Symantec Research и Eurecom носит скорее теоретический характер, по крайней мере, свою программу они не выложили в открытый доступ в каком-либо приемлемом виде. Тем не менее, смысл работы понятен: вместо эвристических правил проверки паролей веб-сайтам желательно внедрить проверку на энтропию.


Всем известно, что пароли бывают сложными и не очень. Например, alpine - не очень сложный пароль, и устанавливать его паролем пользователя root на миллионе подключенных к Интернету устройств -- по меньшей мере неразумно. 7_U]Ah"C же, напротив, достаточно сложный пароль. Это вам подтвердит любой продвинутый Интернет-пользователь, а некоторые даже смогут объяснить почему. Мол, и длиннее он, и символов в нем разных много: тут вам и заглавные и прописные буквы, и спец-символы всякие. В общем, сложный он, и уж точно сложнее пароля alpine .

А как сравнить сложность двух паролей, когда разница не так очевидна? Например, какой пароль сложнее: 7_U]Ah"C или xrmdCawGZ ? Хотя второй пароль, казалось бы, состоит из меньшего разнообразия символов, - букв разного регистра, - он длиннее на один символ. Достаточно ли этого, чтобы компенсировать скудность алфавита?

Алфавитом называется множество символов, из которых может состоять пароль. В нашем примере пароль 7_U]Ah"C составлен из алфавита, содержащего следующие символы:

  • Латинские буквы в обоих регистрах: a-z, A-Z (26*2=52 шт.)
  • Цифры: 0-9 (10 шт.)
  • Специальные символы: ! , " , # , $ , % ... (32 шт.)
Размер такого алфавита равен M = 52 + 10 + 32 = 94 , а сложность пароля из восьми (N=8) его символов вычисляется по формуле M**N = 94**8 .

Сложность пароля (или криптоключа) выражается в т.н. коэффициенте трудоемкости шифра (work factor). Наиболее распространенное объяснение сути КТШ звучит так: это время и компьютерные ресурсы, необходимые для взлома пароля путем полного перебора (brute force ) всех его возможных вариантов. Из комбинаторики знаем, что количество комбинаций из M (размер алфавита) по N (длина пароля) равняется M**N (M в степени N).

Сложность пароля обычно называют его битностью . Говоря, что пароль K-битный , мы имеем в виду, что его сложность сравнима со сложностью пароля из K нулей и единиц (алфавита из всего двух символов: 0 и 1). Например, 7_U]Ah"C -- 52-битный пароль: K = log2 (94**8) = log2 (6095689385410816) ~ 52 .

У пароля xrmdCawGZ более скромный алфавит: из латинских букв в обоих регистрах, всего получается 26*2 = 52 символа. Сложность, соответственно, равна M**N = 52**9 = 2779905883635712 , а битность -- K = log2 (2779905883635712 ) ~ 51 . Следовательно, первый пароль приблизительно в два раза сложнее второго, что в общем не является преимуществом.

Возникает вопрос, зачем тогда нам алфавиты из всех этих кавычек, скобочек и прочих закорючек? Не легче ли просто выдумывать длинные пароли из более привычных символов? Ответ прост: не зачем. Лучше и надежнее будет запомнить длинную пассфразу, пусть в ней и не будет экзотических знаков. В настоящее время надежной считается пассфраза битности 128 и выше. То есть, фразы из 20 букв будет вполне достаточно.