Защита хэшей MD5

  • Автор темы [phpbb]
  • Дата начала

[phpbb]

Guest
f1 тебе как самому умному, напиши алгоритм перебора. В двух словах, как ты получишь из хеша 4. md5(md5(md5(md5($A)))) = b9dc20c12d9316c74cf00a6927fd69b8 -> пароль $A = phpbb
 

f1

formula 1
это сходиться если предположить что "хакер" полный идиот :)
И прежде чем начать "ломать твою защиту" он прочтет книгу

"Взом моей мега защиты от гуру [phpbb]"

поверь, он прочтет то что написал Crazy
а над тобой будет смеяться :)
 

f1

formula 1
Автор оригинала: [phpbb]
f1 тебе как самому умному, напиши алгоритм перебора. В двух словах, как ты получишь из хеша 4. md5(md5(md5(md5($A)))) = b9dc20c12d9316c74cf00a6927fd69b8 -> пароль $A = phpbb
если уж перебирать,
то не хеш, а пароль


а проще, думаю будет найти ту самую деревянную дверь для уборщицы, ибо ты её оставишь :)
 

[phpbb]

Guest
2f1: Набор слов и я могу писать, ты напиши ответ на поставленный вопрос.
 

[phpbb]

Guest
2f1: глупее я ещё не видел.

"если уж перебирать,
то не хеш, а пароль" -> Это ты о чём? В хеше, не пароль а хешь от хеша, какой пароль ты решил там перебирать?
 

Crazy

Developer
Автор оригинала: [phpbb]
В двух словах, как ты получишь из хеша 4. md5(md5(md5(md5($A)))) = b9dc20c12d9316c74cf00a6927fd69b8 -> пароль $A = phpbb
Алгоритм: перебираем все возможные пароли. Если у одного из них md5(md5(md5(md5(...)))) совпадет с b9dc20c12d9316c74cf00a6927fd69b8, то это именно наш пароль.

Ты знаешь иной алгоритм для однократного md5? :D
 

Crazy

Developer
Автор оригинала: [phpbb]
2f1: глупее я ещё не видел.
Итак, для совсем деревянных излагаю теорию:

1. Пусть у нас есть два алфавита: A и B. В качестве A будут выступать пароли (один пароль -- один символ алфавита A), а в качестве алфавита B будут выступать все возможные хэш-коды, возвращаемые функцией MD5 (один код -- один символ алфавита B).

2. Обозначим An и Bn соотвественно число символов алфавитов A и B.

3. Пусть есть функция F(x), отображающая A на B, т.е. y=F(x) y принадлежит B, если x принадлежит A.

4. Чтобы перебором определить x по y требуется не более min(An,Bn) итераций. Ибо:

4.1. Если An < Bn, то в худшем случае мы угадаем x на последний, An-й итерации.

4.2. Если An > Bn, то это означает, что среди A существуют символы, отображаемые на одно и то же значение из B. Соответственно, мы в худшем случае находим x на последней итерации (Bn), испытав значение b, не имеющее пары.

Таким образом, число требуемых итераций зависит только от размера алфавитов и, соответственно, применение композиций F(x) не влияет на требуемое число итераций и лишь увеличивает время одной итерации.

При этом использование F(F(x)) лишь удваивает время, требуемое на перебор, тогда как добавление 1 (одного) символа к паролю удлиняет алфавит A в десятки раз, а значит, во столько же раз увеличивает время работы по перебору.

Если ввиду твоей высокой интеллектуальной твердости я тебя не убедил, то предлагаю пари. Условие:

1. Ты придумываешь пароль из 4 цифр и 20 раз кодируешь его md5, публикую полученную свертку.

2. Я в течении суток совершаю "невозможное" (сколько там хрендрильонов вариантов получается согласно твоей теории? В срок жизнги Вселенной явно не вписываемся) и восстанавливаю твой пароль.

3. В случае моего успеха ты ставишь мне ящик пива Хейнекен с доставкой. Если я обломаюсь -- ты публикуешь пароль, мы его сверяем и я выставляю тебе пиво.

Ну как, за базар ответим?
 

ONK

Пассивист PHPСluba
[phpbb], я тебе написал самый примитивный для понимания алгоритм подбора пароля, если ты его непонял, то хватит флеймить, иди книжки умные читай.

Немного поясняю специально для тебя функция key_gen() в вышеприведённом примере генерирует строку случайных символов, при этом строка состоит из случайного количества символов входящего в заданный диапазон (1 - 8). При применении идеальных алогритмов генерирования случайных чисел, получем время перебора приблизительно равное времени перебора методом линейного перебора, но значительно проще и нагляднее в реализации.

Время перебора пароля сгенерированного твоим способом будет увеличиваться только за счёт тормознутости алгоритма хеширования md5, тоесть максимум увеличится в N раз, где N - количество применённых md5() хеширований.
 

[phpbb]

Guest
Спасибо Crazy за обьяснение, ему и пиво!
Видимо жара вот и не догнал сразу.

Но я всё равно несдамся.
В процессе for ($i=1;$i<=$N;$i++) $A = md5($A);
Значение N можно генерировать по какому нибудь алгоритму из пароля. То есть N будет постоянное число скажем в диапазоне от 10,000 до 100,000. И будет вычислятся из пароля при регистрации и авторизации пользователя, соответственно данная переменная на сервере не хранится. При таком подходе перебор усложнится точно. Или я опять не прав?
 

Crazy

Developer
Автор оригинала: [phpbb]
Значение N можно генерировать по какому нибудь алгоритму из пароля.
Если этот алгоритм будет известен хакеру, то мы получает те же курофрукты, но в другой проекции. :)

Чудес на бывает: если хакер знает алгоритм кодирования, то может применить переборный взлом. Сложность алгоритма принципиального значения не имеет.
 

ONK

Пассивист PHPСluba
Лучшее решение это закодировать исходник, тогда будут серьёзные проблемы даже при применении простейшего взаимозамещения знаков в сгенерированном хеше...


PS. [phpbb], а пиво ты просто обязан прислать Crazy, он на тебя столько времени потратил... :)
 

[phpbb]

Guest
Уже усё ястно. Буду думать чего нибудь другое. Решение всё равно будет.
 

[phpbb]

Guest
Да ладно тебе f1. Не обдумал я идею, решил сразу написать на форуме, чтоб сразу ответили пойдёт или нет. Впредь будет как полагается: 7 раз подумал, один раз написал.

Сам удивляюсь, как я сразу непонел, всё просто.
 

ONK

Пассивист PHPСluba
[phpbb], Немного по поводу исходников...


Тебе доступны те исходники где авторам нечего скрывать...

Сейчас любая более менее серьёзная контора (да и не серьёзные тоже) кодирует исходники своих скриптов.
Кото будет давать готовые, отлаженные и эффективные решения прямо в руки конкурентов, за стоимость одной копии скрипта?
 

Bloody

Guest
Есть предложение специально для [phbb]:

PHP:
$str="";
for ($i = 0; $i<strlen($pass); $i++) {
    $str .= md5($pass, $i);
}
$hash = md5($str);
:)
или, даже:
PHP:
$str="";
for ($i = 0; $i<strlen($pass); $i++) {
    $hash .= md5($pass, $i);
}
:D
 

Compote

Guest
впринципе толк есть. хоть и маленький, но есть.
не так давно были взломаны имейлы @xakep.ru
в сеть были выложены хеши паролей; через пару часов я уже видел файлик из 10 тысяч имейлов с нормальными декодированными паролями. Почему так быстро? Да потому что 99% людей используют простые короткие пароли.
to [phpbb]: эффективней будет, если ты сделаешь как тебе сказали - поменять какие-нибудь символы или взять хеш от двойного пароля итп.
 
Сверху