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

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

[phpbb]

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

Сижу я и думаю, как мне теперь защитить сохраняемые на сервере, хеши от паролей MD5. Пришла мне вот такая простая идея, хранить не шэши от паролей, а хеши от шешей от паролей.
Вот такого типа.
$A -> пароль
$S = md5(md5($A));

Тогда и перебор 32 символьной строки для MD5 будет достаточно трудоёмким. Ну и чел. фактор тоже повлияет. Так как взломщик будет думать что там хэши от паролей и будет тратить драгоценное время на перебор хешей.

Как считаете?
 

Crazy

Developer
Если вщломщик не знает алгоритм, то просто поменяй местами крайние символы: тебе это будет дешевле, а хакер все равно удолбается.
 

[phpbb]

Guest
2Crazy: Думаю функция смены двух символов местами будет длиннее чем md5(md5($A)); Да и смысл, после просмотра хакером кодека php, он увидит что в хеше изменены такие то символы, переставит он их обратно вот тебе и нормальный хешь от пароля, перебирай себе на здоровье.
 

Crazy

Developer
Автор оригинала: [phpbb]
2Crazy: Думаю функция смены двух символов местами будет длиннее чем md5(md5($A));
Не путай длину функции и время выполнения.

Да и смысл, после просмотра хакером кодека php
Что это еще за новая сущность -- "кодек PHP"?
 

[phpbb]

Guest
Под кодеком php я имел ввиду исходник файла PHP.
 

ONK

Пассивист PHPСluba
Если "хакер" увидит твой исходнок, то он будет перебирать например так :
$str - хешированный пароль
$new_str = md5(md5(key_gen())); //key_gen() генератор случайных строк
while($str != $new_str ){
$new_str = md5(md5(key_gen()));
}


Всё что ты в данном случае выиграеш, это увеличиш время перебора в 2 раза.

А если исходник недоступен, то от смены символов местами "хакер" повесится.
 

f1

formula 1
храни ты хоть MD5(MD5(MD5 .......
от этого трудоемкость работы "хакера" не зависит
 

[phpbb]

Guest
Автор оригинала: ONK
Если "хакер" увидит твой исходнок, то он будет перебирать например так :
$str - хешированный пароль
$new_str = md5(md5(key_gen())); //key_gen() генератор случайных строк
while($str != $new_str ){
$new_str = md5(md5(key_gen()));
}


Всё что ты в данном случае выиграеш, это увеличиш время перебора в 2 раза.
MD5 строка содержит 32 символа и 36 комбинаций из букв и чисел, а пароль допустим будет максимум содержать 8 символов и 66 комбинаций (большие и маленькие буквы числа и 4 спец. символа).
36 в степени 32 = 6,33e+49
66 в степени 8 = 360040606269696

Ну и где тут в 2 раза?

Автор оригинала: ONK А если исходник недоступен, то от смены символов местами "хакер" повесится.
Исходник доступен почти в 99% случаев. Поэтому данный факт я и учитываю.
 

tony2001

TeaM PHPClub
интересно.
у тебя есть хэш пароля к MySQL.
и зачем он тебе?
MySQL ты пароль все равно будешь в открытом виде давать.
 

[phpbb]

Guest
Автор оригинала: tony2001
интересно.
у тебя есть хэш пароля к MySQL.
и зачем он тебе?
MySQL ты пароль все равно будешь в открытом виде давать.
MySQL пароль понятно, что придётся хранить в открытом виде. Имеется ввиду база хешей от паролей к примеру, от чата, форума, емайл и так далее.
 

f1

formula 1
Автор оригинала: [phpbb]
Ты о чём это?
как аналогия - почему если зипом сжать зип архив он не станет меньше?

с md5 тоже самое, его стойкость от каскадного применения не увеличивается
 

Bloody

Guest
Зачем извращаться? Алгоритм md5 как раз и был придуман для подобных случаев. Пароли подлиннее (от 8 символов, к примеру) - вот и вся защита...
 

f1

formula 1
главное в этом деле не построить сейф со стальными стенками 3 метровой толщины и маленькой деревянной дверью в неприметном углу для прохода уборщицы :)
 

tony2001

TeaM PHPClub
>Имеется ввиду база хешей от паролей к примеру, от чата, форума, емайл и так далее.
хранить в базе md5(); и перестать думать над такими вещами.
 

[phpbb]

Guest
Умные люди меня поймут, а для непонятлевых обьясню ещё раз на пальцах.

Пароли более чем из 8 символов писать мало кого заставишь. Поэтому ограничемся 8ю.

Программа MDForce перебирает 4,560,830 хешей в секунду. Пароль (a-z)(0-9)1,8 она находит в пределах 7 дней.
Поэтому просто MD5 я использовать небуду.

Идём дальше

$A = phpbb
1. md5($A) = 98a6a6255fc62ffa4eac50abc52bf41e
2. md5(md5($A)) = f5f10747895ed2163eba0b1026cff731
3. md5(md5(md5($A))) = 1c4ecb4a6c19597685c4a59c9e98bf2b
4. md5(md5(md5(md5($A)))) = b9dc20c12d9316c74cf00a6927fd69b8

В простом примере для получения значения $A придётся перебрать хешь 1, но если сделать хешь 2,3,4 и так далее, то в варианте 4 чтоб получить хешь 3 нужно перебрать хешь 4, для получения 2 нужно перебрать 3, чтоб получить 1 перебрать 2. Ну и заветная $A из 1 хеша. А если сделать вот так for ($i=1;$i<=100;$i++) $A = md5($A); то тогда возможность перебора уходит в 0.

Прошу более глупостей не писать, а писать по существу.
 

Crazy

Developer
Автор оригинала: [phpbb]
MD5 строка содержит 32 символа и 36 комбинаций из букв и чисел, а пароль допустим будет максимум содержать 8 символов и 66 комбинаций
Чтобы подобрать пароль длиной N нужно максимум "M в степени N" попыток, где M есть размер алфавита. И абсолютно без разницы, сколько раз ты применял к этому md5.

С какого перепугу повторное применение md5 должно увеличивать число вариантов? Время работы пор перебору -- да, увеличивает. На время выполнения еще одного md5. Т.е. ровно в два раза.
 

Crazy

Developer
Автор оригинала: [phpbb]
Умные люди меня поймут, а для непонятлевых обьясню ещё раз на пальцах.
Мальчик, ты б пальчики-то загнул -- сломаешь...

В простом примере для получения значения $A придётся перебрать хешь 1, но если сделать хешь 2,3,4 и так далее, то в варианте 4 чтоб получить хешь 3 нужно перебрать хешь 4
Никаких "сначала перебрать хэш 4" не будет. Берем очередной пароль, применяем все хэши последовательно, сравниваем результат, берем очередной пароль и т.п.

А если сделать вот так for ($i=1;$i<=100;$i++) $A = md5($A); то тогда возможность перебора уходит в 0.
Ага. А если сторублевку 100 раз завернуть в газетную бумагу, то это будет 10,000 рублей. :D

Прошу более глупостей не писать, а писать по существу.
Мальчик, ты являешь собой абсолютно классическую иллюстрацию к энциклопедической статье "Lamerus Vulgaris"...
 

f1

formula 1
по существу:
предлагаю сходить в магазин, купить книгу по криптографии для начинающих, хотя бы сможешь тогда различать что по существу, а что нет

В общем см пост Crazy выше :)
 

[phpbb]

Guest
2Crazy вообще понел о чём речь?

"Никаких "сначала перебрать хэш 4" не будет. Берем очередной пароль, применяем все хэши последовательно, сравниваем результат, берем очередной пароль и т.п."

Какой пароль, ты о чём? Ещё раз почитай что я написал, и подумай чуть чуть.

Я там немного преувеличил походу в 32 строке MD5 используется только 16 символов, тогда будет 3,4e+38 ну вообщем всё равно много.

Как обьяснить я уже незнаю.

$A = phpbb
1. md5($A) = 98a6a6255fc62ffa4eac50abc52bf41e
2. md5(md5($A)) = f5f10747895ed2163eba0b1026cff731
3. md5(md5(md5($A))) = 1c4ecb4a6c19597685c4a59c9e98bf2b
4. md5(md5(md5(md5($A)))) = b9dc20c12d9316c74cf00a6927fd69b8

Обычно на сервере хранят 1 пункт. Его и можно перебрать, я хочу на сервере хранить допустим 4 пункт. Чтоб получить пароль нужно будет из 4 перебором получить хешь 3, далее из 3 перебором получить хешь 2, далее перебором из 2 получить хешь 1 и только из 1 можно получить пароль, а если их там не 4, а n'ое число. Вообщем всё сходится.
 
Сверху