ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Криптография, расшифровка хешей (https://forum.antichat.xyz/forumdisplay.php?f=76)
-   -   Хеши и с чем их едят (https://forum.antichat.xyz/showthread.php?t=8029326)

stan_q 22.01.2010 01:00

Любой хакер так или иначе сталкивался в своей практике с хешами – то ли в печеньках, то ли в БД взломанного сайта. Но мало кто знает разницу между разными хешами, и этот пробел я и хочу попытаться заполнить. В этой статье хочу сделать краткий теоретический обзор хеш-функций, их основные отличия, ну и, конечно, методы расшифровки.
Хеширование (иногда хэширование, англ. hashing) — преобразование входного массива данных произвольной длины в выходную битовую строку фиксированной длины. Такие преобразования также называются хеш-функциями или функциями свёртки, а их результаты называют хешем, хеш-кодом или дайджестом сообщения. Хеширование можно осуществлять разными методами, вот наиболее распространенные:

Хеши вида md5 (алгоритм – пример хеша):

MD5 - 5f4dcc3b5aa765d61d8327deb882cf99 (32 символа)
MD5(Base64) - ip0JPxT4cB3xdzKyuxgsdA==
MD5(Unix) - $1$$I2o9Z7NcvQAKp7wyCTlia0
MD5(APR) - $apr1$$qjtLUZpoiD4RwXIYf4qVb0

Хеши вида MySQL:

MySQL - 5d2e19393cc5ef67 (16 символов)
MySQL5 - 2470c0c06dee42fd1618bb99005adca2ec9d1e19 (40 символов)

Остальные виды хешей (используются реже):
DES (Unix) - LzYIxjUEjKZbQ
MD2 - 62829f1dc4968513c44bcfc9a9ac7e77
MD4 - a4a4a963e47c7b8a3b355e0e0c90daa0
SHA-1 - 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
SHA-1(Base64) - W6ph5Mm5Pz8GgiULbPgzG37mj9g=
Base64 - 1f344CBiYXNlNjQNCj==
Hex -D5FDF8E0204865780D0A
ADLER32 - 0b04e916
CRC-32 - b748039f
SHA512 - c1c5c61d7d92715b6198471eaeba9192f6f7b6677c413ffce1 7d4a0066bf485f1055cc85436c6d5a

Отдельно следует упомянуть о «соленых» хешах. Salt (она же «соль») - это сгенерированные скриптом данные, которые усложняют подбор пароля после хеширования. «Соль» представляет собой некий набор символов; обычно это символы обоих регистров, цифры и спецсимволы, которые накладываются или склеиваются с самим паролем или с хеш-суммой пароля. Например. Допустим мы регистрируемся в форуме IPB => 2.0.* всё с тем-же паролем: 123. Что происходит...
1)Скрипт генерирует нам случайным образом соль(у всех пользователей она будет разная) и заносит её в базу данных.
Допустим нам сгенерировал вот такую: XzNaX.
2)Скрипт берёт нашу соль и хеширует её методом md5.
Получилось вот так: b9b91789bc2f1b3735e67f77d46053fa. Это у нас и есть md5($salt).
3)Скрипт берёт наш пароль (у нас он 123) и тоже хеширует его методом md5.
Получилось вот так: 202cb962ac59075b964b07152d234b70.Это у нас и есть md5($pass).
4)Скрипт берёт нашу хешированную соль и наш хешированный пароль,и снова хеширует их методом md5.
Если подставить в нашу формулу: md5(md5($salt).md5($pass))[php] полученные два хеша, увидим следующее:
md5(b9b91789bc2f1b3735e67f77d46053fa.202cb962ac590 75b964b07152d234b70) Где точка в PHP означает продолжение строки.А значит скрипт берёт эти два хеша без точки(b9b91789bc2f1b3735e67f77d46053fa202cb96 2ac59075b964b07152d234b70) и хеширует их методом md5.
Получаем хеш : e509e1f6df1450279ec37dd253bd5b1e.
Вот это и есть солёный хеш.
На сегодняшний день известны следующие способы «соления»: md5(md5(salt).md5(pass)), md5(md5(pass).salt).

Каждый из этих методов хеширования позволяет довольно надежно зашифровать какую-либо информацию, например, пароль админа. Методика шифрования предполагает необратимость, т.е. нет возможности провести процесс «дехеширования» и получить пароль. Восстановление пароля осуществляется следующим образом: допустим, есть хеш в виде 21232f297a57a5a743894a0e4a801fc3. Первая задача, которая стоит перед нами – определить алгоритм хеширования. Не буду умничать, 100% рецепта определения типа хеша нет, в видах хешей выделил жирным курсивом отличительны черты некоторых.
В нашем случае, имеем 32 символа и логично предполагаем, что это алгоритм MD5. Чтобы расшифровать его, имеется множество программ и онлайн ресурсов, но все они в конечном итоге действуют следующим образом: генерируют определенную последовательность символов (допустим, admin), потом по заранее указанному алгоритму хешируют эту последовательность и сравнивают с заданным. Хешируя admin по алгоритму md5 (через любой онлайн ресурс, например, x3k.ru), получаем 21232f297a57a5a743894a0e4a801fc3. И, о чудо, он совпадает с нашим . Значит, расшифровали. В общем, алгоритм восстановления пароля, я думаю, ясен :yahoo:.

Теперь определимся, каким образом можно искать расшифровки для уже полученных хешей. Существует множество ресурсов в сети, которые этим занимаются, вот небольшой список:
Спойлер
http://gdataonline.com/seekhash.php
http://passcracking.ru
http://www.md5database.net/
http://milw0rm.com/md5/info.php
http://us.md5.crysm.net
http://www.plain-text.info
http://md5.geeks.li/
http://www.securitystats.com/tools
http://md5.rednoize.com
http://md5crack.it-helpnet.de
http://www.csthis.com/md5/index.php
http://www.md5decrypter.com/

Это почти самый легкий способ. Самый легкий – это – зачастую он находит ресурс, где этот хеш уже расшифрован.
Для удобства поиска на указанных и многих других ресурсах есть даже специальные программки, которые запускаются локально на машине и в сети ищут расшифровки. Например, это программы Multi MD5 online hasher и ArxFuckingHashMD5 (ищите в гугле).
Следующий способ нужен, если всемирная сеть не дает ответа. Тогда на помощь приходят программы, такие как Passwordspro (сайт www.insidepro.com). Эта программа ищет пароли по нескольким методикам, но все они сводятся к использованию словарей паролей. Тут отдельное слово нужно сказать о радужных таблицах – rainbow table.

Умные люди решили создать сортированные таблицы хэшей и соответствующих им паролей, в результате чего получилась система, которая с помощью быстрого бинарного поиска по таблице может получать обратное преобразование хэша в пароль для любого существующего алгоритма хэширования. Но так как таблицы всех возможных паролей занимают на дисках слишком много места, был использован оригинальный формат таблиц: хэши собираются в цепочки по несколько тысяч комбинаций. Каждая следующая комбинация получается из предыдущей очередным применением той же функции хэширования. В таблицы записывается только начало и конец каждой такой цепочки. Для того чтобы найти пароль по такой таблице, нужно применить к заданному хэшу точно так же функцию хэширования несколько тысяч раз (в зависимости от используемой длины цепочек), и на очередной итерации получим хэш, который является концом одной из цепочек в наших таблицах. После этого эта цепочка заново прогоняется от начального до нужного нам хеша и находится комбинация, предшествующая нашему хэшу, - это и есть искомый пароль. В общем, суть довольно хитрая, но позволяет довольно быстро находить хеши. Единственным, наверное, недостатком системы является размер радужных таблиц – обычно он измеряется гигабайтами :fear:.

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

В общем то, на этом я и остановлюсь, а то и так много получилось.

Жду отзывы и предложения, чем дополнить.

© stan_q

Источники:
google.com
xakep.ru
forum.antichat.ru
еще что-то, уже не упомню, но ему (источнику) спасибо


Время: 19:39