Радужный стол - это «просто» умный метод сжатия для большой таблицы предварительно вычисленных хэшей. Идея состоит в том, что таблица может «инвертировать» выходные данные хэша, если и только если соответствующий вход был рассмотрен во время построения таблицы.
Каждая строка таблицы («цепочка») представляет собой последовательность вызовов хеш-функций. Хитрость в том, что каждый вход вычисляется детерминистически из предыдущего выхода в цепочке, так что:
- сохраняя начальную и конечную точки цепочки, вы "морально" сохраняете всю цепочку, которую вы можете восстановить по своему желанию (именно здесь радужный стол можно рассматривать как метод сжатия);
- вы можете начать перестройку цепочки с выхода хеш-функции.
Функция сокращения - это клей, который превращает вывод хэш-функции в соответствующий ввод (например, строка символов, которая выглядит как подлинный пароль, состоящий только из печатных символов). Его роль в основном заключается в том, чтобы иметь возможность генерировать возможные входные данные хеш-функции с более или менее равномерной вероятностью, учитывая случайные данные для работы (и выходные данные будут приемлемо случайными). Функция сокращения не должна иметь какой-либо конкретной структуры, в частности, в отношении того, как работает сама хэш-функция; функция сокращения должна просто позволять продолжать строить цепочку, не создавая слишком много ложных столкновений.