Пароль Summer2026! выглядит прилично. Заглавная буква, цифры, специальный символ, достаточная для многих форм регистрации длина. Но программа подбора может проверить подобную комбинацию гораздо раньше, чем короткую случайную последовательность. Причина проста. Люди придумывают пароли по узнаваемым шаблонам, а программы умеют воспроизводить привычки людей.
Hashcat и John the Ripper помогают восстанавливать забытые пароли и проверять, насколько хорошо защищены учётные записи. Результат зависит от алгоритма хранения, оборудования и порядка проверки вариантов. Разберём работу на собственных файлах, учебных примерах и данных, доступ к которым входит в согласованный аудит.
Что происходит при подборе пароля
Сервису обычно незачем хранить пароль в открытом виде. При регистрации приложение вычисляет проверочное значение с помощью специальной функции, а при входе повторяет вычисление для введённого пароля. Совпадение позволяет принять пароль. В разговорной речи всю сохранённую запись называют хешем, хотя запись может включать также название алгоритма, соль и параметры вычислений.
Хеширование отличается от шифрования. У шифрования предусмотрена обратная операция с ключом, а у криптографического хеширования такого ключа нет. Программа подбора предлагает кандидат, выполняет нужные вычисления и сравнивает результат с сохранённым значением. Слабый пароль можно угадать, не обращая хеш-функцию. Известные проблемы MD5 и SHA-1 с коллизиями, когда разные сообщения дают одинаковый хеш, тоже не означают возможность мгновенно восстановить любой пароль.
Обычные MD5, SHA-1 и SHA-256 слишком быстро вычисляются для непосредственного хранения человеческих паролей. Даже криптографически стойкий SHA-256 без специальной парольной схемы позволяет проверять множество догадок. Для защиты применяют функции, которые намеренно расходуют процессорное время, а современные варианты ещё и заметный объём памяти.
После получения базы проверочных значений подбор может идти локально. Ограничение попыток входа, задержки на сайте и CAPTCHA в подобных вычислениях не участвуют. Многофакторная аутентификация защищает вход в аккаунт, но сама по себе не мешает подбирать пароль по уже скопированному хешу.
Зачем нужны соль и дорогие вычисления
Соль представляет собой случайное значение, которое создают отдельно для каждой парольной записи и сохраняют вместе с результатом вычислений. Скрывать соль не требуется. Разные соли позволяют получить разные проверочные значения даже для одинаковых паролей и лишают атакующего возможности использовать одну заранее вычисленную таблицу для всей базы.
У несолёных хешей одного типа программа может вычислить кандидат один раз и сравнить результат сразу с множеством записей. При разных солях дорогостоящую часть приходится повторять для каждой соли. Однако утверждение «миллион записей всегда подбирается ровно в миллион раз дольше» некорректно. Время зависит от числа уникальных солей, параметров функции, оборудования, найденных совпадений и организации вычислений.
Соль не делает отдельную попытку автоматически медленной. За цену попытки отвечают алгоритм и его настройки. У bcrypt параметр cost задаёт вычислительную сложность по экспоненте. При прочих равных переход с 10 на 12 увеличивает основную работу примерно в четыре раза. У Argon2id на стоимость влияют объём памяти, число проходов и степень параллелизма. Названия алгоритма без параметров недостаточно для оценки защиты.
Какие форматы встречаются сегодня
Перед запуском нужно выяснить, что именно находится в файле. Последовательность из 32 шестнадцатеричных знаков может оказаться MD5, NT-хешем или другим значением. Длина строки даёт подсказку, но не определяет алгоритм однозначно. Происхождение записи, код приложения и полный формат обычно полезнее автоматического распознавания.
В системах встречаются как собственно хеши паролей, так и данные для проверки догадок по зашифрованному документу или сетевому обмену. Назвать весь набор «хешами» удобно, но для выбора режима hashcat различия принципиальны.
| Формат | Что нужно учитывать | Режим hashcat |
|---|---|---|
| NT-хеш, часто называемый NTLM-хешем | MD4 от пароля в UTF-16LE без соли. Встречается в механизмах хранения паролей Windows. |
-m 1000
|
| NetNTLMv2 | Данные ответа на запрос при сетевой аутентификации. Для проверки нужны дополнительные поля обмена, а не только короткий хеш. |
-m 5600
|
| sha512crypt |
Парольная схема с солью и повторными вычислениями, обычно с префиксом $6$. Отличается от обычного SHA-512.
|
-m 1800
|
| bcrypt |
Соль и параметр стоимости входят в запись. Часто встречаются префиксы $2a$, $2b$ и $2y$.
|
-m 3200
|
| Переносимый формат phpass |
Старые записи с префиксами $P$ и $H$. Название WordPress в описании режима не охватывает все современные пароли WordPress.
|
-m 400
|
| Argon2id и yescrypt | Схемы с затратами памяти. Поддержку конкретного формата и способ вычислений нужно проверять в используемой сборке. | Выбирается по полной записи и возможностям сборки. |
В Linux локальные парольные записи обычно находятся в /etc/shadow, но единого алгоритма для всех дистрибутивов нет. Многие современные системы, включая Debian, Ubuntu и Fedora, перешли на yescrypt с префиксом $y$. Старые записи могут сохранять sha512crypt до смены пароля. Поэтому обновлённая операционная система ещё не означает, что все учётные записи используют новый формат.
Похожая ситуация возникла в WordPress. Начиная с версии 6.8 стандартная схема пользовательских паролей использует bcrypt с предварительной обработкой на основе SHA-384. Новые записи по умолчанию начинаются с $wp$2y$. Просто удалить $wp и запустить обычный bcrypt недостаточно, поскольку изменена обработка входного пароля. Старые записи phpass продолжают проверяться и обычно обновляются при следующем успешном входе или смене пароля.
Документы, архивы, кэшированные доменные учётные данные и материалы Kerberos требуют собственных форматов. Например, извлечённая запись зашифрованного архива может содержать соль, параметры получения ключа и фрагмент шифротекста. Расширение файла или знакомое слово в названии приложения не заменяет проверки конкретной схемы.
Как подготовить данные и инструменты
Hashcat удобен для управляемого перебора с разными способами построения кандидатов и поддерживает вычисления на совместимом оборудовании. John the Ripper, особенно расширенная сборка Jumbo, полезен разнообразием форматов и утилитами подготовки данных из документов и контейнеров. Формат вывода такой утилиты не всегда подходит hashcat без изменений.
Работайте с копией исходного файла и сохраняйте полную парольную запись. Не удаляйте соль, число итераций и служебные поля, пока не выясните их назначение. Перед подбором сопоставьте структуру с примерами хешей выбранного режима и проверьте обработку одной записи с заранее известным паролем.
В hashcat полезно начать с проверки версии, доступных вычислительных устройств и возможных типов входных данных. Ниже и далее предполагается, что команда hashcat доступна из командной строки. В Windows исполняемый файл обычно называется hashcat.exe.
hashcat --version
hashcat -I
hashcat --identify hashes.txt
Опция --identify может предложить несколько подходящих алгоритмов. Выбирать первый результат наугад нельзя. Сообщение об ошибке загрузки часто означает неверный режим или повреждённую запись, а успешная загрузка ещё не доказывает правильность выбора. Контрольный пример помогает отделить ошибку подготовки от неудачного словаря.
Почему видеокарта не гарантирует высокую скорость
Графический процессор хорошо справляется с большим количеством однотипных независимых вычислений. Быстрые хеши особенно выгодно считать параллельно. Но преимущество зависит от алгоритма, реализации и конкретного оборудования. Правило «bcrypt лучше подбирать на обычном процессоре» слишком грубое, как и обещание одинакового ускорения для любых форматов.
Argon2id, scrypt и yescrypt усложняют массовый перебор затратами памяти. Значение имеют её объём, пропускная способность и характер обращений. Даже у одного алгоритма скорость меняется с параметрами записи. Сравнивать результаты для bcrypt с cost=5 и cost=12 без поправки на настройки бессмысленно.
Встроенный тест производительности позволяет оценить оборудование, но не заменяет короткого запуска на рабочем наборе. Число солей, длина кандидатов, правила, нагрев и ограничения мощности способны изменить результат. Например, команда ниже проверяет bcrypt на тестовых параметрах программы, которые могут отличаться от параметров вашей базы.
hashcat -b -m 3200
Маленький словарь может не загрузить видеокарту полностью. Причиной бывают недостаточный объём параллельной работы, накладные расходы и способ генерации кандидатов. Добавлять бессмысленные миллиарды вариантов ради красивой загрузки тоже незачем. Для аудита полезнее число новых найденных слабых паролей за отведённое время.
Словарь и правила на коротком примере
Словарный режим проверяет готовые варианты из текстового файла. Правила преобразуют каждое слово, например меняют регистр, добавляют цифры или заменяют буквы. Такой подход позволяет проверить человеческие шаблоны без полного перебора всех строк заданной длины.
Создадим учебный хеш пароля Orbit2026!, словарь из двух слов и одно правило. Команды рассчитаны на Bash в Linux с установленными hashcat и стандартными утилитами. Обычный SHA-256 выбран для наглядности. Хранить реальные пользовательские пароли таким способом не следует.
printf '%s' 'Orbit2026!' | sha256sum | cut -d ' ' -f 1 > hashes.txt
printf '%s\n' orbit comet > words.txt
printf '%s\n' 'c$2$0$2$6$!' > demo.rule
hashcat -m 1400 -a 0 hashes.txt words.txt -r demo.rule --session demo --potfile-path demo.potfile
hashcat -m 1400 hashes.txt --show --potfile-path demo.potfile
Параметр -m 1400 выбирает SHA-256, -a 0 включает словарный режим, а -r задаёт файл правил. Операция c делает первую букву заглавной, остальные строчными. Последовательность $2$0$2$6$! добавляет символы 2026! в конец. Из слова orbit получается нужный кандидат. Опция --show выводит уже найденные результаты из указанного файла.
| Правило | Действие | Пример |
|---|---|---|
$1$2$3
|
Добавить 123 в конец |
orbit превращается в orbit123
|
^3^2^1
|
Последовательно добавить символы в начало |
orbit превращается в 123orbit
|
so0
|
Заменить все строчные o на нули |
robot превращается в r0b0t
|
o10
|
Записать ноль в позицию 1, считая от нуля |
robot превращается в r0bot
|
Последний пример показывает, что hashcat умеет менять отдельные позиции. Ограничение «только все вхождения или ни одного» относится к конкретной операции замены, а не ко всем возможностям программы. Для проверки сложного набора правил используйте --stdout, чтобы сначала увидеть кандидатов без подбора хешей.
hashcat --stdout words.txt -r demo.rule
Маски и реальный размер перебора
Маска описывает допустимые символы в каждой позиции. Подход полезен, когда известна структура пароля, например пять латинских букв и четыре цифры. Словарь при таком переборе не обязателен, программа сама строит комбинации из заданных наборов.
Встроенные обозначения не охватывают автоматически любые языки и символы Unicode. Особенно легко ошибиться с ?a, приняв набор печатных ASCII-символов за все возможные символы компьютера.
?lзадаёт 26 строчных латинских букв.?uзадаёт 26 заглавных латинских букв.?dзадаёт десять цифр.?sзадаёт специальные печатные ASCII-символы, включая пробел.?aобъединяет предыдущие наборы и содержит 95 символов.?bзадаёт любой из 256 вариантов байта, а не произвольный символ Unicode.
Маска ?u?l?l?l?l?d?d?d?d охватывает 118 813 760 000 комбинаций. Если условная измеренная скорость составляет миллион проверок в секунду, полный проход займёт около 33 часов. При тысяче проверок в секунду потребуется примерно 3,8 года. Расчёт предполагает одну проверяемую запись, постоянную скорость и полный проход без досрочной остановки.
Без дополнительных параметров маска задаёт фиксированную длину. Для перебора более коротких вариантов включают --increment и явно задают границы. Например, следующая команда проверяет цифровые строки длиной от четырёх до шести знаков. Пароль из учебного примера в такой набор не входит.
hashcat -m 1400 -a 3 hashes.txt '?d?d?d?d?d?d' --increment --increment-min 4 --increment-max 6
Комбинации, парольные фразы и статистические модели
Словарь и маску можно объединять. Режим -a 6 добавляет маску после словарного слова, а -a 7 ставит перед ним. Режим -a 1 соединяет слова из двух списков. Если первый список содержит 100 тысяч записей, а второй тысячу, получится до 100 миллионов комбинаций ещё до дополнительных преобразований.
Несколько файлов правил также способны резко увеличить объём работы. При последовательном применении двух наборов hashcat комбинирует правила между собой. Поэтому очередной большой файл может увеличить длительность запуска гораздо сильнее, чем число полезных кандидатов. Начинать разумно с небольших наборов и добавлять преобразования, которые проверяют конкретную гипотезу.
Длинная парольная фраза не обязательно непредсказуема. Известная цитата, строка песни или распространённое выражение могут попасть в словарь целиком. Случайно выбранные независимые слова дают другую модель стойкости, но здесь важен именно случайный выбор. Придуманная человеком фраза обычно сохраняет смысловые связи и привычный порядок слов.
Модели Маркова используют статистику последовательностей символов, а нейросетевые генераторы учатся предлагать вероятные пароли по примерам. Оба подхода помогают строить кандидатов, но не устраняют необходимость проверять каждый вариант. Полезность генератора нужно измерять на отдельном наборе, который не использовали при обучении и настройке, иначе программа может просто воспроизводить знакомые записи.
Кодировки и ограничения длины
Пароль проходит через несколько представлений. Человек видит символы, текстовый файл хранит байты, а алгоритм может требовать определённую кодировку. Для NT-хеша пароль представляют в UTF-16LE. В UTF-8 обычная русская буква занимает два байта. Перепутанная кодировка словаря способна оставить правильный на вид пароль за пределами фактически проверенных кандидатов.
Визуально одинаковый текст тоже может иметь разные последовательности Unicode, например готовую букву с диакритическим знаком и букву с отдельным комбинируемым знаком. Некоторые приложения приводят ввод к нормальной форме. При аудите нужно воспроизвести обработку конкретного приложения, включая нормализацию, если приложение её выполняет. Искажённый вывод терминала сам по себе ещё не доказывает неправильные вычисления.
У обычного bcrypt широко распространён предел в 72 байта. В зависимости от библиотеки слишком длинный ввод может обрезаться или отклоняться. Для кириллицы предел достигается раньше, чем для латиницы. У hashcat существует отдельное ограничение, связанное с оптимизированными вычислительными ядрами. Флаг -O может ускорить работу, одновременно уменьшив поддерживаемую длину кандидатов. Перед запуском проверьте заявленные программой границы.
Как читать результат и не обмануть себя
Статус Exhausted означает, что программа закончила заданный набор кандидатов. Такой результат не доказывает стойкость оставшихся паролей. Причиной отсутствия совпадений могут быть неподходящий словарь, неправильный формат, кодировка, слишком узкая маска или ограничение длины. Сначала исключите технические ошибки на контрольной записи, затем расширяйте гипотезы.
Файл potfile сохраняет найденные соответствия между хешами и паролями. При повторном запуске hashcat может пропустить уже известные записи. Для рабочего восстановления такая экономия полезна, но сравнение двух методов на общей истории результатов легко исказить. Сравнивайте одинаковые исходные наборы с раздельными файлами результатов и одинаковым бюджетом времени.
Для аудита фиксируйте алгоритм и параметры, число учётных записей, число уникальных хешей и солей, оборудование, версию программы и длительность запусков. Доля найденных уникальных хешей может отличаться от доли затронутых аккаунтов. Один подобранный несолёный хеш способен соответствовать паролю нескольких пользователей.
Опции --debug-mode=4 и --debug-file помогают увидеть исходное слово, успешное правило и полученный кандидат. Такой журнал показывает успешные совпадения, но не является полным счётчиком всех применений правила. Пересекающиеся преобразования и порядок запуска влияют на то, как распределяются находки между методами.
Хеши, найденные пароли и отладочные журналы остаются чувствительными данными. Храните рабочие файлы в защищённом месте, ограничивайте доступ и заранее определяйте срок удаления. Для отчёта обычно достаточно обезличенных примеров и статистики. Копировать действующие пароли в презентацию или загружать корпоративную базу в публичный сервис подбора незачем.
Что менять после проверки
Для нового приложения разумно выбирать Argon2id через поддерживаемую библиотеку. Параметры нужно подбирать под сервер, допустимое время входа и пиковое число одновременных запросов. Единой оптимальной задержки в 100 миллисекунд для всех сервисов нет. Слишком дешёвая проверка облегчает подбор, чрезмерно дорогая способна перегрузить сам сервис.
При переходе на новую схему пересчитывайте запись после успешного входа или смены пароля. Для давно неактивных аккаунтов нужен отдельный план, поскольку старые хеши могут оставаться в базе годами. Дополнительный секрет, часто называемый перцем, можно хранить отдельно от базы паролей. Такая защита помогает при утечке одной базы, но не заменяет правильного алгоритма и требует продуманной смены секрета.
Пользователям полезнее длинные уникальные пароли и менеджер паролей, чем обязательная перестановка цифры и восклицательного знака. При создании и смене пароля проверяйте варианты по списку распространённых и скомпрометированных значений, разрешайте длинные фразы и вставку из менеджера. Плановая смена ради календаря часто приводит к предсказуемым продолжениям старого пароля. При признаках компрометации пароль, напротив, нужно менять.
В Windows защита не заканчивается сложностью пароля. При подходящих условиях похищенный NT-хеш позволяет пройти аутентификацию без восстановления исходного текста пароля. Такой приём называется Pass-the-Hash. Поэтому вместе с аудитом нужны защита учётных данных, ограничение административных прав и сокращение ненужного использования NTLM. Даже пароль, который не удалось подобрать, не делает украденный материал аутентификации безвредным.