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

Alexandre

PHPПенсионер
они не подбираются) они воруются через человеческий фактор)))
именно подбираются, и говорю т.к. у моего знакомого уже дважды аську воровали. первый раз вернули сами, второй раз пришлось напрягать знакомых, знакомые которых работали в icq.com

-~{}~ 10.05.06 17:02:

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

LongHornKms

Новичок
Кстати, скачал свеженькую версию PasswordsPro, оказывается она уже кое-какие хитрости знает:
MySQL
MySQL5
MD4
MD4 (Base64)
MD5
MD5 (Base64)
MD5 (Unix)
MD5 (APR)
SHA-1
SHA-1 (Base64)
MSCash
md5(md5($pass))
PHP:
md5(md5($pass).$salt) [PHP] 
md5(md5($salt).md5($pass)) [PHP] 
Обратите внимание на 3 последние возможности! :-)
 

zerkms

TDD infected
Команда форума
LongHornKms
я так понимаю, что это означает, что ты маешься дурью?
думаю в следующих версиях будет возможность формировать алгоритм подора самостоятельно, и тогда вариант с тем, что тварищ, не умеющий программировать - заюзает готовую тулзу лопается как мыльный пузырь и остаётся только время перебора
отмечу также, что люди, у которых есть смысл подбирать пароль и доступ к информации которых чрезвычайно ценен - используют разные и сложные пароли. из вышесказанного следует - хватит колдовать - просто соблюдайте правила сетевой гигиены и будет у вас всё хорошо

-~{}~ 17.05.06 14:58:

hobobob
для шестизнаков примари емайлов нет в принципе
 

Alexandre

PHPПенсионер
> sha1 ... дает 16 символов хеша, в отличие от md5 - 10
У меня наверно PHP глючит.
<?=strlen(md5('')) // 32?>
SiMM, нет - это я глючу... накладочка вышла:
длина хеша
md5 - 16 байт ( 128 бит )
sha1 ... дает 20 ( 160 бит )

а вот почему <?=strlen(md5('')) // 32?> - это надо смотреть конкретно реализацию md5 в пхп.
 

SiMM

Новичок
> а вот почему <?=strlen(md5('')) // 32?>
Потому что каждая тетрада кодируется байтом.
PHP:
echo md5('')
 

Wicked

Новичок
Автор оригинала: zerkms
для шестизнаков примари емайлов нет в принципе
И давно? Вроде год назад праймэри мылы отсутсвовали только у пятизнаков... И подобных новостей я нигде не видел...
 

Valdisss

Guest
Автор оригинала: 440hz
slego

мне думается что md5() это все-таки не шифрование а хеширование и очеь длинная фраза с солью может дать совпадение (тот же хеш) на коротенькое слово.

поправьте меня, если я не прав.
Прав но вероятность этого достаточно низкая, а в жизни вообще ничего не бывает 100%
 

SelenIT

IT-лунатик :)
LongHornKms

Перечитай хорошенько http://phpclub.ru/talk/showthread.php?postid=608770#post608770. И попробуй сделать оценочный расчет времени подбора первой подходящей коллизии для исходного пароля, а еще лучше - график зависимости этого времени от кол-ва вложений md5(). Если получится интересный результат - поделись с общественностью :)
 

LongHornKms

Новичок
SelenIT
А ты полагаешь, что будет офигенно много коллизий? С чего бы вдруг? Предположим, MD5('555') имеет одну коллизию. А MD5(MD5('555')) - тоже может иметь одну коллизию. неважно, сколько коллизий было в промежуточных результатах, поскольку нас интересуют только коллизии на последней итерации. Предположим, мой скрипт делает 1000 итераций и последняя итерация была произведена, скажем MD5('HRKDNTPEEJYNVDHT'). Почему тыдумаешь, что у этого MD5 будет много коллизий?
Ну и последнее. Для практической ценности хакеру нужны не коллизии, а ПАРОЛЬ. Ведь если у меня используется MD5 1000 раз, а у ZerKms 1005 раз, то хеши, колизии у нас будут разные. Нам нужен ПАРОЛЬ, а получить его можно только одним способом - расчетами. А расчет 1000 MD5 будет длится в 1000 раз дольше, чем обычный MD5. А значит брутфорс тоже будет в 1000 раз дольше.
2 ZerKms:
тебе просто лениво втавить скрипт? Меня удивляет резкое отрицание способов скрытия личной информации пользователей. Согласен, если пользователь использует везде один и тот же пароль - это его риск. Но почему бы его не снизить, ведь пользователи чайники и домохозяйки, в конце концов директор крупной фирмы, человек важный, но он не обязательно использует везде разные и сложные пароли. Он всего лишь бизнесмен, а не компьютерщик.
По этому я считаю, что каждый должен заниматься своим делом. Если ты создаешь свой CMS - то позаботься о том, что бы тебя не поломали. А если и поломают, что бы ничего с этого не поимели! Ну, или хотя бы снизь вероятность того, что тебя поимеют.
 

SiMM

Новичок
> А ты полагаешь, что будет офигенно много коллизий?
При чём здесь это? Когда интересует хотя бы одна.

> Предположим, MD5('555') имеет одну коллизию.
Это заблуждение. Она имеет бесконечное множество коллизий. Другое дело, что длина аргумента с таким же md5 может быть достаточно большой, поэтому маловероятно, что человек будет использовать такой пароль.

> А MD5(MD5('555')) - тоже может иметь одну коллизию.
Сделав md5 дважды, вы ограничиваете область допустимых значений аргумента для второго md5 узким алфавитом [0-9a-f] и строго заданной длиной строки - 32. В то время как у просто md5 диапазон входных данных гораздо шире. По вашему, это лучшим образом скажется на сложности подбора?

> Для практической ценности хакеру нужны не коллизии, а ПАРОЛЬ.
Аргумент функции md5 восстановить НЕВОЗМОЖНО. А вот коллизию найти - желающие находятся. Вы бы почитали уже чего нибудь про хэши, а то, право, такую чушь несёте. Эдак вы скоро до архиватора доберётесь, который любой файл сжимает до 128 бит. При чём сжатие происходит - практически мгновенно, а для расжатия надо юзать брутфорс ;)
 

Wicked

Новичок
Поделюсь своими параноидальными мыслями: имхо логично использовать взаимооднозначное отображение (в отличие от конкатенации) между паролями+солями и т.д. и аргументом, который передается в функцию md5(). Таким отображением может служить csv($pass, $salt, ...) (генерирует csv-строку), или serialize(array($pass, $salt, ...)). По-крайней мере, это гарантирует различия между:
$pass = "qwerty"; $salt="kjdhfgitn";
и
$pass = "qwertykjdhfgitn"; $salt="";
, когда как эти случаи считаются идентичными в случае md5($pass.$salt), и при некотором стечении обстоятельств наверное могут послужить дополнительной дыркой.
 

SiMM

Новичок
> и при некотором стечении обстоятельств наверное могут послужить дополнительной дыркой
$salt всё равно равен константе, так что это, в общем-то, безразлично. Случаи известности $salt злоумышленнику рассматривать бессмысленно - я уже говорил выше, что это значит наличие у него доступа и пароли ему нафиг не нужны. Пользователи, юзающие везде один и тот же пароль - сами себе злобные буратины.
 

Wicked

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

paDLa

Новичок
И все же может резюмируем все вышеизложенное.

Ситуация: кулхацкер спер базу и коды. Как сделать так чтобы ему от этого небыло слишком приятно?

1. закрыть исходные коды
2. хитро зашифровать пароли

Вопрос: если смысл сильно изголяться с п.2 при наличии п.1
 

dzimedrol

Новичок
> перейду-ка я на sha1
На [m]crypt[/m] надо переходить, он для того и сделан, чтоб пароли шифровать. В отличие от [m]md5[/m] [/QUOTE]
SHA1 и SHAA используются как стандартные алгоритмы шифрования паролей в Sun One Directory Server.
 

kruglov

Новичок
dzimedrol
crypt использует самый мощный алгоритм, установленный в системе.
 

Andreika

"PHP for nubies" reader
kruglov
ага.. потом половина зашифрована так, половина иначе, а часть вообще не вместилась в VARCHAR )
 

LongHornKms

Новичок
2 SiMM
>При чём здесь это? Когда интересует хотя бы одна.
Зачем? У меня используется 1000 MD5, у другого - 1007 MD5 и коллизия, которая работает у меня, не будет работать у других.


>Сделав md5 дважды, вы ограничиваете область допустимых значений аргумента для второго md5 узким алфавитом [0-9a-f] и строго заданной длиной строки - 32. В то время как у просто md5 диапазон входных данных гораздо шире. По вашему, это лучшим образом скажется на сложности подбора?<
Возможных комбинаций даже в этом случае 3,4*10^38, что аналогично использованию пароля из любых знаков (все ASCII коды - 255 знаков), длиной в 16 символов. так что не хило. Стойкость вполне нормальная.

>Аргумент функции md5 восстановить НЕВОЗМОЖНО.
Как же невозможно? Возможно. Перебором. Конечно, нет гарантии, что полученный результат - это аргумент, а не коллизия, но с вероятностью 99,9999% мы все-таки получаем именно пароль.
Так вот, надо защитить в базе именно пароли пользователя.

>Алгоритмы, которые я предлагаю - вредны (полезны для хакера)
Может быть проверим? Я 1000 раз закодирую при помощи MD5 какой-нибудь 5-ти значный пароль, использую случайные английские маленькие буквы. Обычный MD5 восстанавливается при помощи программы PasswordPro за 2 минуты 5 сек, а посмотрим, сколько потребуется для этого вам?
 
Сверху