Большой парольный коллайдер. Как узнать пароль по хешу без долгих вычислений
Содержание статьи
В мире существует несколько зеттабайт цифровых данных, но далеко не вся эта информация уникальна: повторы разбросаны по миллиардам носителей и серверов. Независимо от типа данных, для работы с ними требуется решать одни и те же принципиальные задачи. Это снижение избыточности за счет частичного устранения повторов (дедупликация), проверка целостности, инкрементное создание резервных копий и авторизация пользователей. Конечно, последний аспект интересует нас больше всего, однако все эти технические приемы базируются на общих методах обработки данных с использованием хеширования. Существуют облачные сервисы, которые позволяют использовать эту процедуру быстрее — с хорошо известными целями.
На первый взгляд кажется странным, что в разных задачах применяется общая процедура вычисления и сравнения контрольных сумм или хешей — битовых последовательностей фиксированной длины. Однако этот метод действительно универсален. Контрольные суммы служат своеобразными цифровыми отпечатками файлов, ключей, паролей и других данных, называемых в криптографии messages — сообщения. Хеши (или дайджесты, от англ. digest) позволяют сравнивать их между собой, быстро обнаруживать любые изменения и обезопасить проверку доступа. Например, с помощью хешей можно проверять соответствие введенных паролей, не передавая их в открытом виде.
Математически этот процесс выполняется одним из алгоритмов хеширования — итерационного преобразования блоков данных, на которое разбивается исходное сообщение. На входе может быть что угодно — от короткого пароля до огромной базы данных. Все блоки циклично дописываются нулями или урезаются до заданной длины до тех пор, пока не будет получен дайджест фиксированного размера.
Предельный объем исходных данных, который может обработать хеш‑функция, определяется формой их представления в алгоритме. Обычно они записываются как целое 64-битное число, поэтому типичный лимит составляет 2 64 бит минус единица, или два эксабайта. Такое ограничение пока не имеет практической значимости даже для очень крупных дата‑центров.
Обычно хеши записываются в шестнадцатеричном виде. Так их гораздо удобнее сравнивать на вид, а запись получается в четыре раза короче двоичной. Самые короткие хеши получаются при использовании Adler-32, CRC32 и других алгоритмов с длиной дайджеста 32 бита. Самые длинные — у SHA-512. Кроме них, существует с десяток других популярных хеш‑функций, и большинство из них способно рассчитывать дайджесты промежуточной длины: 160, 224, 256 и 384 бит. Попытки создать функцию с увеличенной длиной хеша продолжаются, поскольку чем длиннее дайджест, тем больше разных вариантов может сгенерировать хеш‑функция.
Неповторимость — залог надежности
Уникальность хеша — одно из его ключевых свойств, определяющее криптостойкость системы шифрования. Дело в том, что число вариантов возможных паролей теоретически бесконечно, а вот число хешей всегда конечное, хоть и очень большое. Дайджесты любой хеш‑функции будут уникальны лишь до определенной степени. Степени двойки, если быть точным. К примеру, алгоритм CRC32 дает множество всего из 2 32 вариантов, и в нем трудно избежать повторений. Большинство других функций использует дайджесты длиной 128 или 160 бит, что резко увеличивает число уникальных хешей — до 2 128 и 2 160 соответственно.
Строго говоря, к хеш‑функциям в криптографии предъявляются более высокие требования, чем к контрольным суммам на основе циклического кода. Однако эти понятия на практике часто используют как синонимы.
Совпадение хешей от разных исходных данных (в том числе паролей) называют коллизией. Она может быть случайной (встречается на больших объемах данных) или псевдослучайной — используемой в целях атаки. На эффекте коллизии основан взлом разных криптографических систем — в частности, протоколов авторизации. Все они сначала считают хеш от введенного пароля или ключа, а затем передают этот дайджест для сравнения, часто примешивая к нему на каком‑то этапе порцию псевдослучайных данных, или используют дополнительные алгоритмы шифрования для усиления защиты. Сами пароли нигде не сохраняются: передаются и сравниваются только их дайджесты. Здесь важно то, что после хеширования абсолютно любых паролей одной и той же функцией на выходе всегда получится дайджест одинакового и заранее известного размера.
Псевдореверс
Провести обратное преобразование и получить пароль непосредственно из хеша невозможно в принципе, даже если очистить его от соли, поскольку хеширование — это однонаправленная функция. Глядя на полученный дайджест, нельзя понять ни объем исходных данных, ни их тип. Однако можно решить сходную задачу: сгенерировать пароль с таким же хешем. Из‑за эффекта коллизии задача упрощается: возможно, ты никогда не узнаешь настоящий пароль, но найдешь совершенно другой, дающий после хеширования по этому же алгоритму требуемый дайджест.
Для этого надо сделать всего ничего — рассчитать 2 128 пар вида пароль — хеш или на порядок‑другой больше — в зависимости от длины дайджеста выбранной функции. Однако все эти двойки в чертовски большой степени отпугивают, только если думать о скромных возможностях собственной машины. Хорошо, что скорость нахождения пароля по его хешу сегодня необязательно зависит от вычислительной мощности компьютера самого атакующего, поскольку во многих случаях для этого уже не требуется выполнять долгий перебор. Многое уже сделано до нас.
Методы оптимизации расчетов появляются буквально каждый год. Ими занимаются команды HashClash, Distributed Rainbow Table Generator и других международных проектов криптографических вычислений. В результате на каждое короткое сочетание печатных символов или вариант из списка типичных паролей хеши уже вычислены. Их можно быстро сравнить с перехваченным, пока не найдется полное совпадение.
Раньше на это требовались недели или месяцы процессорного времени, которые в последние годы удалось сократить до нескольких часов благодаря многоядерным процессорам и перебору в программах с поддержкой CUDA и OpenCL. Админы нагружают расчетами таблиц серверы во время простоя, а кто‑то арендует виртуальный кластер в Amazon EC2.
Искать XOR вычислять
Популярные алгоритмы хеширования работают настолько быстро, что к настоящему моменту удалось составить пары «хеш — пароль» почти для всех возможных вариантов функций с коротким дайджестом. Параллельно у функций с длиной хеша от 128 бит находят недостатки в самом алгоритме или его конкретных реализациях, что сильно упрощает взлом.
В девяностых годах крайне популярным стал алгоритм MD5, написанный Рональдом Ривестом. Он стал широко применяться при авторизации пользователей на сайтах и при подключении к серверам клиентских приложений. Однако его дальнейшее изучение показало, что алгоритм недостаточно надежен. В частности, он уязвим к атакам по типу псевдослучайной коллизии. Иными словами, возможно преднамеренное создание другой последовательности данных, хеш которой будет в точности соответствовать известному.
Поскольку дайджесты сообщений широко применяются в криптографии, на практике использование алгоритма MD5 сегодня приводит к серьезным проблемам. Например, с помощью такой атаки можно подделать цифровой сертификат x.509. В том числе возможна подделка сертификата SSL, позволяющая злоумышленнику выдавать свой фейк за доверенный корневой сертификат (CA). Более того, в большинстве наборов доверенных сертификатов легко найти те, которые по‑прежнему используют алгоритм MD5 для подписи. Поэтому существует уязвимость всей инфраструктуры открытых ключей (PKI) для таких атак.
Изнурительную атаку перебором устраивать придется только в случае действительно сложных паролей (состоящих из большого набора случайных символов) и для хеш‑функций с дайджестами большой длины (от 160 бит), у которых пока не нашли серьезных недостатков. Огромная масса коротких и словарных паролей сегодня вскрывается за пару секунд с помощью онлайновых сервисов.
Бойцы облачного фронта


2. «Крэк‑станция» поддерживает работу с хешами практически всех реально используемых типов. LM, NTLM, MySQL 4.1+, MD2/4/5 + MD5-half, SHA-160/224/256/384/512, ripeMD160 и Whirlpool. За один раз можно загрузить для анализа до десяти хешей. Поиск проводится по индексированной базе. Для MD5 ее объем составляет 15 миллионов пар (около 190 Гб) и еще примерно по 1,5 миллиона для каждой другой хеш‑функции.

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

3. CloudCracker.net — бесплатный сервис мгновенного поиска паролей по хешам MD5 и SHA-1. Тип дайджеста определяется автоматически по его длине. Пока CloudCracker находит соответствия только хешам некоторых английских слов и распространенных паролей, вроде admin123. Даже короткие пароли из случайных наборов символов типа D358 он не восстанавливает по дайджесту MD5.

4. Сервис MD5Decode.com содержит базу паролей, для которых известны значения MD5. Он также показывает все остальные хеши, соответствующие найденному паролю: MD2, MD4, SHA (160–512), RIPEMD (128–320), Whirlpool-128, Tiger (128–192 в 3–4 прохода), Snefru-256, GOST, Adler-32, CRC32, CRC32b, FNV (132/164), JOAAT 8, HAVAL (128–256 в 3–5 проходов). Если число проходов не указано, то функция вычисляет хеш в один проход.
Собственного поиска на сайте пока нет, но пароль или его хеш можно написать прямо в адресной строке браузера, добавив его после адреса сайта и префикса /encrypt/.

5. Проект с говорящим названием MD5Decrypt.org тоже позволяет найти соответствие только между паролем и его хешем MD5. Зато у него есть собственная база из 10 миллионов пар и автоматический поиск по 23 базам дружественных сайтов. Также на сайте имеется хеш‑калькулятор для расчета дайджестов от введенного сообщения по алгоритмам MD4, MD5 и SHA-1.

Еще один сайт, MD5Lab.com, получил хостинг у CloudFare в Сан‑Франциско. Искать по нему пока неудобно, хотя база растет довольно быстро. Просто возьми на заметку.
Ищем хеши Гуглом
Далеко не все сервисы готовы предоставить услугу поиска паролей по хешам бесплатно. Где‑то требуется регистрация и крутится тонна рекламы, а на многих сайтах можно встретить и объявления об услуге платного взлома. Часть из них действительно использует мощные кластеры и загружает их, ставя присланные хеши в очередь заданий, но есть и обычные пройдохи. Они выполняют бесплатный поиск за деньги, пользуясь неосведомленностью потенциальных клиентов.
Вместо того чтобы рекламировать здесь честные сервисы, я предложу использовать другой подход —находить пары хеш — пароль в популярных поисковых системах. Их роботы‑пауки ежедневно прочесывают веб и собирают новые данные, среди которых есть и свежие записи из радужных таблиц.
Поэтому для начала просто напиши хеш в поисковой строке Google. Если ему соответствует какой‑то словарный пароль, то он (как правило) отобразится среди результатов поисковой выдачи уже на первой странице. Единичные хеши можно погуглить вручную, а большие списки будет удобнее обработать с помощью скрипта BozoCrack.
Универсальный подход
Среди десятка хеш‑функций наиболее популярны MD5 и SHA-1, но точно такой же подход применим и к другим алгоритмам. К примеру, файл реестра SAM в ОС семейства Windows по умолчанию хранит два дайджеста каждого пароля: LM-хеш (устаревший тип на основе алгоритма DES) и NT-хеш (создается путем преобразования юникодной записи пароля по алгоритму MD4). Длина обоих хешей одинакова (128 бит), но стойкость LM значительно ниже из‑за множества упрощений алгоритма.
Постепенно оба типа хешей вытесняются более надежными вариантами авторизации, но многие эту старую схему используют в исходном виде до сих пор. Скопировав файл SAM и расшифровав его системным ключом из файла SYSTEM, атакующий получает список локальных учетных записей и сохраненных для них контрольных значений — хешей.
Далее взломщик может найти последовательность символов, которая соответствует хешу администратора. Так он получит полный доступ к ОС и оставит в ней меньше следов, чем при грубом взломе с помощью банального сброса пароля. Напоминаю, что из‑за эффекта коллизии подходящий пароль не обязательно будет таким же, как у реального владельца компьютера, но для Windows разницы между ними не будет вовсе. Как пела группа Bad Religion, «Cause to you I’m just a number and a clever screen name».
Аналогичная проблема существует и в других системах авторизации. Например, в протоколах WPA/WPA2, широко используемых при создании защищенного подключения по Wi-Fi. При соединении между беспроводным устройством и точкой доступа происходит стандартный обмен начальными данными, включающими в себя handshake. Во время «рукопожатия» пароль в открытом виде не передается, но в эфир отправляется ключ, основанный на хеш‑функции. Нужные пакеты можно перехватить, переключив с помощью модифицированного драйвера приемник адаптера Wi-Fi в режим мониторинга. Более того, в ряде случаев можно не ждать момента следующего подключения, а инициализировать эту процедуру принудительно, отправив широковещательный запрос deauth всем подключенным клиентам. Уже в следующую секунду они попытаются восстановить связь и начнут серию «рукопожатий».
Сохранив файл или файлы с хендшейком, можно выделить из них хеш пароля и либо узнать сам пароль, либо найти какой‑то другой, который точка доступа примет точно так же. Многие онлайновые сервисы предлагают провести анализ не только чистого хеша, но и файла с записанным хендшейком. Обычно требуется указать файл pcap и SSID выбранной точки доступа, так как ее идентификатор используется при формировании ключа PSK.
Проверенный ресурс CloudCracker.com, о котором в последние годы писали все кому не лень, по‑прежнему хочет за это денег. GPUHASH.me принимает биткоины. Впрочем, есть и бесплатные сайты с подобной функцией. Например, DarkIRCop.
Пока с помощью онлайновых сервисов и радужных таблиц находятся далеко не все пары хеш — пароль. Однако функции с коротким дайджестом уже побеждены, а короткие и словарные пароли легко обнаружить даже по хешам SHA-160. Особенно впечатляет мгновенный поиск паролей по их дайджестам с помощью Гугла. Это самый простой, быстрый и совершенно бесплатный вариант.
Все методы взлома MD5
Содержание статьи
Ни для кого не секрет, что криптография прочно вошла в нашу жизнь. Интернет-сервисы, социальные сети, мобильные устройства — все они хранят в своих базах пароли пользователей, зашифрованные с помощью различных алгоритмов. Наиболее популярным таким алгоритмом сегодня, безусловно, является MD5. О способах его взлома и пойдет речь.
Немного о криптографии
Современная криптография включает в себя три направления: шифрование с закрытым ключом, шифрование с открытым ключом и хеширование. Сегодня мы поговорим о том, что такое хеширование и с чем его едят. В целом под хешированием понимают преобразование входных данных произвольной длины в выходную битовую строку фиксированной длины. Чаще всего хеш-функции применяют в процессе аутентификации пользователя (в базе данных обычно хранится хеш пароля вместо самого пароля) и для вычисления контрольных сумм файлов, пакетов данных и т. п. Одним из наиболее известных и широко используемых алгоритмов хеширования является MD5.
WARNING!
Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный материалами данной статьи.
Начало
Алгоритм MD5 представляет собой 128-битный алгоритм хеширования. Это значит, что он вычисляет 128-битный хеш для произвольного набора данных, поступающих на его вход. Этот алгоритм разработал профессор Рональд Ривест из Массачусетского технологического института в 1991 году для замены менее надежного предшественника — MD4. Алгоритм был впервые опубликован в апреле 1992 года в RFC 1321. После этого MD5 стал использоваться для решения самых разных задач, от хеширования паролей в CMS до создания электронно-цифровых подписей и SSL-сертификатов.
О том, что алгоритм MD5 можно взломать, впервые заговорили в 1993 году. Исследователи Берт ден Боер и Антон Боссиларис показали, что в алгоритме возможны псевдоколлизии. Через три года, в 1996-м, Ганс Доббертин опубликовал статью, в которой доказал наличие коллизий и описал теоретическую возможность взлома MD5. Это был еще не взлом, но в мире начались разговоры о необходимости перехода на более надежные алгоритмы хеширования, например SHA1 (на момент написания этой статьи уже было доказано, что коллизии имеются и в этом алгоритме, поэтому рекомендую использовать SHA2) или RIPEMD-160.
Первые атаки
Непосредственный взлом MD5 начался 1 марта 2004 года. Компания CertainKey Cryptosystems запустила проект MD5CRK — распределенную систему поиска коллизий. Целью проекта был поиск двух сообщений с идентичными хеш-кодами. Проект завершился 24 августа 2004 года, когда четыре независимых исследователя — Ван Сяоюнь, Фэн Дэнгуо, Лай Сюэцзя и Юй Хунбо — обнаружили уязвимость алгоритма, позволяющую найти коллизии аналитическим методом за более-менее приемлемое время. С помощью этого метода можно всего лишь за час выявить коллизии на кластере IBM p690 (жаль, что у меня нет такого дома). 🙂 Первого марта 2005 года было продемонстрировано первое использование указанной уязвимости на практике. Группа исследователей представила два сертификата X.509 с разными наборами ключей, но с идентичными контрольными суммами. В том же году Властимил Клима опубликовал алгоритм, позволяющий обнаруживать коллизии на обычном ноутбуке за несколько часов. В 2006 он пошел дальше. Восемнадцатого марта 2006 года исследователь обнародовал алгоритм, находящий коллизии за одну минуту! Этот метод получил название «туннелирование». В 2008 году на конференции Chaos Communication Congress была представлена статья о методе генерации поддельных сертификатов X.509. Фактически это был первый случай реального использования коллизий в алгоритме MD5.

Хакер #156. Взлом XML Encryption
Большая работа была также проделана и для ускорения взлома хешей. В 2007 году Кевин Бриз представил программу, использующую Sony PlayStation3 для взлома MD5. Он сумел добиться очень неплохих результатов: 1,4 миллиарда MD5-хешей генерировались всего лишь за одну секунду! Уже через два года, в 2009-м, на BlackHat USA вышла статья об использовании GPU для поиска коллизий, что позволяло повысить его скорость в несколько раз, особенно если он выполнялся с помощью нескольких видеокарт одновременно.
Видеокарта ATI Radeon HD 4850 X2 позволяет генерировать до 2,2 миллиардов хешей в секунду!
Использование алгоритма MD5 в ЭЦП неприемлемо вследствие недостаточной устойчивости этого алгоритма к поиску коллизий.
Это конец?
В 2011 году IETF согласилось внести изменения в RFC 1321 (MD5) и RFC 2104 (HMAC-MD5). Так появился документ RFC 6151. Он признает алгоритм шифрования MD5 небезопасным и рекомендует отказаться от его использования. На мой взгляд, этот документ официально положил конец MD5. Однако, несмотря на то что алгоритм MD5 был официально признан небезопасным, существуют тысячи, если не десятки и сотни тысяч приложений, которые используют его для хранения паролей, в электронно-цифровых подписях и для вычисления контрольных сумм файлов. Кстати, 31 октября 2008 года NIST объявила конкурс среди криптографов. Цель конкурса — разработать алгоритм хеширования на замену устаревшим SHA1 и SHA2. На данный момент финалисты уже определены — это BLAKE, Gostl, JH, Keccak и Skein.
Ighashgpu: взлом с помощью GPU
Мы используем вышеприведенный способ для взлома одного определенного хеша, сгенерированного при помощи алгоритма MD5. Максимальная длина возможного пароля составляет семь символов. Через какое-то время пароль будет найден (qwerty). Теперь давай попробуем взломать еще один хеш, но с немного другими условиями. Пусть наш хеш имеет вид d11fd4559815b2c3de1b685bb78a6283, а включает в себя буквы, цифры, знак подчеркивания и имеет суффикс «_admin». В данном случае мы можем использовать перебор пароля по маске, чтобы упростить программе задачу:
Здесь параметр ‘-u’ позволяет указать набор символов, используемых при переборе, а параметр ‘-m’ задает маску пароля. В нашем случае маска состоит из шести произвольных символов, после которых идет сочетание «_admin». Подбор пароля также не составит никакого труда.
Коллизии
Коллизией в криптографии называют два разных входных блока данных, которые для одной и той же хеш-функции дают один и тот же хеш. Каждая функция на выходе дает последовательность битов определенной длины, которая не зависит от размера первоначальных данных. Отсюда следует, что коллизии существуют для любого алгоритма хеширования. Однако вероятность того, что ты сможешь найти коллизию в «хорошем» алгоритме, практически стремится к нулю. К сожалению или к счастью, алгоритмы хеширования могут содержать ошибки, как и любые программы. Многие хеш-функции либо уже были сломаны, либо скоро будут. В данном случае «сломать» — значит найти коллизию за время, которое много меньше заявленной бесконечности.
Ighashgpu: списки
Теперь давай попробуем взломать сразу несколько паролей одновременно. Предположим, что к нам в руки попала база данных хешей паролей. При этом известно, что каждый пароль оканчивается символами c00l:
Сохрани хеши в файле encrypted.dat и запусти Ighashgpu как указано ниже:
После завершения работы программы в папке Ighashgpu появится файл ighashgpu_results.txt со взломанными паролями:

Ighashgpu: соль
Напоследок давай произведем взлом «подсоленного» хеша. Предположим, что хеш генерируется по следующему алгоритму:
В итоге мы получили следующий хеш: 42151cf2ff27c5181bb36a8bcfafea7b. Ighashgpu позволяет указывать «соль» в параметре «-asalt»:
И мы снова получили искомый пароль легко и быстро.
Занимательная математика
Для 8-символьного пароля, составленного из первых 126 символов ASCII, доступно 63 527 879 748 485 376 возможных комбинаций. Для 254 символов количество возможных комбинаций возрастает до 17 324 859 956 700 833 536, что аж в 2,7 миллиарда раз больше, чем людей на нашей планете. Если создать текстовый файл, содержащий все эти пароли, то он займет миллионы терабайт. Конечно, в современном мире это возможно, но стоимость хранения такого файла будет просто заоблачной.
Взлом MD5 в режиме турбо
Взлом хешей путем полного перебора даже на самом лучшем железе занимает довольно много времени, особенно если пароль больше восьми символов. Самый простой способ увеличить скорость подбора пароля — это создать базу данных всех хешей для определенного набора символов. В 80-х годах прошлого столетия хакеры полагали, что когда у них появится более мощное железо, 640 Кб памяти и жесткий диск размером в 10 Мб, то такая база станет реальностью и подбор любого пароля превратится в минутное дело. Однако железо развивалось, а мечта так и оставалась мечтой. Ситуация изменилась лишь в августе 2003 года, после того, как Филипп Оэшлин, доктор философии в области компьютерных сетей из Швейцарского технологического института в Лозанне, опубликовал свою работу о проблеме выбора оптимального соотношения место-время. В ней описывался метод взлома хеш-функций с помощью «радужных» таблиц. Суть нового метода заключается в следующем. Сначала необходимо выбрать произвольный пароль, который затем хешируется и подвергается воздействию функции редукции, преобразующей хеш в какой-либо возможный пароль (к примеру, это могут быть первые 64 бита исходного хеша). Далее строится цепочка возможных паролей, из которой выбираются первый и последний элементы. Они записываются в таблицу. Чтобы восстановить пароль, применяем функцию редукции к исходному хешу и ищем полученный возможный пароль в таблице. Если такого пароля в таблице нет, хешируем его и вычисляем следующий возможный пароль. Операция повторяется, пока в «радужной» таблице не будет найден пароль. Этот пароль представляет собой конец одной из цепочек. Чтобы найти исходный пароль, необходимо прогнать всю цепочку заново. Такая операция не занимает много времени, в зависимости от алгоритма построения цепочки это обычно несколько секунд или минут. «Радужные» таблицы позволяют существенно сократить объем используемой памяти по сравнению с обычным поиском. Единственный недостаток описанного метода состоит в том, что на построение таблиц требуется довольно много времени.
Теперь перейдем от слов к делу и попробуем взломать пару-тройку хешей паролей с помощью этого метода.
Rainbow tables
«Радужные» таблицы — это особый тип словаря, который содержит цепочки паролей и позволяет подобрать пароль в течение нескольких секунд или минут с вероятностью 85–99%.
«Радужный» взлом
Сначала необходимо определиться с программой. Лично мне нравитсяRainbowCrack, которая распространяется бесплатно и работает как на Windows, так и на Linux. Она поддерживает четыре алгоритма хеширования: LN/NTLM, MD5 и SHA1. Программа не требует установки, достаточно распаковать ее куда-нибудь на диск. После распаковки необходимо найти «радужные» таблицы для алгоритма MD5. Здесь все не так просто: их можно либо скачать бесплатно, либо купить, либо сгенерировать самостоятельно. Один из самых больших архивов бесплатных таблиц доступен на сайте проекта Free Rainbow Tables. Кстати, ты тоже можешь помочь проекту, если скачаешь клиент с сайта и присоединишься к распределенной международной сети, которая генерирует «радужные» таблицы. На момент написания статьи на этом сайте уже было доступно 3 Тб таблиц для алгоритмов MD5, SHA1, LM и NTLM. Если у тебя нет возможности слить такой объем информации, то на том же сайте можно заказать диски с «радужными» таблицами. На данный момент предлагается три пакета: LN/NTLM, MD5 и SHA1 — по 200 долларов каждый. Мы же сгенерируем таблицы самостоятельно. Для этого необходимо использовать программу rtgen, входящую в состав RainbowCrack. Она принимает следующие входные параметры:
Рассмотрим последние параметры подробнее:
В данном случае мы создаем таблицу паролей, состоящих из цифр и прописных букв латинского алфавита и имеющих длину от одного до семи символов. На моем Eee PC с процессором Intel Atom N450 этот процесс занял почти два дня :). В итоге я получил файл md5loweralpha-numeric#1-702000×975054890.rt размером в 1,5 Гб.
Далее полученную таблицу необходимо отсортировать, чтобы оптимизировать поиск нужной нам цепочки. Для этого запускаем rtsort.exe:
Ждем пару минут и таблица готова! Теперь можно ломать сами пароли. Для начала попробуем подобрать пароль для одного хеша: d8578edf8458ce06fbc5bb76a58c5ca4. Запускаем rcrack_gui.exe и выбираем Add Hash. в меню File. В появившемся окне вводим хеш и нажимаем OK. Теперь выбираем файл с «радужной» таблицей. Для этого используем пункт Search Rainbow Tables. в меню Rainbow Table. В открывшемся окне для выбора файла ищем файл с таблицей, у меня это md5_loweralpha-numeric#1-7_0_2000x97505489_0.rt, затем жмем Open. Через несколько секунд пароль у нас в руках! Аналогичную операцию можно произвести и над списком хешей из файла.

«Радужные» таблицы vs. CPU vs. GPU
Я думаю, ты обратил внимание на то, насколько быстро Ighashgpu способен взламывать MD5-хеши полным перебором, и на то, что RainbowCrack делает это еще быстрее при наличии хорошей «радужной» таблицы. Я решил сравнить скорость работы этих программ. Для чистоты эксперимента я использовал программу MDCrack, которая осуществляет брут пароля на CPU (и является одной из лучших среди программ такого типа). Вот что получилось в результате для GPU (nVidia GeForce GT 220M), CPU (Intel Atom N450, два ядра) и «радужных» таблиц:
Как видишь, скорость перебора с использованием CPU намного меньше, чем с использованием GPU или «радужных» таблиц. Более того, большинство специализированных программ позволяет создать кластер из видеокарт, благодаря чему скорость перебора пароля увеличивается в разы. Я думаю, ты обратил внимание на то, что скорость подбора 4- и 5-символьного паролей ниже, чем скорость подбора пароля из шести или семи символов. Это связано с тем, что поиск пароля начинается только после загрузки таблицы в память. Получается, что из шестнадцати секунд в среднем тринадцать тратится на загрузку и три — на взлом хеша.

bit.ly/vEhdir — добавление нового алгоритма хеширования в RainbowCrack при помощи API.
bit.ly/vTSB9K — описание формата «радужной» таблицы.
Вместо заключения
В конце я бы хотел немного поговорить о защите твоих паролей. Во-первых, не используй уязвимые алгоритмы хеширования, такие как MD5 или SHA1. На данный момент стоит задуматься об использовании одной из криптографических хеш-функций SHA2 или SHA3 (как только опубликуют соответствующий стандарт). Во-вторых, не используй функции хеширования напрямую. Всегда старайся использовать «соль» и комбинировать различные алгоритмы. И в-третьих, выбирай сложные произвольные пароли длиной как минимум восемь символов. Конечно, это не защитит тебя от взлома на 100 %, но хотя бы усложнит жизнь злоумышленникам.

