spamsink: (Default)
[personal profile] spamsink
Нет, не в этом, а в плохом (хакерском) смысле.

[livejournal.com profile] aa_kir упомянул в подзамочном посте "радужные таблицы", использующиеся для вскрытия паролей существенной длины за незначительное (часы) время. Я решил разобраться, как они устроены.

Объясняю на примере, как я самому себе объяснил.

Предположим, у нас есть система, которая хранит хеш - значение какой-нибудь криптографической функции от пароля (например, SHA-1). Также предположим, что мы когда-нибудь в будущем будем искать пароли на множестве всех ASCII-строк, использующих графические символы от ! до ~ длиной 10 символов (это больше, чем 264).

Тогда весьма заблаговременно мы можем проделать следующую работу:

Берем произвольный пароль (например, "passw0rd"). Запоминаем его в качестве головы списка. Вычисляем от него ту системную криптографическую функцию f. Полученное число преобразуем каким-нибудь образом в строку, принадлежащую к рассматриваемому множеству паролей - например, делением на 9410 и записью остатка в виде 94-ричного числа - от которого снова вычислим f, и так, скажем, 232 шагов. Допустим, после 232 шагов получась строка "_)KJVg(&^e". Добавляем строку "_)KJVg(&^e" к списку.
А потом еще 232 шагов, и еще, до тех пор, пока не надоест (надоесть должно примерно когда в списке окажется 9410/232 строк), или на каком-нибудь шаге не встретится один из запомненных паролей. В последнем случае завершаем текущий список, выбираем новый произвольный пароль и начинаем создавать еще один список, и т.п. пока не надоест (см. выше).

Итого, у нас получатся сущие пустяки: 9410/232 * 10 = около 116 Гб, а для более коротких паролей еще более сущие пустяки.

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

На очевидный вопрос о сомнительной производительности алгоритма у меня есть ответ.

Date: 2007-09-29 05:47 am (UTC)
From: [identity profile] ivan-ghandhi.livejournal.com
Чем это лучше просто взятия остатков по модулю? Типа по китайской теореме об остатках... и т.д.

Date: 2007-09-29 12:38 pm (UTC)
From: [identity profile] aa-kir.livejournal.com
На очевидный вопрос о сомнительной производительности алгоритма у меня есть ответ.
И каков же ответ? Сколько я знаю, вроде работает...

Date: 2007-09-29 12:52 pm (UTC)
From: [identity profile] aa-kir.livejournal.com
Кстати: этот сайт дает возможность всем желающим представить хеш для взлома - у них 0.625 Tb таблиц:

http://www.plain-text.info/view/action/viewallhashes/

Date: 2007-10-01 10:22 pm (UTC)
From: [identity profile] syarzhuk.livejournal.com
Я как-то работал в конторе, где все пароли, как и полагается, хранились зашифрованными MD5
Но - система, кроме веба, также имела телефонный интерфейс, поэтому все пароли были шестизначными числами. После чего я долго поражал народ тем, что мог залогиниться как любой пользователь
Page generated Apr. 29th, 2026 07:32 pm
Powered by Dreamwidth Studios