Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: MD5
 
 автор: Vados   (18.05.2006 в 23:51)   письмо автору
 
 

Всем привет!

Скажите пожалуйста, а сколько времени необходимо для того, чтобы расшифровать MD5 и что для этого необходимо использовать?!

Заранее спасибо!

   
 
 автор: JB   (18.05.2006 в 23:54)   письмо автору
 
   для: Vados   (18.05.2006 в 23:51)
 

Зависит от длины пароля. От 5 минут до нескольких суток.

Программа для расшифовки - Passwords Pro или md5Inside.

   
 
 автор: Vados   (19.05.2006 в 01:46)   письмо автору
 
   для: JB   (18.05.2006 в 23:54)
 

Понятно!

А как определить время перебора?!

   
 
 автор: himic   (19.05.2006 в 06:54)   письмо автору
 
   для: Vados   (19.05.2006 в 01:46)
 

До нескольких суток?
А ну конечно если ароль типа 12345 или из цифр определённой длины
ну а если пароль состиит из длины больше 10 символов и в них входят знаки припинания буквы и цифры, я даю сто процентов что такой пароль не будет расшифрован

   
 
 автор: ec_stasis   (19.05.2006 в 09:49)   письмо автору
 
   для: himic   (19.05.2006 в 06:54)
 

рано или поздно любой пароль будет расшифрован...

   
 
 автор: CrazyAngel   (19.05.2006 в 09:51)   письмо автору
 
   для: ec_stasis   (19.05.2006 в 09:49)
 

Маленько поправлю =)

Он будет подобран =)

   
 
 автор: Евгений Петров   (21.05.2006 в 12:19)   письмо автору
 
   для: ec_stasis   (19.05.2006 в 09:49)
 

рано или поздно любой пароль будет расшифрован...
Только к тому моменту как закончится подбираться пароль из, скажем, 12 символов - динозавры оживут, я как то увлекался расшифровкой паролей из хешей при помощи md5inside. На Athlon 2000+ у меня была скорость где то 800 000 паролей в секунду. Допустим у нас алфавит из латинских и русских символов верхнего и нижнего регистров и цифры, т.е. всего символов: 33+33+26+26+10 = 128 символов алфавита.
Пароль 12 символов, т.е. 128^12 = 19342813113834066795298816 комбинаций. Т.е. при скорости подбора 800 000 хешей в секунду, пароль будет подбираться 613356580220512011,52 лет!!!

   
 
 автор: Vados   (21.05.2006 в 12:28)   письмо автору
 
   для: Евгений Петров   (21.05.2006 в 12:19)
 

Да, но ты также забыл учесть в пароле не только буквы и цифры, а также: подчёркивание, запятые... из-за этого количество увеличивается!

   
 
 автор: Евгений Петров   (21.05.2006 в 17:33)   письмо автору
 
   для: Vados   (21.05.2006 в 12:28)
 

Для того, чтобы показать, что подбор в лоб не всегда является хорошим способом впринципе можно было ограничиться и латинским алфавитом в одном из регистров.

   
 
 автор: JB   (19.05.2006 в 13:17)   письмо автору
 
   для: Vados   (19.05.2006 в 01:46)
 

А никак.
"Как карта ляжет".

У меня один раз хеш пароля подбирался 9 дней, но все-таки подобрался.
И при этом был всего 12-символьный пароль

   
 
 автор: Пётр   (19.05.2006 в 11:19)   письмо автору
 
   для: Vados   (18.05.2006 в 23:51)
 

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

   
 
 автор: Loki   (19.05.2006 в 11:39)   письмо автору
 
   для: Пётр   (19.05.2006 в 11:19)
 

Вот только как при этом пароль сверять, если ключ временный?:)
Он же каждый раз должен генерится одинаковый, тогда смысл в его временности?

   
 
 автор: Пётр   (19.05.2006 в 11:46)   письмо автору
 
   для: Loki   (19.05.2006 в 11:39)
 

а вот так например :) ( алгоритм шифровки md5 на js прикреплён к мессаге (писал не я :) ))

login.php

<?
//регистрируем новую сессию
session_register('tempkey');
//генерим случайное число-ключ
$tempkey=(string) mt_rand();
$_SESSION['tempkey']=(string) $tempkey;
?>
<html><head>
<? //включаем скрипт для кодировки пароля на стороне клиента ?>
<script language="JavaScript" src="md5.js">
</script>
<? //функция кодирования пароля ?>
<script language="JavaScript">
function onSendLogin()
    {
    document.login.hiddenpass.value=md5(document.login.pass.value);
    document.login.hiddenpass.value=md5(document.login.hiddenpass.value+document.login.tempkey.value);
    document.login.tempkey.value="";
    document.login.pass.value="";
    }
</script>
</head>
<body>
<form method="post"  name="login" action="checkpass.php" onSubmit="onSendLogin()">
<input type="text" name="login" value="<?=$_COOKIE['loginname']?>">
<input type="password" name="pass">
<input type="submit" value="=>">
<input type="hidden" name="tempkey" value="<?=$tempkey?>">
<input type="hidden" name="hiddenpass">
</form>
</body>
</html>


checkpass.php

<?
//продолжаем сессию
session_start();
//проверяем установлен ли временный ключ и заодно длину закодированного пароля (длина md5 хэш кода всегда 32 символа)
if (!isset($_SESSION['tempkey']) || (strlen($_POST['hiddenpass'])!=32)) exit(header("Location: register.php")); 
//авторизируемся в БД (под юзером с правом только выборки (SELECT) из БД)
$dbhost='localhost'$dbuser='user'$dbpass=''$dbname='auth';
mysql_connect($dbhost$dbuser$dbpass); mysql_select_db($dbname);
//формируем запрос на извлечение данных из БД с одновременным кодированием MySQL функцией пароля из БД по ключу и проверкой его на равенство текущему 
$query="SELECT * FROM tblusers WHERE login='".$_POST['login']."'
AND activate=1 AND MD5(CONCAT(pass, '"
.$_SESSION['tempkey']."'))='".$_POST['hiddenpass']."'";
$sqlreply=mysql_query($query);
//проверяем получен ли ответ от БД и есть ли в этом ответе не пустая строка
if ((!$sqlreply) || (!mysql_num_rows($sqlreply))) exit(header("Location: register.php"));
$row=mysql_fetch_array($sqlreply); 
//освобождаем переменную с ключом от значения
$_SESSION['tempkey']=NULL;
mysql_free_result($sqlreply);
//пишем переменные в текущую сессию
$_SESSION['auth']=$row['authlevel'];
$_SESSION['userid']=(int) $row['id'];
$_SESSION['username']=$row['name'];
$_SESSION['REMOTE_ADDR']=$_SERVER['REMOTE_ADDR'];
$_SESSION['HTTP_X_FORWARDED_FOR']=@$_SERVER['HTTP_X_FORWARDED_FOR'];
$_SESSION['HTTP_USER_AGENT']=$_SERVER['HTTP_USER_AGENT'];
//ставим куку юзеру
setcookie("loginname"$row['login'],time()+3600*24*30); 
//если вдруг ключ ещё содержится в переменной то выкидываем по ф-ии exit();)
if ($_SESSION['tempkey']) exit ("ошибка обнуления переменных");
//ну и отправляем успешно прошедшего всю эту процедуру юзверя в защищённую директорию
exit(header("Location: adminka/index.php"));
/*ну и во всех файлах защищённых ещё проводим проверку:
<? $level_access=100; if (!isset($_SESSION['auth']) || ($_SESSION['auth']<$level_access)) exit(header("Location: login.php")); ?> */
?>

   
 
 автор: Loki   (19.05.2006 в 11:58)   письмо автору
 
   для: Пётр   (19.05.2006 в 11:46)
 

А... теперь понял о чем речь:)
Забавная штука!:)

Но сильно избыточная: в качестве временного ключа вполне можно использовать USERAGENT или даже ip (но в этом случае у диалапщиков возможны обрывы сессии).

   
 
 автор: Пётр   (19.05.2006 в 13:51)   письмо автору
 
   для: Loki   (19.05.2006 в 11:58)
 

ключ УНИКАЛЕН :) в отличии от строки USERAGENT и IP адреса (например при обращении через проксю из подсети)

   
 
 автор: Vados   (19.05.2006 в 15:46)   письмо автору
 
   для: Пётр   (19.05.2006 в 13:51)
 

Ребята, всем привет!

Огромное спасибо! Теперь стало немного понятнее, но всё же скажите мне, в принципе подобрать можно любой ключ?! Правильно?!
Вопрос только времени.

   
 
 автор: Пётр   (19.05.2006 в 16:24)   письмо автору
 
   для: Vados   (19.05.2006 в 15:46)
 

можно любой, но если вариант правильного ключа один из миллиона, миллиарда то вероятность его подбора стремится к нулю :)

   
 
 автор: dios™   (19.05.2006 в 16:57)   письмо автору
 
   для: Пётр   (19.05.2006 в 16:24)
 

ага, особенно, если зашифровать ключ несколькимифункциями шифрования)

   
 
 автор: Loki   (19.05.2006 в 23:28)   письмо автору
 
   для: Пётр   (19.05.2006 в 13:51)
 

Ну мы же защищаем пароль... если злоумышленник утянул из БД хэш, то может расшифровывать его до опупения - он же не знает что скрипту нужно скормить кроме самого пароля... а вот в вашем случае - эта информация на поверхности.

   
 
 автор: Пётр   (20.05.2006 в 11:49)   письмо автору
 
   для: Loki   (19.05.2006 в 23:28)
 

но и в предложенном Вами варианте - когда используется IP или данные браузера, они должны передаваться стороне клиента (для шифровки на его стороне) и, соответственно, будут видимы злоумышленнику. Или, если их не передавать стороне клиента, то тогда по сети пойдёт гулять всего лишь хэш самого пароля и отпадает смысл в дополнительном шифровании с использованием IP.

   
 
 автор: Loki   (20.05.2006 в 20:49)   письмо автору
 
   для: Пётр   (20.05.2006 в 11:49)
 

Не совсем: в этом случае исключается, или значительно снижается (в случае юзерагента) возможность кражи сессии. Так что смысл в этом есть.

   
 
 автор: Саня   (19.05.2006 в 23:47)   письмо автору
 
   для: Vados   (18.05.2006 в 23:51)
 

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

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования