Сложность паролей

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

Еще о паролях в этом блоге.
Alt text

Устали от того, что Интернет знает о вас все?

Присоединяйтесь к нам и станьте невидимыми!

Vlad Styran

информационно. безопасно.*