Найти в Дзене
ProMoney

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

Оглавление

То, что вам говорили, на самом деле делает ваши пароли слабее.

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

пароль
пароль

Часть 1: Как работают пароли?

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

Суть этого процесса заключается в хэш-функции - определенных математических операциях, которые превращают ваш пароль в эту тарабарщину. Хэш-функции могут быть довольно сложными, но основная идея довольно знакома. Допустим, наша функция - это простое сложение, а на входе у нас 2 целых числа в качестве "пароля". Вы задаете "пароль" из 3 и 4. Это "хэшируется" в 7 (3+4=7). Только эта цифра 7 хранится на сервере. Если хакер получит доступ к серверу и найдет этот "хэш", он не сможет узнать, какой у вас "пароль" - 3 и 4, или 1 и 6, или 5 и 2. Это очень важный момент: вы не можете окончательно определить исходный входной сигнал по выходному. Хэш-функции являются односторонними. (Это отличается от шифрования, где вы можете легко восстановить исходные данные). Теперь, этот пример сложения как хэш-функции неполный - если сервер просто знает, что ваши числа должны быть равны 7, то любые 2 числа, сумма которых равна 7, будут работать, чтобы угадать ваш "пароль". Это называется множеством коллизий - когда два или более входных данных приводят к одному и тому же хэшированному результату. Поэтому нам нужно добавить некоторое преобразование, которое приведет к как можно меньшему количеству коллизий, но при этом избежать любых обратимых операций. Давайте попробуем объединить исходные цифры и умножить полученное число на нашу сумму. Так, для 3 и 4 мы получим 3 + 4 = 7, затем 7 * 34 = 238. Для 5 и 2 мы получим 5 + 2 = 7, затем 7 * 52 = 364.

Помните, что любая наша догадка должна быть в виде двух чисел, поэтому нам придется вычислить весь ответ для каждого набора из двух чисел, которые мы хотим угадать. Итак, какие два числа дают нам результат 1305?

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

Часть 2: Взлом хэша: Угадай и проверь

Единственный способ "взломать" пароль - это вычислить хэш для заданного входного кода и посмотреть, совпадает ли он с хэшем, который вы пытаетесь взломать - т.е. угадать и проверить. Так, например, хэш-функция MD5 требует 3000 циклов процессора для вычисления (фактическое число зависит от формулы и компьютерной системы), и может потребоваться 10 циклов для сравнения и проверки, совпадают ли хэши... Таким образом, для проверки одного хэша требуется 3010 циклов. Если у вас есть пароль из 10 символов, существует 72¹⁰ возможных перестановок строчных букв, заглавных букв, цифр и символов (возможно, больше, в зависимости от того, какие символы разрешено вводить) - около 3,75 квинтиллиона возможностей. Таким образом, при одном ядре типичного процессора с частотой 3 ГГц и примерно 3000 циклов на хэш, мы имеем 3 миллиарда циклов в секунду, разделенных на 3000 циклов на хэш = 1 миллион хэшей в секунду. Один квинтиллион - это тысяча миллиардов миллионов, поэтому на вычисление всех возможных комбинаций потребуется 3,75 триллиона секунд... что составляет около 118 833 лет постоянного времени работы процессора при 1 миллионе хэшей в секунду. Мы еще вернемся к этому вопросу.

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

Большинство реальных хэш-функций достаточно интенсивны и гарантируют уникальные выходы для каждого входа и т.д. Но современные процессоры имеют много ядер, и вы также можете использовать облако.... скажем, у нас есть куча облачных серверов, в общей сложности 100 ядер с частотой 3 ГГц - используя наш пример 118 833 лет для одноядерного процессора, мы получим 1188 лет.... скажем, у нас есть гигантская серверная ферма с десятью тысячами ядер, мы можем сократить это до 0,1188 лет (около 6 недель). Конечно, это для всех возможных хэшей - то есть мы бы взломали все возможные пароли. Если бы мы просто пытались найти один хэш, нам бы повезло, и мы бы взломали его за пару десятков лет.

Часть 3: Как взломать пароль

В действительности, нам не нужно угадывать все возможные варианты. Большинство людей используют комбинации букв и цифр, которые связаны с их жизнью - например, английские слова и цифры из даты рождения - поэтому мы можем значительно сократить количество угадываний. Например, мы можем ввести список всех слов английского языка в популярную программу взлома Hashcat и поручить ей вычислить хэши для каждого слова, за которым следуют числа от 0 до 999. Округлим до 200 000 слов английского языка, плюс 1000 последующих чисел для каждого из них - 200 000 *1000 = 200 миллионов возможностей, что займет 200 секунд при 1 миллионе хэшей в секунду. Не так уж плохо.

Конечно, на большинстве сайтов есть требования к "прочности", например, "ваш пароль должен включать хотя бы одну цифру, одну заглавную букву и один символ". С математической точки зрения это отличная идея, но она не учитывает того, что люди делают на самом деле, и, следовательно, такие правила "силы" играют на руку хакерам. Подобное правило усложняет задачу людей по созданию пароля, который они могли бы запомнить, поэтому мы склонны искать общие шаблоны и последовательности. Большинство людей просто пишут первую букву слова, в конце ставят обычное число, например 123, 456 или недавний год, затем символ, который легко достать, удерживая клавишу shift - обычно восклицательный знак, знак "ат", знак "фунт" или звездочку (да, раскладка клавиатуры влияет на то, как люди выбирают пароли - "asdf" и "qwerty" являются некоторыми узнаваемыми общими шаблонами). Таким образом, на практике эти требования фактически делают пароли менее безопасными - конечно, они предотвращают абсолютно ужасные пароли типа "password", но в целом они делают даже сложные пароли гораздо более легкими для угадывания.

-2

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

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

1. Слова, встречающиеся в наиболее распространенных языках

2. Обычные числа, такие как последовательности, даты рождения, последние годы.

3. Пароли, которые использовались ранее - большие списки таких паролей, известные как "словари взлома", находятся в открытом доступе.

4. Символы и заглавные буквы в обычных местах - первый и последний символы, легкодоступные с клавиши shift и т.д.

5. Небольшие фразы типа "iloveyou" или "donthackme".

6. Если целью является конкретный сайт, то по статистике многие пароли будут содержать название сайта, например, "facebook123".

В зависимости от того, какая другая информация доступна о целевых пользователях, можно уточнить список (например, имена, национальности и т.д.).

Мы знаем, что именно так действуют субъекты угроз. Исследования в области кибербезопасности показали, что в природе существуют боты "credential stuffing", взаимодействующие с серверами командно-контрольного управления (C2), которые предоставляют им параметры (т.е. правила угадывания) для нацеливания на жертв на основе эвристики, очень похожей на ту, что описана в приведенном выше списке. Сайты для взлома и программы, такие как Hashcat, развивались, чтобы сделать разработку и применение этих правил проще и быстрее. Как же дать им отпор?

Часть 4: Как сделать свой пароль надежным

Теоретически это легко - просто не ведите себя как человек. Но, как мы все знаем, это легче сказать, чем сделать. Поэтому позвольте компьютеру сделать это за вас и используйте генератор надежных паролей. Это гарантирует, что ваш пароль не только математически надежен, но и защищен от угадывания по поведению. Конечно, нет 100% гарантии, что даже случайная строка символов не будет угадана (или что вы не получите вредоносное ПО, которое регистрирует ваши нажатия клавиш или крадет пароли, сохраненные в браузере), поэтому нелишним будет иметь разные случайные пароли для каждой учетной записи. Даже запомнить одну длинную случайную строку непросто, поэтому лучший способ реализовать это - использовать менеджер паролей.

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

  • используйте слова для составления бессмысленных фраз ("парковка-батут-дендрарий")
  • размещайте заглавные буквы в произвольном порядке или в середине фразы ("parkingLot-bathtub-ARBORetum")
  • использовать непоследовательные числа и широкий набор символов ("parkingLot%bath395tub@@&ARBORetum")
  • не используйте никакой идентифицирующей информации о вас или сайте/услуге.
  • убедитесь, что ваш пароль не находится в словаре взломщиков.

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

Не пропустите момент - подпишитесь, чтобы быть в курсе последних новостей в мире криптовалют и NFT
Ставьте 👍