Содержание статьи
info
Читай также: «Железо для хешкрекинга. Разбираем аппаратные основы подбора хешей»
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Хеш‑функция — это математическая функция, которая превращает произвольный массив данных (сообщение) в битовый массив фиксированного размера (хеш‑сумму, или дайджест). Например, хеш SHA-256 для слова «пароль»:
2dbc574daca52689a24fb60e835f8c19a36400830df7350859dd32d1abaaec5d
Это 64 символа в шестнадцатеричной системе, которые при переводе в двоичную как раз дают 256 бит — как и указано в названии алгоритма.
Основной принцип хеш‑функции в том, что дайджест посчитать легко, а вот восстановить по нему исходное сообщение — невозможно.
Классический пример: у нас есть два числа — 25 и 81, их произведение равно 2025. Зная числа, посчитать произведение просто, но, зная только произведение, понять, какие именно это были числа и было ли их вообще два, уже нельзя.
О хеш-функциях
Строго говоря, мы точно не знаем, обратима хеш‑функция или нет, мы не знаем простого способа ее обратить. Некоторые хеш‑функции в прошлом получилось обратить, поэтому они считаются небезопасными, например MD5 или SHA-1, но создать математически доказанно необратимую хеш‑функцию невозможно.
Также стоит понимать, что, поскольку хеш‑функция принимает массив любой длины, а на выходе отдает заданное число битов, очевидно, что из всего многообразия входных данных некоторые будут соответствовать одному хешу (это называется коллизия). Для SHA-256 количество дайджестов равно 2256, число объективно астрономическое, поэтому теоретическая вероятность получить при переборе хеш, пароль которого окажется неверным, очень мала, особенно потому, что пароли довольно предсказуемы и создаются из ограниченного набора символов.
Искусство абракадабры
Если не брать во внимание возможность коллизий, наша задача проста: считаем хеши и сравниваем их с уже имеющимися. Но если заглянуть, например, в документацию Hashcat, то под заголовком Hash Modes скрывается целый зоопарк алгоритмов.
Среди прочего к паролю добавляют произвольное значение — соль. Оно публично известно, уникально для каждого пароля и лежит в базе данных рядом с хешем. Если соль хранится тайно где‑то в коде, ее называют перцем или криптографическим ключом. Такая защита предотвращает только атаки через радужные таблицы, но все же тренирует внимательность хешкрекера при выборе параметров: строки «соль + пароль» и «пароль + соль» дают разные хеши.
К алгоритму, кроме специй, могут добавляться раунды (итерации), то есть применение хеш‑функции сотни или тысячи раз подряд. Если в таком алгоритме есть перец, то он называется имитовставкой (MAC), а если соль — функцией формирования ключа (KDF). Такая защита увеличивает время подсчета одного хеша за счет объема, но не сложности вычислений, тем самым замедляя хешкрекинг. Другой вариант — создание «дорогих» алгоритмов. Например, scrypt и Argon2 требуют слишком много ресурсов для подсчета одного хеша и упираются в ограничения железа.
Есть еще разные контрольные суммы, алгоритмы баз данных и протоколов. Но вывод один: термин «хешкрекинг» снова сбивает нас с толку, потому что он связан не только с хешами, но и с разными алгоритмами, которые могут вообще не использовать хеш‑функции. Задача хешкрекера — получить секрет, который каким‑то образом превратили в абракадабру, а искусство хешкрекинга — понять, что это за абракадабра, и как можно точнее и эффективнее воспроизвести алгоритм.
CPU или GPU?
Не существует алгоритма, который было бы разумнее подбирать на CPU, чем на GPU. Во‑первых, не стоит представлять вычисление хеша как бинарный выбор — либо ЦП, либо ГП, потому что хорошая реализация любого алгоритма всегда использует сильные стороны всех компонентов.
Во‑вторых, если хотя бы 10% задачи можно распараллелить, то использование ГП будет оправданно, а при вычислении большого количества хешей мы так или иначе создаем параллелизм. В конце концов, цена вычислений на GPU ниже, чем на ЦП, поэтому увеличение мощности последнего может быть неоправданно.
Но не вызывает сомнений, что при небольшом объеме вычислений CPU будет эффективнее, то есть распределить 20 хешей на ГП — это несерьезно.
Жажда скорости
Всех интересует, как быстро сбрутится пароль. Для этого есть термин хешрейт — он показывает, сколько хешей конкретного алгоритма в секунду (H/s) может посчитать наш компьютер. Хеши в секунду могут превратиться в миллионы (MH/s) или миллиарды (GH/s), но хешрейт — величина условная и зависит от железа, нагрева, драйверов, загрузки компа и того, насколько эффективно мы реализовали алгоритм.
info
Еще говорят о тактовой частоте, но она не учитывает количество ядер и сам алгоритм, поэтому метрика неполная, и о флопсах (FLoating point OPerations), но почти вся криптография построена на операциях с целыми числами, поэтому скорость операций с десятичными для нас неинформативна.
Общая формула такая: время нахождения пароля = ((количество возможных символов)^(длина пароля)) / хешрейт. Например, для SHA-256 на Nvidia RTX 4090 в Hashcat максимальное время подбора восьмисимвольного пароля из латинских букв и цифр будет равно ((26 + 26 + 10)^8) / (21 975,5 MH/s) = 9936 с, или 2,76 ч. Но это при условии тупого брутфорса, то есть полного перебора всей области значений. Поэтому все красивые таблички из интернета «За сколько взломают твой пароль в 2025 году» можно смело отправлять лесом — они не учитывают ни алгоритм, ни железо, ни приемы сокращения области поиска опытным хешкрекером.
Общий знаменатель — программы для хешкрекинга
К всеобщему облегчению сразу скажу: нам не понадобится уйма разных программ и утилит. В таблице ниже приведены сравнительные характеристики самых заметных игроков в этой сфере. Конечно, это не все инструменты: например, есть еще Cain & Abel, но ее не обновляют с 2014 года; ophcrack работает только с радужными таблицами; решения вроде Elcomsoft Password Recovery Suite проприетарны и, очевидно, подходят не всем; а «Мобильный криминалист. Брутфорс» построен на том же Hashcat, только с GUI сверху. В сравнение попали и l0phtcrack, и Aircrack-ng, но второй нужен только для работы с Wi‑Fi, а первый почти не поддерживается и сильно ограничен по возможностям. Кстати, первый в мире хешкрекинг на GPU реализовала российская компания Elcomsoft в 2007 году.
| Hashcat | John the Ripper | L0phtCrack | Aircrack-ng | |
|---|---|---|---|---|
| Первый релиз | 2009 | 1996 | 1997 | 2006 |
| Релиз open source | 2015 | 1996 | 2021 | 2006 |
| ОС для установки | Все крупные | Все крупные | Windows | Все крупные |
| Количество форматов | >600 | 535 | 22 | 6 |
| Количество типов атак | 11 | 4 | 3 | 1 |
| Поддержка CPU | Да | Да | Да | Да |
| Поддержка GPU | Да | Не все | Да | Нет |
В реальной работе сегодня чаще всего используют Hashcat, реже — John the Ripper. Если сравнить этих гигантов, то Hashcat дает более понятный вывод, лучше задокументирован в вики и на форумах и в первую очередь ориентирован на работу с GPU. А JtR поддерживает несколько форматов хешей, которых нет у Hashcat, сам подбирает алгоритм атаки и лучше оптимизирован для работы с CPU, но не все алгоритмы умеет отправлять на GPU.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
