FAQ по хэшам.
В связи с большим количеством вопросов по данной теме решил написать этот небольшой FAQ.
Итак:
1) Что такое хэши.
число фиксированной длины, которое ставится в соответствие данным
произвольной длины таким образом, чтобы вероятность появления различных
данных с одинаковым хешем стремилась к нулю, а восстановить данные по
их хешу было как можно труднее;
ИЛИ: хэш-это преобразованные специальной математической функцией
данные, которые нельзя вернуть в первоначальный вид из за необратимости
такого преобразования.
2) Для чего используются хэши
В общем случае хэши необходимы для проверки некоторой информации на
идентичность оригиналу, без использования оригинала. Для сверки
используется хеш-значение проверяемой информации. Различают два
основных направления этого применения:
Проверка на наличие ошибок
Например, контрольная сумма может быть передана по каналу связи вместе
с основным текстом. На приёмном конце, контрольная сумма может быть
рассчитана заново и её можно сравнить с переданным значением. Если
будет обнаружено расхождение, то это значит, что при передаче возникли
искажения и можно запросить повтор.
Бытовым аналогом хеширования в данном случае может служить приём, когда
при переездах в памяти держат количество мест багажа. Тогда для
проверки не нужно вспоминать про каждый чемодан, а достаточно их
посчитать. Совпадение будет означать, что ни один чемодан не потерян.
То есть, количество мест багажа является его хеш-кодом.
Проверка правильности пароля.
В большинстве случаев пароли не храняться в открытом виде, хранятся
лишь их хэш-значения. Хранить парольные фразы нецелесообразно, так как
в случае несанкционированного доступа хранилищу паролей хакер узнает их
все и сразу сможет ими воспользоваться, а при хранении хэшэй он узнает
лишь эти хэши, которые необратимы в исходные пароли.В ходе
аутентификации вычисляется хэш введённого пароля, и сравнивается с
сохранённым.
3) Как происходит восстановление информации, на основе которой получен хэш?
Исхдная информация может быть получена только путем прямого перебора.
Т. е мы должны захэшировать информацию и сравнить получившийся хэш с
исходным. Если хэши совпали, то исходная информация найдена.
4) Какие виды хэшей и алгоритмы хэширования применяются чаще всего?
MD5, MD5 (Unix), MySQL, MySQL5, DES (Unix), SHA-1
5) Как можно быстро определить, какой перед нами хэш?
MySQL хэш имеет длину 16 символов. 708a11373c7be140
>если хэш начинается с сигнатуры "$1$", то обычно это MD5 (Unix) хэш. $1$.KwRn6S/$wvSlAWKv9XHDs6r3/Yt8t.
>если хэш начинается с сигнатуры "$apr1$", то обычно это MD5 (APR) хэш. $apr1$H/O3XJDr$BCH3/./fiVKcI6ChplZzn/
>если хэш имеет длину 8 байт, то это может быть MySQL-хэш или любой
более длинный хэш, "урезанный" до длины 8 байт - например, MD5-хэш.
длину 16 байт (32 символа) обычно имеют следующие типы хэшей:
- MD4, MD5 и другие хэши; MD4: a9462125b41b2f7f24909cf6b4ae182d MD5: b79fc5c1067ee5a0dcd021b9d8b59701
- некоторые SALT'овые хэши, например, md5(md5($pass).$salt); 2352739767ac7450c171bf23e24ae861
- некоторые составные хэши, например, md5(md5($pass)) и др.
если хэш имеет длину 20 байт (40 символов), то это может быть SHA-1 или MySQL5-хэш.
MySQL5: 7584251609201a1cee008659ffb88e8fec5b9fac
SHA-1: d5c3232c0842fc9fd6827cf64026282bae20afb2
6) Что такое SALT и SALT-овые хэши?
SALT (или так называемая "привязка") в основном используется для того.
чтобы пользователи, использущие одинаковые пароли, имели различные
хэши. Как правило, SALT - это строка из 3...8 случайных символов,
которая дополнительно используется для хэширования паролей
пользователей и сохраняется вместе с финальным хэшем (как, к примеру,
сделано в MD5 (Unix)-хэшах) или же хранится отдельно от хэша.
7)Почему у SALT'овых хэшей низкая скорость перебора?
В крайне упрощенном виде перебор паролей к обычным (не-SALT'овым) хэшам
происходит так - однократно подсчитывается хэш от текущего пароля, а
затем хэш многократно сравнивается со всеми перебираемыми хэшами. При
восстановлении же паролей к SALT'овым хэшам текущий пароль приходится
хэшировать отдельно для каждого пользователя, т.к. у них разные SALT'ы.
Само собой, скорость любой атаки при этом будет снижена пропорционально
количеству пользователей.
8)Почему у MD5 (Unix) и MD5 (APR) хэшей низкая скорость перебора?
Это связано с тем, что помимо использования SALT'ов, эти хэши
формируются в цикле на 1000 итераций, в каждой из которых вызывается от
2 до 4 обычных MD5-преобразований. В результате скорость атаки для
таких хэшей в тысячи раз ниже по сравнению с обычными MD5-хэшами.
9)Какие программы целесообразно использовать при переборе хэшей.
PasswordsPro MD5Inside UDC(для распределенной атаки по Rainbow-таблицам)
10) По какому алгоритму наиболее рационально взламывать хэш?
A: Восстанавливать пароли к хэшам рекомендуется в следующем порядке:
- предварительная атака;
- простая атака по словарям (с большим количеством словарей);
- гибридная атака по словарям (с небольшим количеством словарей);
- комбинированная атака по словарям;
- атака полным перебором с алфавитом "0...9" на глубину 8-9 символов;
- атака полным перебором с алфавитом "a...z" на глубину 7-8 символов;
- атака полным перебором со всеми доступными алфавитами на глубину 4-6 символов;
- атака полным перебором с алфавитами "0...9" и "a...z" на глубину 7-8 символов;
- при наличии Rainbow-таблиц, нужно использовать атаку по этим таблицам;
Первые 2 шага можно опустить и воспользоваться сервисами онлайн-расшифровки.
Также, если есть какая-либо информация о пароле, необходимо использовать атаку по маске.
11) Где можно скачать приведенные в FAQ программы для взлома хэшей?
PasswordsPro
http://xakepok.org/filez/passcrack/passwordspro.rar
MD5Inside
http://download.xakepok.org/3860302
UDC
http://the-udc.com/download.html
12) Как можно сгенерировать / где можно скачать Rainbow-таблицы?
Сгенерировать таблицы можно утилитой RTGen, входящей в комплект RainbowCrack
http://www.antsight.com/zsl/rainbowcrack/
Скачать таблицы(правда они весят дестки гигабайт) можно с этих сайтов:
http://rainbowtables.shmoo.com/
http://mirror3.fpux.com/
http://rapidshare.com/users/1U8AFX (пароль на архивы kknb)
13) Как можно быстро вычислить нужный хэш?
Проще всего воспользоваться он-лайн утилитой типа
http://www.insidepro.com/hashes.php?lang=rus
14) Какие виды хэшей примеряются в VBulletin, IPB, phpBB, Datalife Engine?
В Dataife Engine md5(md5("пароль"));
в разработке
При составлении FAQ использовались материалы insidepro.com и ru.wikipedia.org