Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Расшифровка хешей (https://forum.antichat.xyz/forumdisplay.php?f=76)
-   -   Защита от взломов хешей (мои мысли...) (https://forum.antichat.xyz/showthread.php?t=155151)

mailbrush 09.11.2009 13:35

Защита от взломов хешей (мои мысли...)
 
В общем это мне пришло в голову еще давно, но только сейчас я решил это выложить, а точнее спросить, будет ли это эффективнее. Лучше всего объяснять на примере, поэтому я его покажу. Есть простенький скрипт регистрации - авторизации. Регистрируется пользователь с паролем 123456. Современные обычные (без соли) движки заносят в БД md5 хеш пароля, то есть e10adc3949ba59abbe56e057f20f883e. Дальше, когда пользователя авторизируется, md5 хеш введенного пароля сопоставляется с md5 хешем в базе, и если они равны, то авторизация проходит удачно. Так вот, если же сделать алгоритм, который бы заносил не весь хеш, а затирал некие символы, т.е. заносил бы, например e10a*c394*ba59a*be56e057*20f8*3e. При авторизации, скрипт разделяет хеш пароля точно так же и сопоставляет его с хешем в базе. Если затереть всего один символ вероятность распознавания пароля становится уже в 16 раз! ниже. А если затереть пять , то соответственно, вероятность становится в 16*5 = 80 раз ниже. В этом алгоритме также есть и свои недостатки - коллизии. НО вероятность коллизии все равно очень мала, даже при затёртых 5 символах. В общем вот, что вы об этом думаете?

-=lebed=- 09.11.2009 13:39

Цитата:

Сообщение от mailbrush
Вобщем это мне пришло в голову еще давно, но только сейчас я решил это выложить, а точнее спросить, будет ли это эффективнее. Лучше всего объяснять на примере, поэтому я его покажу. Есть простенький скрипт регистрации - авторизации. Регистрируется пользователь с паролем 123456. Современные обычные (без соли) движки заносят в БД md5 хэш пароля, тоесть e10adc3949ba59abbe56e057f20f883e. Дальше, когда пользователя авторизируется, md5 хэш введенного пароля сопоставляется с md5 хэшем в базе, и если они равны, то авторизация проходит удачно. Так вот, если же сделать алгоритм, который бы заносил не весь хэш, а затирал некие символы, т.е. заносил бы, например e10a*c394*ba59a*be56e057*20f8*3e. При авторизации, скрипт разделяет хэш пароля точно так же и сопоставляет его с хэшем в базе. Если затереть всего однин символ вероятность распознавания пароля становится уже в 16 раз! ниже. А если затереть пять , то соответственно, вероятность становится в 16*5 = 80 раз ниже. В этом алгоритме также есть и свои недостатки - коллизии. НО вероятность коллизии всеравно очень мала, даже при затёртых 5 символах. Вобщем вот, что вы об этом думаете?

Атака по неполному хэшу решает процесс перебора это раз.
Второе, никто не мешает сгенерировать все возможные хэши по маске и брутить уже пачку хэшей. Даже если какой-то совпадёт по маске, велика вероятность что это не коллизия а именно искомый хэш. Идея имеет право на жизнь, но для опытного хэшкрякера не является особым препятсвием для брута неполного хэша. Вероятность подбора пароля не падает, а как раз увеличивается, раз сужается область значений хэшфункции, т.е. ситуация коллизии нас при этом устроит. Единственная защита это соль + более медленный алгоритм хэширования, что и используется, к примнеру md5(unix) отчасти решает проблему защиты пароля от прямого перебора из-за своей медлительности, но по словарю атака остаётся актуальной (точнее даже сказать так можно, что только по словарю актуальны, остальные атаки очень затратны по времени.)

mailbrush 09.11.2009 13:42

Цитата:

Сообщение от -=lebed=-
Атака по неполному хэшу решает процесс перебора это раз.

Как именно?
Цитата:

Сообщение от -=lebed=-
Второе, никто не мешает сгенерировать все возможные хэша по маске и брутить уже пачку.

Да, но при переборе 80 хешей, скорость будет меньше, чем при 1.
Цитата:

Сообщение от -=lebed=-
Идея имеет право на жизнь, но для опытного хэшкрякера не евляется особым препятсвием для брута неполного хэша.

Наверное, но прогнать по сервисам хэшкрякинга такой хэш пока невозможно.
Цитата:

Сообщение от -=lebed=-
Вероятность подбора пароля не падает, а как раз увеличивается, раз сужается область значений хэшфункции, т.е. ситуация коллизии нас при этом устроит.

Но вероятность коллизии небольшая.

Aртем 09.11.2009 13:43

проще сделать свой алгоритм шифрования и проверки :)

Jokester 09.11.2009 13:44

Зачем эти заморочки, если есть алгоритмы которые задолбааешься брутить?

mailbrush ты пытаешься создать свой устойчивый к бруту алгоритм? Тогда направление не вполне верное ИМХО

Xакер 09.11.2009 13:45

SHA1(md5)

mailbrush 09.11.2009 13:45

Цитата:

Сообщение от jokester
Зачем эти заморочки, если есть алгоритмы которые задолбааешься брутить?

mailbrush ты пытаешься создать свой устойчивый к бруту алгоритм? Тогда направление не вполне верное ИМХО

Я ничего не пытаюсь сделать, я просто спрашиваю, будет ли устойчивым это от брута. Точнее, не устойчивым, а устойчивее, чем обычный md5.

Aртем 09.11.2009 13:47

$name = 'mailbrush';
$pass = 'mailbrush123';
$rand = rand(1000,9999);
$hash = md5(md5($name).md5($pass).base64_encode($rand));

и как бы всё

-=lebed=- 09.11.2009 13:49

Цитата:

Сообщение от mailbrush
Как именно?

Да, но при переборе 80 хешей, скорость будет меньше, чем при 1.

Наверное, но прогнать по сервисам хэшкрякинга такой хэш пока невозможно.

Но вероятность коллизии небольшая.

- EGB и Passwords про не почувсвуют разницы при бруте прямым перебором, по словарям, гибридной и комбинированной атакой.

- щас нельзя (из-за нагрузки на мускул при поиске), раньше было можно (пункт Атака по маске)

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

-=lebed=- 09.11.2009 13:53

Цитата:

Сообщение от Aртем
$name = 'mailbrush';
$pass = 'mailbrush123';
$rand = rand(1000,9999);
$hash = md5(md5($name).md5($pass).base64_encode($rand));

и как бы всё

Все значения исходные надо хранить в базе, в том числе и $rand. Что касается брута, то брутить можно будет комбинированной атакой, либо по маске, предварительно подготовля три словарика, где первый словарь - md5($name), второй любой, третий base64_encode($rand)


Время: 20:15