Хэш-функция - функция, выполняющая одностороннее преобразование. По заданной строке (паролю) она получает некое хеш-значение (обычно последовательность из цифр и букв A - F), такое, что по нему очень сложно получить какую-либо информацию об исходной строке-пароле.
Изначально слово взято из английского языка: hash - мешанина, мусор, ненужная информация. На русском языке возможны два варианта транслитерации: хеш или хэш.
Смысл слова можно трактовать так: по хеш-значению мы не получим никакой полезной информации, поэтому само по себе оно является бессмысленным набором байт, мусором.
Однако, обладая свойством обычных функций (то есть по одинаковым строчкам в любое время мы получим одинаковые хеш-значения), хеш-функции пригодились в области авторизации (разграничении доступа). По паролю очень легко получить хеш-значение, которое можно хранить, и использовать для сравнения паролей с оригинальным. В то же время, даже имея доступ к базе хеш-значений, казалось бы, нельзя получить доступ к паролям.
|
Простой пример:
Мы хотим сохранить строку test, как пароль для пользователя Admin. Для этого мы записываем в базу паролей:
Admin = 098f6bcd4621d373cade4e832627b4f6 (эта последовательность символов есть хеш-значение MD5 от строки test). Теперь мы можем проверить любую строку на соответсвие нашему паролю очень просто - посчитаем от нее хеш-значение, и сравним с тем, которое мы сохранили в базе. Для примера, MD5 от строки rest - это 65e8800b5c6800aad896f888b2a62afc и оно не совпадает с тем, что мы сохранили. А значит, rest - не пароль для Admin. В то же время, MD5 от строки test - это всегда 098f6bcd4621d373cade4e832627b4f6, что совпадает с сохраненным значением. А значит, test всегда подойдет как пароль к Admin. |
Некоторое время считали, что сами хеш-значения действительно не разглашают никакой информации о пароле, потому их не особо прятали. Сейчас же, в основном, хеш-значения стараются держать в секрете.
А потому, сам процесс атаки делится на три этапа:
А теперь немного подробнее.
Что касается первого этапа, то есть добычи хеш-значений, то здесь все сложно. Обычно для получения хеш-значений ("хешей", на жаргоне "хакеров") необходимы специальные приемы и техники. Они связанны с поиском уязвимостей в целевой системе, или обманом. В принципе, почти невозможно получить чужие хеш-значения, поэтому дальше мы будем говорить только о восстановлении паролей к своим собственным хеш-значениям. Кроме того, имейте в виду, что кража хеш-значений является противозаконной, а программа The UDC расчитана только на действия пользователя, не противоречащие действующим законам.
Тем не менее, в сети Интернет, существует немало сайтов, предоставляющих хеш-значения для восстановления. Например:
Теперь поговорим о втором этапе, то есть об определении использованной хеш-функции по хеш-значениям. Здесь ситуация, в общем случае, тоже не очень-то и гладкая. Ведь хеш-значения не несут никакой информации об исходном пароле или примененной хеш-функции. Да их вообще нельзя отличить от случайной строчки такой же длины.
Единственное, что может дать определенную информацию - это длина хеш-значения в символах. Она должна соответствовать в точности разрядности хеш-функции, которую можно узнать, например, из программы The UDC, на вкладке *Прогресс* (надо заметить, что чтобы перевести биты в символы, число бит нужно поделить на 4).
Только вот одна проблема, для каждой длины хеш-значения есть несколько хеш-функций с такой же разрядностью, например:
Потому, весьма желательно (если и не обязательно), точно знать какая именно хеш-функция применялась. Почти всегда это можно сделать по исходному коду целевой системы.
Вот самые простые соответствия хеш-функциям из UDC и реальным системам:
Большая часть информации об атаке на хеш-значения перебором находится в основной справке.
Почему нельзя находить пароли "умнее" чем перебором? Посмотрим выше, "по хеш-значению очень сложно получить какую-либо информацию об исходной строке-пароле" - так утверждают математики, и пока никаких опровержений этого тезиса не найдено. А значит, умнее, чем, попытавшись подставить в хеш-функцию различные строки, найти пароль просто не удастся.
Есть несколько методов, значительно ускоряющих перебор, например, Hybrid Rainbow атака, однако, для стойких хеш-функций, кроме перебора и его вариаций, у нас нет альтернатив.
© The [SNS] Technologies, 28 апреля 2007