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

rob72

Новичок
Если речь идет о подборе по словарю, то это не ново. Предлагаю следующее: дополнительно шифровать пароль через исключающее или ключом, определяемым владельцем проекта, примерно так:
PHP:
$my_key=md5("Это мой фирменный ключ!");
$data=md5(pass);
//--В базу пишем следующее:
$for_database=pack("H*",$my_key)^pack("H*",$data);
//--При извлечении из базы:
$data=$from_database^pack("H*",$my_key);
Это даже не рекомендация, а скорее возникшая мысль, хотелось бы услышать мнения
 

SiMM

Новичок
> Предлагаю следующее: дополнительно шифровать пароль через исключающее или ключом, определяемым владельцем проекта
И какая разница между вашим предложением и md5($password.$salt)?
 

Andreika

"PHP for nubies" reader
rob72
смысл? взломал я твой сайт, спер его весь вместе с дампом таблицы паролей.. чем твой метод мне помешает "расшифровать" эту таблицу?
 

rob72

Новичок
смысл? взломал я твой сайт, спер его весь вместе с дампом таблицы паролей.. чем твой метод мне помешает "расшифровать" эту таблицу?
Перебор по словарю уже ничего не даст, ведь в в базе уже не md5(pass), а черт знает что. Если и удастся чисто случайно подобрать строку, то в качестве пароля она не пойдет. Нужно знать ключ, да еще быть осведомленным, как все это делается.
И спереть весь сайт-гораздо сложнее, чем завладеть таблицей с паролями.
 

Andreika

"PHP for nubies" reader
rob72
а стоит ли писать чтолибо с расчетом, что это сломают.. но не все, а тока базу упрут?

ЗЫ. я зарегистрируюсь у тебя с паролем qwerty, утащу базу и посмотрю что стало с моим паролем... "расшифровать" известный пароль проxorенный md5 не очень большая проблема
 

rob72

Новичок
я зарегистрируюсь у тебя с паролем qwerty, утащу базу и посмотрю что стало с моим паролем... "расшифровать" известный пароль проxorенный md5 не очень большая проблема
Да это слабое место. А если ввести в ключ что-нибудь изменяющиеся, например значение поля primary key-autoincrement:

PHP:
$my_key=md5("Это мой фирменный ключ!".$id);
 

que_bunt

Новичок
Andreika как ты узнаеш соль без исходников? даже если ты знаеш свой пароль + md5(md5('pass').$salt) от этого пароля, а например $salt='asd23kl;jASdfxbbBN589!345#$fb'
 

Andreika

"PHP for nubies" reader
que_bunt
эээ.. не путай одно с другим...
"соль" ака "мой фирменный ключ" я узнаю если товарищ будет использовать xor в любых вариантах..
при использовании md5 соответстно узнать не получится, только чем md5(md5('pass').$salt) сложнее md5('pass'.$salt) непонятно

ЗЫ. и если уж совсем делать будет нечего, то можно зарегить у тебя пару тысяч юзеров с паролем из словаря и найти совпадения

-~{}~ 07.05.06 23:02:

Кащей Бессмертный бросался под колеса "КАМАЗа", потом топился, застрелился, повесился.. В общем, в тот день развлекался как хотел

в общем алгоритм того же мд5 вполне себе известен - изучай-нихачу, а вот по известному результату подобрать оригинал(коллизию) трудновато...
в своих скриптах можешь написать все, что угодно - хоть все цифры хэша на 2 раздели или вообще 20 раз проксорь разными ключами и вообще развлекайся как хочешь - враг не догадается до тех пор, пока до яйца ака исходников не доберется... и тут сложность нахождения пароля падает до "сложности" самого пароля или "сложности" используемых функций.. эт не интересно.. а вот на нечто, усложняющее перебор/"расшифровку" при известном алгоритме, salt и прочих данных я б посмотрел
 

que_bunt

Новичок
>только чем md5(md5('pass').$salt) сложнее md5('pass'.$salt)
возможно разницы нет, не в этом суть.


думаю если использовать сложную соль + заставить пользователей делать пароли с минимум 6 букв + обязательно хоть одна цыфра в пароле то это усложнит перебор, даже если злоумышлинник узнает соль.

или сложность соли никак не влияет на сложность перебора (если мы знаем соль) ?


kruglov вы в своих приложениях всегда используете crypt() вместо "стандартного" md5() ??
 

kvf77

Red Devil
помоему вы вигней маетесь - вас скорее другим способом заломают нежелит подбором паролей
 

kruglov

Новичок
que_bunt
> вы в своих приложениях всегда используете crypt() вместо "стандартного" md5()
1) для паролей - да, всегда.
2) почему "стандартного"?
 

LongHornKms

Новичок
ИМХО, все ваши предложения, связанные с "солью" абсолютно бесполезны, зело если вы вносите в программу хотя бы уже двойной MD5(MD5() ) - уже хакеру придется вместо использования готовой программы писать собственную. Соль не поможет хотя бы потому, что все современные брутфорсеры умеют атаковать по маске. А какая у вас маска - будет видно из исходников.

Я не веб-программист, а прикладной программист. И сейчас пишу программу, где тоже надо хранить пароли. Пишу я на Visual Basic .NET... Так вот, передо мной и встала как раз проблема, как сделать так, что бы даже в случае рассекречивания кода программы создать максимум геморроя для хакера. Следует отметить так же, что в моем случае ситуация еще хуже, чем у вас. Вы - веб программисты, до поры до времени защищены, потому что хеши ваших юзеров возможно увидеть только если взломан сайт. А в моем случае программа лежит на локальном компьютере и свои пароли тоже держит на локальном компьютере. И доступ к ним, естесственно, ничего сложного не представляет - бери и читай текстовый файл, где хранятся хеши...

Я предлагаю следующее. В переводе на ваш язык будет так:

<?php
$s = "hello";
for ($i = 1; $i <= 1000; $i++)
{
$s = MD5($s);
}
print $s;

?>

В результате выполнения скрипт родит хеш из слова "hello", циклически укатанный 1000 раз. Разумеется, зная код, хакер сможет написать программу, которая так же будет делать брутфорс, укатывая MD5 тысячу (десять тысяч, сто тысяч) раз. Однако, время проверки каждого пароля вырастит в 1000 раз... А это значит, что пароль, который можно подобрать за 5 минут, при таком усложнении будет подбираться 83 часа...
 

SiMM

Новичок
> А какая у вас маска - будет видно из исходников.
Если у вас есть исходники - значит и доступ к базе у вас, судя по всему, есть. Пароли же сами по себе как таковые могут быть совершенно неинтересны - куда интереснее информация и доступные права.
 

LongHornKms

Новичок
Если у вас есть исходники - значит и доступ к базе у вас, судя по всему, есть. Пароли же сами по себе как таковые могут быть совершенно неинтересны - куда интереснее информация и доступные права.
Видимо мы и расматриваем ситуацию, когда вас уже поломали! А если вас поломали, то как уберечь ваших юзеров от вычисления их паролей.
У меня есть сорсы одного портала (местного для моего города). Его сломали в конце 2005-го года. Создатель движка этого портала приладил к своему форуму "прикреплялку файлов". Но ему не хватило мозгов делать проверку на тип файлов, который заливается на форум. И злые люди залили на его форум php скрипт - приватный шелл. А что может шелл? Да практически все. Во-первых злые люди сдампили БД, во-вторых угнали сорсы. Все это дело запаковали в архивы и выложили в общий доступ на бесплатном хостинге.
Таким образом оказался раскрыт и исходный код, и БД.
Я же взял эту БД и скопировал хеши всех пользователей этого сайта, прямо в программу восстановления. Для начала сделал атаку на цифры. 50% паролей открылись. Еще процентов 20 паролей я добыл из атаки по словарю. Еще 10% - благодаря брутфорсу, у кого пароли не длинные. И, наконец, к 20% юзеров мне так и не удалось восстановить пароли.
Продолжаем. Нужно ли говорить, что мозг большинства людей не способен запоминать разные пароли к разным сайтам и большинство людей используют один и тот же пароль ко всему, что можно.
Кстати, пароли самих админов на админку оказались совсем не зашифрованные ничем. Админов было трое и разведка доложила, что у одного из админов через три дня сперли аську-семизнак. Потому что пароль одинаковый был.
Еще у нас одна девушка, модератор крупнейшего у нас городского сайта, в одночасье лишилась своего ЖЖ и мыла. Потому что какие-то злые люди догадались попробовать ее пароль...

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

kvf77

Red Devil
LongHornKms

сюрприз-сюрприз:
1) есть статистический юзер, с одним паролем на все
2) есть сотня (ну пусть десяток) сайтов, где он этот пароль использует
3) есть ты - морочащи голову себе по защите паролей на сайте №1 из указанных 100

Вопро - какова вероятность взлома 99 сайтов к которым ты не имеешь отношения, но на которых пользовался тот же пароль, что и на твоем суперзащищенном?

Вот и я о том же - толку от всего этого излишнего усложнения?
 

LongHornKms

Новичок
Вопро - какова вероятность взлома 99 сайтов к которым ты не имеешь отношения
Ответ ты уже сказал. Я к этим 99 сайтам НЕ имею отношения.
А потому мне пофиг, что их сломают. Мне пофиг, если пароль юзер потеряет на каком-то другом сайте. Для меня важно, что бы пароль хацкер не получит на МОЕМ сайте. А значит моя совесть - чиста.
 

que_bunt

Новичок
kruglov
>2) почему "стандартного"?
ну "стандартного" в кавычках потому что почти все вроде как хранят пароли в md5, хотя я могу ошибаться?
 

kruglov

Новичок
que_bunt
Человек слаб и склонен к несовершенству. Поголовно.
Это к вопросу о "почти все".
 

que_bunt

Новичок
kruglov если не сложно - обясните, ;-) хочу придти к совершенству:
и md5 и crypt - это колизия, но в чем разница в мануале я так и не понял. crypt будет сложнее взломать перебором, если например вскрыты исходники и известна соль, которая там к томуже всеголиш двухсимвольная? а и ещо вроде как к минусам crypt, если пароль больше 8 символов то он просто обрезается до 8.
 
Сверху