Атака по радужным таблицам¶
Атака по радужным таблицам — это метод криптоанализа, применяемый для восстановления исходного текста (прообраза) хеш-функции по её значению. Относится к классу атак на основе времени и памяти (time-memory trade-off), позволяя существенно сократить время перебора по сравнению с полным перебором (brute force) за счёт предварительно вычисленных данных, хранящихся в сжатом виде. Атака направлена на взлом хешированных паролей, где злоумышленник, имея базу хешей, пытается найти соответствующие им пароли без знания исходного алгоритма или соли.
¶Принцип работы
Атака по радужным таблицам основана на идее компромисса между вычислительными затратами и объёмом памяти. В отличие от простых таблиц поиска, где для каждого возможного пароля хранится его хеш (что требует огромного объёма памяти), радужные таблицы используют цепочки редукции и хеширования для сжатия данных.
¶Основные компоненты
- Хеш-функция \( H \): преобразует пароль произвольной длины в хеш фиксированной длины (например, MD5, SHA-1).
- Функция редукции \( R \): отображает хеш обратно в пространство возможных паролей. Эта функция не является обратной к хешу, а лишь детерминированно преобразует хеш в строку, которая может быть паролем (например, берёт первые 8 символов хеша в кодировке Base64).
- Цепочка: последовательность вида \( P_1 \xrightarrow{H} H_1 \xrightarrow{R} P_2 \xrightarrow{H} H_2 \xrightarrow{R} \dots \xrightarrow{H} H_k \), где \( P_1 \) — начальный пароль, \( H_k \) — конечный хеш. Длина цепочки \( k \) выбирается заранее.
¶Построение таблицы
- Выбирается множество начальных паролей \( P_1, P_2, \dots, P_m \) (например, случайные строки).
- Для каждого начального пароля строится цепочка длины \( k \): последовательно применяются \( H \) и \( R \).
- В таблицу сохраняется только пара (начальный пароль, конечный хеш). Таким образом, \( m \) цепочек сжимаются в \( m \) записей, что значительно экономит память по сравнению с хранением всех промежуточных значений.
¶Процесс взлома
Для заданного хеша \( h \) (целевого значения) атака выполняется в несколько этапов:
- Проверка последнего хеша: применяется функция редукции \( R \) к \( h \), получается пароль \( P' \). Затем строится цепочка длины \( k-1 \) от \( P' \), и её конечный хеш сравнивается с конечными хешами в таблице. Если совпадение найдено, то восстанавливается начальный пароль соответствующей цепочки, и по нему строится вся цепочка до момента, где встретится \( h \). Это даёт исходный пароль.
- Проверка предпоследнего хеша: если совпадения нет, то к \( h \) применяется \( R \), затем \( H \), снова \( R \), и строится цепочка длины \( k-2 \). Процесс повторяется, пока не будет найдено совпадение или не будут исчерпаны все возможные позиции в цепочке.
- Успех или неудача: если совпадение найдено, пароль восстановлен. Если нет — данный хеш отсутствует в таблице.
¶Отличие от других методов
¶Полный перебор (brute force)
- Требует \( O(N) \) времени, где \( N \) — число возможных паролей, но практически не требует памяти.
- Неэффективен для больших пространств паролей.
¶Таблицы поиска (lookup tables)
- Хранят все пары (пароль, хеш) — требуют \( O(N) \) памяти, но дают мгновенный доступ за \( O(1) \).
- Неприменимы для больших \( N \) из-за колоссальных объёмов памяти.
¶Радужные таблицы
- Используют \( O(N^{2/3}) \) памяти и \( O(N^{2/3}) \) времени (при оптимальном выборе параметров).
- Позволяют обрабатывать пространства паролей размером до \( 10^{14} \) и более.
¶История и развитие
Метод был впервые предложен Филиппом Охслегером (Philippe Oechslin) в 2003 году в его работе «Making a Faster Cryptanalytic Time-Memory Trade-Off». Охслегер усовершенствовал более ранние идеи Мартина Хеллмана (1980 год) по компромиссу времени и памяти, введя использование множества различных функций редукции для каждой позиции в цепочке. Это позволило избежать коллизий, характерных для простых цепочек Хеллмана, и повысить вероятность успеха.
Первоначально атака применялась к хеш-функциям без соли (например, LM-хеши в Windows NT, старые версии Unix). С развитием методов защиты (соль, итерации, bcrypt, scrypt) эффективность радужных таблиц снизилась, но они остаются актуальными для систем, не использующих соль или использующих слабые хеши.
¶Применение
¶Взлом паролей
Основное применение — восстановление паролей из украденных баз данных хешей. Злоумышленники могут использовать готовые наборы радужных таблиц (например, от проекта RainbowCrack), покрывающие определённые пространства паролей (до 8 символов, буквы и цифры).
¶Тестирование безопасности
Специалисты по информационной безопасности применяют радужные таблицы для аудита стойкости парольных политик в организациях. Например, проверка, сколько паролей из базы можно восстановить за разумное время.
¶Судебная экспертиза
В криминалистике метод используется для восстановления доступа к зашифрованным данным, если пароль был хеширован без соли.
¶Ограничения и контрмеры
¶Соль (salt)
Добавление случайной соли к каждому паролю перед хешированием делает радужные таблицы бесполезными, так как для каждого возможного значения соли потребуется отдельная таблица. Соль — наиболее эффективная защита.
¶Итеративное хеширование (key stretching)
Алгоритмы вроде bcrypt, PBKDF2, scrypt многократно применяют хеш-функцию, увеличивая время вычисления каждой цепочки. Это делает построение таблиц чрезвычайно затратным по времени.
¶Длинные и сложные пароли
Радужные таблицы эффективны только для ограниченных пространств паролей (обычно до 8-10 символов). Для паролей длиной более 12 символов с использованием спецсимволов объём таблиц становится нереалистичным.
¶Использование современных хешей
Хеши SHA-256, SHA-3 с большим выходом (256 бит и более) требуют больше памяти для хранения цепочек, что снижает практичность атаки.
¶Примеры реализации
¶RainbowCrack
Открытый проект (существует с 2003 года), предоставляющий утилиты для генерации радужных таблиц и их использования. Поддерживает хеши MD5, SHA-1, NTLM, LM. Таблицы доступны для скачивания на различных ресурсах, но их использование для взлома без разрешения может быть незаконным.
¶Ophcrack
Специализированная программа для взлома LM- и NTLM-хешей Windows. Использует предварительно сгенерированные радужные таблицы, встроенные в дистрибутив. Эффективна для старых версий Windows (до Windows 7).
¶Hashcat
Хотя Hashcat в первую очередь ориентирован на атаки с использованием GPU, он также поддерживает атаки по радужным таблицам через модуль «-a 9» (table lookup). Однако из-за высокой эффективности прямого перебора на GPU радужные таблицы в Hashcat применяются редко.
¶Критика и этические аспекты
Атака по радужным таблицам критикуется за упрощение несанкционированного доступа к данным. В ряде стран (включая Россию) создание и распространение инструментов для взлома паролей может быть квалифицировано как подготовка к неправомерному доступу к компьютерной информации (статья 272 УК РФ). Однако метод легально используется в образовательных целях и для тестирования безопасности.
С точки зрения криптографии, радужные таблицы демонстрируют фундаментальное ограничение: любая детерминированная хеш-функция без соли уязвима для атак с предварительными вычислениями. Это стимулировало развитие криптографических протоколов с обязательным использованием соли.
¶Источники
- Oechslin, P. (2003). «Making a Faster Cryptanalytic Time-Memory Trade-Off». Advances in Cryptology — CRYPTO 2003.
- Hellman, M. (1980). «A Cryptanalytic Time-Memory Trade-Off». IEEE Transactions on Information Theory.
- RainbowCrack Project Documentation. (2003–2023).
- Статья «Rainbow table» в английской Википедии (версия от 2023 года).
- Федеральный закон «Об информации, информационных технологиях и о защите информации» № 149-ФЗ (2006).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


