Что такое радуга?

Я читал несколько статей о солях и хэшах паролей, и несколько человек упоминали о радужных атаках. Что такое радужная атака и как лучше всего ее предотвратить?

7 ответов

Решение

Статья в Википедии немного сложна для понимания. В двух словах, вы можете думать о Радужной Таблице как о большом словаре с предварительно вычисленными хэшами и паролями, из которых они были рассчитаны.

Разница между Rainbow Tables и другими словарями заключается просто в способе хранения записей. Таблица Rainbow оптимизирована для хэшей и паролей и, таким образом, обеспечивает большую оптимизацию пространства при сохранении хорошей скорости поиска. Но по сути это просто словарь.

Когда злоумышленник крадет у вас длинный список хэшей паролей, он может быстро проверить, есть ли какие-либо из них в Радужной таблице. Для тех, кто есть, Rainbow Table будет также содержать строку, из которой они были хэшированы.

Конечно, слишком много хэшей, чтобы хранить их все в радужном столе. Поэтому, если хеша нет в конкретной таблице, хакеру не повезло. Но если ваши пользователи используют простые английские слова и вы их хешировали только один раз, есть большая вероятность, что хорошая Радужная таблица будет содержать пароль.

Это когда кто-то использует таблицу Rainbow для взлома паролей.

Если вы беспокоитесь об этом, вы должны использовать соль. Существует также вопрос Stack Overlow, который может помочь вам понять соль немного лучше, чем Википедия...

Это полезная статья о Rainbow Tables для непрофессионала. (Не предполагая, что вы непрофессионал, но это хорошо написано и сжато.)

Поздно к вечеринке, но я также знал, что Rainbow Tables является методом атаки на хешированные / несоленые пароли. Однако недавно в Твиттере http://codahale.com/how-to-safely-store-a-password/ был предоставлен общий доступ, и в зависимости от ваших потребностей и проблем... вы, возможно, не сможете найти путь к безопасному хранению паролей.

Я надеюсь, что это информативно для вас.

Вообще говоря, вы шифруете огромное количество возможных коротких строк открытого текста (например, для паролей) и сохраняете зашифрованные значения вместе с открытым текстом. Это делает (относительно) простым поиск простого текста, когда у вас есть зашифрованное значение.

Это наиболее полезно для слабых и / или несоленных хэшей паролей. Популярным примером является хэш LAN Manager, используемый версиями Windows вплоть до XP для хранения паролей пользователей.

Обратите внимание, что предварительно вычисленная радужная таблица даже для чего-то такого простого, как хеш-код LM, занимает много процессорного времени для генерации и занимает довольно много места (порядка 10 с гигабайт IIRC).

Радужные таблицы в основном позволяют кому-то реально хранить большое количество предварительно вычисленных хэшей.

Это позволяет легко взломать ваши хешированные пароли, поскольку вместо выполнения целой кучи хеширующих функций, работа уже выполнена, и им фактически просто нужно выполнить поиск в базе данных.

Лучшая защита от такого рода атак - использовать соль (случайные символы) в вашем пароле. т.е. вместо хранения md5(пароль), сохраните md5(пароль + соль) или, что еще лучше, md5(соль + md5(пароль)).

Поскольку даже с радужными столами почти невозможно хранить все возможные соленые хэши.

Кстати, очевидно, что вы должны хранить свою соль вместе с вашим хешем, чтобы вы могли аутентифицировать пользователя.

Википедия твой друг:

http://en.wikipedia.org/wiki/Rainbow_table

Другие вопросы по тегам