Тариф успешно добавлен в корзину
В корзину

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

Автор статьи Речкин Антон

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

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

1qaz@WSX

g0ldf1sh

 l33th4x0r

Первый — содержит клавиатурные последовательности символов. 

Второй — фактически обычное слово с подменой символов на похожие. 

goldfish: o → 0; i → 1

Третий — фраза «elite hacker», написанная в стиле «leet». 

И все три варианта служат отличным примером, как не надо подходить к придумыванию пароля.

Что делает пароль надёжным

Сложность пароля, или устойчивость к подбору, определяется несколькими факторами одновременно.

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

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

Длина пароля

Всего несколько лет назад нормальной практикой было использовать 7-ми или 8-символьные пароли. В текущих реалиях же подбор пароля из семи символов, точнее, его хэша, займёт всего ~29 миллисекунд. 8-символьный пароль можно подобрать в течение нескольких (~5-8) часов.

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

Говоря о времени подбора пароля, можно иметь в виду разные вещи:

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

В обоих случаях время подбора определяется производительностью программного обеспечения, через которое выполняется подбор, и вычислительными мощностями, которые ему доступны. Например, Hashcat в зависимости от алгоритма хэширования может работать со скоростью до 100 миллиардов хэшей в секунду (на очень древнем алгоритме NTLM) или до 28 000 хэшей в секунду на более сложных алгоритмах типа bcrypt. И это значения 2019 года — а с тех пор вышло много нового мощного железа. 

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

Длина набора символов (алфавита)

Представим стандартный английский алфавит из 26 символов. Если вспомнить комбинаторику, для пароля из 12 символов количество возможных комбинаций составит 2612 — 95 квадриллионов вариантов (95,4 * 1015). Если учесть символы верхнего и нижнего регистра — 5212, 390 квинтиллионов вариантов (390,9 * 1018), в 4 000 раз больше. А если ещё добавить сверху цифр и специальных символов — ну, вы поняли фишку. Чем больше разных символов может входить в состав пароля, тем больше комбинаций придётся проверить, и тем больше времени займут попытки подбора.

Энтропия

Страшное слово, но как раз оно и является столпом, на котором зиждется надёжность пароля. 

Если простым языком, это измеренная в битах сложность пароля. Ну или мера непредсказуемости появления того или иного символа в последовательности. 

А если подробнее, каждый символ в одном наборе имеет относительную частотность использования. То же самое можно сказать и про буквы в обычном языке, на котором мы общаемся. Вот здесь, например, представлена частотность букв алфавита и некоторых буквосочетаний в английском языке. Чаще всего используются буквы E, A, T, N, O, S, I, R, реже всего — J, X, Z, Q. Частотность может рассчитываться в разных контекстах — как в рамках целого языка, так и просто в рамках отдельного текста или набора символов. И на базе этих значений рассчитывается бит энтропии для каждого отдельного знака — то есть насколько непредсказуемо его появление.

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

Поиграем с вычислением битов энтропии для различных наборов символов, которые можно использовать в паролях:

  • abcdefghijklmnopqrstuvwxyz — 4.70 бит на символ
  • abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ — 5.70 бит  на символ
  • abcdefghijklmnopqrstuvwxyzQWERTYUIOPASDFGHJKLZXCVBNM0123456789 — 5.95 бит на символ
  • abcdefghijklmnopqrstuvwxyzQWERTYUIOPASDFGHJKLZXCVBNM0123456789/*-+!@#$%^&()_= — 6.27 бит на символ

Это демонстрирует зависимость надёжности пароля от того, какой набор символов используется. Больше набор символов — выше значение энтропии на каждый символ — сложнее подобрать пароль.

Для закрепления: пароль 123456789 можно подобрать 431 раз, пока вы один раз моргнёте. 

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

Как придумать надёжный пароль

Мнемонические техники

Самый просто пример. Представим, что вам потребовалось придумать новый пароль. Чтобы начать, нужно придумать какую-то фразу или факт, которые вы можете легко вспомнить в любой момент времени. Например, цитата из Маленького принца: «А на самом деле он не человек. Он гриб!» Или, чтобы было удобнее, «But he is not a man — he is a mushroom!».

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

Например:

  1. Берём первые буквы каждого слова:

    Bhinamhiam

    До 12 символов недобор, добавим восклицательный знак и AE — аббревиатуру автора.

    Bhinamhiam!AE
  2. Меняем отдельные буквы на похожие символы: 

    8h1@mhiam!A3

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

  3. Выполняем сдвиг каждого знака на N в сторону. Например, от клавиши 8 отступаем две клавиши вправо и получаем 0, и так с каждым символом:

    0k3$.kpd.#D5

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

Если, например, вам нужны пароли к нескольким сервисам, можно немного упростить процедуру. Например, у вас есть дежурный пароль 0k3$.kpd.#D5. Вместо того, чтобы придумывать новый, вы можете дополнить этот, прогнав через набор ваших правил логин или название нового сервиса

Пример для twitter@my_firstvds: прогоняем через мясорубку наших правил, получаем на выходе 9$.h Добавляем эту часть к основному паролю через какой-либо разделитель (новое правило, хм), получаем новый пароль: 

0k3$.kpd.#D5_9$.h

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

Автоматическая генерация пароля

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

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

Но таким сервисам сложно доверять — кто знает, как они могут обрабатывать сгенерированные пароли? Как вариант, можно использовать пароли оттуда частично — например, собрать собственного Франкенштейна из фрагментов нескольких паролей. Или просто поменять часть символов.

Второй вариант — генерация с помощью инструментов вашего собственного сервера:

10 вариантов генерации паролей в командной строке

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

Есть разные способы проверки паролей на надёжность.

  1. Теоретический — просто проверить, что созданный пароль соответствует всем перечисленным выше требованиям к надёжности. Если вы (и мы) ничего в них не пропустили, пароль, сгенерированный на базе этих требований, в теории будет достаточно сложным, чтобы продержаться месяца три.

  2. Простейший практический — через онлайн-сервисы. Например, Password Checker или How secure is my password?. Столько времени потребуется на взлом придуманного выше пароля для Twitter:

    Минус — вы вводите ваш новый пароль на незнакомом ресурсе, который неизвестно как может им распорядиться. Конечно, можно его немного видоизменить после этого, но всё же.

  3. Продвинутый практический — проверить сложность специальным программным обеспечением. Фактически сводится к попытке взлома вашего пароля — и в самом деле, зачем кого-то ждать?

    В этом нехитром деле нам поможет Джон Потрошитель, или John The Ripper. Это программа с открытым исходным кодом для подбора восстановления паролей.

    Установка: 

    • Ubuntu и Debian:

      apt update
      apt install -y john
    • CentOS:

      yum install -y john

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

    • Ubuntu и Debian:

      apt install -y wordlist
      apt install -y wamerican-huge
    • CentOS:

      yum install -y wordlist
      yum install -y wamerican-huge

    Дальше необходимо подготовить файл с паролями, которые вы хотите взломать проанализировать на надёжность. Чаще всего проверяются пароли в файле /etc/shadow — они хранятся там уже в закодированном виде. Выведем его содержимое в новый файл:

    unshadow /etc/passwd /etc/shadow > passfile.txt

    Запустим базовую проверку:

    john passfile.txt

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

    Чтобы прервать процесс подбора, нажмите сочетание Ctrl + C. Чтобы увидеть статус выполнения, нажмите любую клавишу.

    Восстановление простейших паролей заняло несколько секунд. Посмотреть расшифрованные пароли можно командой:

    john -show passfile.txt

    john работает сразу в нескольких режимах — если они не определены при запуске, он автоматически переключается между ними, если пароль не удаётся подобрать за один проход:

    • Single mode: собирает имена пользователей и пытается использовать их в качестве пароля:

      john -single passfile.txt
    • Wordlist mode: проверяет пароль перебором слов из словаря;

      john -wordlist:/var/lib/dictionaries-common/wordlist/wamerican-huge passfile.txt

      где /var/lib/dictionaries-common/wordlist/wamerican-huge — путь к файлу со словарём.

    • Incremental mode: проверяет пароль случайно сгенерированными комбинациями (брутфорс):

      john -incremental passfile.txt
    • External mode: использует внешний программный код, указанный в конфигурационном файле ~/john.ini

    На примере ниже видно, как Джон переключается между режимами: сначала проверяет имена пользователей (1/3), затем проходит по встроенному словарю (2/3), а в конце — начинает генерировать случайные последовательности символов (3/3):

    Помимо прочего, можно протестировать производительность Джона на вашем сервере:

    john -test

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

    man john

Кроме этого, можно автоматизировать проверку паролей с помощью модуля PAM. Его принцип работы очень прост: при вводе нового пароля он выполняет тест и сообщает, соответствует ли введённая последовательность минимальным требованиям.

Эти требования настраиваются в конфигурационном файле модуля.

В современных дистрибутивах модуль PAM присутствует по умолчанию. 

На Ubuntu и Debian для его донастройки потребуется установить некоторые дополнительные библиотеки: 

apt install libpam-pwquality cracklib-runtime

Чтобы ужесточить политику паролей, нужно отредактировать конфигурационный файл:

  • Ubuntu и Debian:

    nano /etc/pam.d/common-password
    В качестве примера приведён редактор nano. Для сохранения файла нажмите сочетание Ctrl+O, проверьте имя файла и нажмите Enter. Для выхода из файла нажмите сочетание Ctrl+X.
     

    В нём нас интересует строка:

  • CentOS:

    vi /etc/pam.d/system-auth
    В качестве примера приведён консольный редактор vi. Для входа в режим редактирования на клавиатуре нажмите I. Для выхода из режима редактирования нажмите Esc. Для сохранения и выхода из файла введите сочетание :wq Для выхода без сохранения введите :q!
     

    Нам нужна следующая строка:

В конце этой строчки можно через пробел перечислить правила проверки паролей:

  • retry=3 : количество попыток запроса ввода пароля;
  • minlen=12 : минимальная длина пароля;
  • difok=5 : минимальное количество изменённых символов относительно старого пароля;
  • maxrepeat=3 : разрешённое количество повторяющихся символов;
  • maxclassrepeat=5 : запрещает использование последовательностей с клавиатуры  длиной более пяти символов. Защита от паролей типа «QWERTY»,«12345», «!@#$%»;
  • ucredit=-1 : обязательное использование минимум одного символа в верхнем регистре;
  • lcredit=-2 : обязательное использование минимум двух символов в нижнем регистре;
  • dcredit=-2 : обязательное использование минимум двух цифр;
  • ocredit=-2 : обязательное использование минимум двух специальных символов;
  • gecoscheck=1 : проверка на содержание в пароле имени пользователя.

После настройки сохраните файл и перезагрузите сервер для применения настроек.

Было интересно?

Назад к списку
Скидка 25% новым клиентам!
Закажи сервер сегодня и получи скидку на первый месяц аренды!