Шифрование MD5(MD5(...))

slego

Новичок
Шифрование MD5(MD5(...))

Возможно тема уже обсуждалась (если и была, не пинайте сильно :) Глазами по поиску пробежался - не увидел).
Хочу поделиться обнаруженным с php-общественностью.

Короче, это для тех, кто еще не сталкивался с подобным.

В общем наткнулся на сайтец http://ice.breaker.free.fr/
Предлагается _расшифровать_ пароль, который был получен с помощью md5().

Попробовал.... и ужаснулсо - расшифровало.... Правда пароль был простой, типа "motherfucker".

Начал копать глубже, стал пробовать более сложные пароли - расшифровка стала хромать на обе лапки :)
Оказалось, что просто идет сравнение с офигенно огромной таблицей заранее сгенерированных хешей (речь идет о 30-40 Гигах).

Сложные и длинные пароли такой метод не берет... пока...

Как вариант, сразу напросилось следующее решение данной проблемы: т.к. в своем большинстве юзеры вводят достаточно простые пароли (понимаю, что можно их всячески заставлять усложнять свои пароли, чтобы они использовали и буквы и цифры, чему они конечно же будут безмерно рады), то можно необходимые данные кодировать 2 раза - md5(md5($user_data)).

Очень хотелось бы услышать мнение других участников. Спасибо за внимание.
 

Tor

Новичок
обычно к хешируемой строке, кроме пароля добавляют так называемую "соль" ("solt") - ничего не значащую фразу
это резко увеличивает длину хешируемой строки и сводит на нет подобные словари
 

zerkms

TDD infected
Команда форума
slego
откуда у потенциального злоумышленника может появиться даже md5() от пароля юзверя?
 

slego

Новичок
2zerkms
а каким образом потенциальным злоумышленникам вообще что-то удается сделать?
Обсуждается не это, имхо. А то, что есть такой нюанс. И не все о нем знают.

Вот благодаря одной фразе Tor'а - многие люди наконец-таки начнут при шифровании добавлять соль :)

-~{}~ 06.05.06 17:08:

Вдогонку Tor'у - все равно фраза должна быть тогда достаточно сложной, состоять не из одного слова. А то, вот, допустим, пароль был "mother", а солью выступало "_cами_знаете_что_" - в общем-то эффекта это не дало бы.. но это так, мысли в слух.
 

HEm

Сетевой бобер
slego
ну конечно не дало, как же, возводит количество переборок (скоко, говорите, 30 гиг?) в квадрат
 

slego

Новичок
HEm
Вы не поняли. Я о другом.
Если пароль = pass, а соль = word ,

то чем бы это отличалось от просто пароль=password ?

Вот, если пароль - pass, а соль - word_и_еще_всякая_разная_чепуха_с_цифрами_12345_ - тогда годится :)
 

440hz

php.ru
slego

мне думается что md5() это все-таки не шифрование а хеширование и очеь длинная фраза с солью может дать совпадение (тот же хеш) на коротенькое слово.

поправьте меня, если я не прав.
 

slego

Новичок
Утверждать не буду, но когда в свое время я только начинал узнавать про md5(), то фигурировала следующая аллегория , что хеширование - это своего рода математическое вычисление. Допустим, по какому-то алгоритму в итоге имеем число 17. А _как_ мы получили это число, какие были исходные слагаемые (2+15, 1+1+1+14, 10+7 и т.д.) - никто уже не знает :)
Из это всего делается вывод, что таки совпасть может.. но это чистейшее имхо... Надо лезть и читать доки.
 

HEm

Сетевой бобер
slego
тем что здесь это уже не 'password' а md5('pass').'word', чувствуете разницу?
 

kruglov

Новичок
Конечно, может совпасть, мы же отображаем друг в друга множества разной мощности. Биекции никак не получится.
 

HEm

Сетевой бобер
использование salt, это уже по сути применение двух паролей вместо одного
440hz
образно говоря, если в словаре есть 10к слов, которые могут быть использованы в качестве пароля, то для переборки простого пароля нужно 10к итераций, а для пароля с "солью" 10к*10к=100М
 

kruglov

Новичок
slego
Шоб вы знали, md5(md5(word)) имеет больше коллизий, чем просто md5(word)
 

itprog

Cruftsman
В общем наткнулся на сайтец http://ice.breaker.free.fr/
Предлагается _расшифровать_ пароль, который был получен с помощью md5().

Попробовал.... и ужаснулсо - расшифровало.... Правда пароль был простой, типа "motherfucker".
Тебя жестоко обманули, там есть словарик, пополнить его можно воспользовавшись формой encode. К примеру md5('TEST') расшифровать она не может (пока :))
 

slego

Новичок
Автор оригинала: itprog
Тебя жестоко обманули, там есть словарик, пополнить его можно воспользовавшись формой encode. К примеру md5('TEST') расшифровать она не может (пока :))
Эта... я там вообще-то чуть ниже про 30 Гиг писал. Так что принцип "дешифрации" ясен.

-~{}~ 06.05.06 20:16:

Только почитал вот это
и вот это
и решил, что пожалуй, перейду-ка я на sha1, как наткнулся на вот это вот

Может кому-нибудь интересно будет...

-~{}~ 06.05.06 20:18:

2kruglov - а чем обусловлено? или пошлешь в гугл? :)
 

kruglov

Новичок
> а чем обусловлено?
Чисто логически подумайте - сначала вы все множество строк отобразили с коллизиями в множество всех 32-символьных 16-ричных чисел. Потом это множество чисел еще раз отобразили само на себя опять же с коллизиями. И так на каждом шаге будут только добавляться коллизии (ибо наверняка для 2 строчек получится один и тот же md5. А для какого-то элемента A просто не будет предшественника md5(A) - он и выпадет, породив коллизию.

Продолжите эдак мильончик раз - как бы вообще не придти к одной и той же строке вне зависимости от начальной (но тут я не уверен). Есть ли такая строка x, что md5(x)=x? Может, и есть...

-~{}~ 07.05.06 01:52:

> перейду-ка я на sha1
На [m]crypt[/m] надо переходить, он для того и сделан, чтоб пароли шифровать. В отличие от [m]md5[/m]
 

Vladson

Сильнобухер
Автор оригинала: slego
HEm
Теперь да :) Только милее глазу md5(md5('pass').'word') :)
Шутки шутками а идея хоть и не нова, но и не слаба... (такой пароль брут-форсом подобрать сложнее, хотя это зависит от "сложности-соли")
 

Andreika

"PHP for nubies" reader
Vladson
такой пароль брут-форсом подобрать сложнее
%)
да, на 10 порядков сложнее.. ведь взломщик будет сначала подбирать текст захэшированный первым md5, потом вторым и тока в этом случае получит пароль... ведь он же не сообразит для каждого из вариантов пароля выполнять md5(md5(вариант).'word') и сравнивать с имеющимся
 
Сверху