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

Друзья, сегодня у нас очень интересная тема и впереди три не менее интересных вопроса. Насколько надежным является мой пароль? Сколько потребуется времени, чтобы его взломать? Как сделать пароль более-менее надежным?

На эти вопросы отвечает сервис «How Secure Is My Password?», что в переводе звучит так: «Насколько надежен мой пароль».

Официальный сайт: http://www.howsecureismypassword.net/

Выглядит этот сервис следующим образом:

Нам достаточно ввести пароль и проверить его надежность.

Давайте добавим в основное окошко сайта комбинацию цифр 12345678, и посмотрим, что нам «скажет» этот сервис:

Система выводит следующее:

  • Пароль 12345678 входит в ТОП-10 самых распространенных паролей и может быть взломан мгновенно.
  • Нежелательно использовать пароль в виде даты рождения или телефонного номера.
  • Наш пароль содержит только буквы и цифры (в данном случае это только цифры). Система рекомендует дополнительно использовать нестандартные символы и пробелы.

А теперь я попробую ввести 20-ти значный пароль:

Результат уже получше будет:

  • Пароль является больше 16-ти знаков, поэтому все хорошо.
  • Мой пароль является нестандартным, так как содержит в себе нестандартные символы (пробел).
  • По расчетам системы, мой пароль взломают за 1 квинтиллион лет (это единица с 18 нулями).

Кстати, если мы вводим русские символы, сервис считает это нестандартным решением.

Также сервис предлагает создать пароль автоматически:

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

Вы догадывались, да? Простите за банальность, но это главный совет - которым до сих пор большинство пользователей пренебрегают. Недаром пароли типа qwerty остаются в топе самых популярных по сей день.

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

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

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


Успешного вам составления ключа и безопасного пользования интернетом!

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

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

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


Всем известно, что пароли бывают сложными и не очень. Например, 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 букв будет вполне достаточно.