Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: MD5 и соль
Форумы портала PHP.SU » » Вопросы новичков » MD5 и соль

Страниц (4): [1] 2 3 4 »
 

1. Hapson - 07 Июля, 2013 - 13:14:54 - перейти к сообщению
Говорят что MD5 не надежен и нужно использовать так называемую соль. Но что-то я не пойму в чем ее смысл.
Например:
PHP:
скопировать код в буфер обмена
  1. $pass = 'password';
  2. $md = md5($pass);
  3. $salt = uniqid(rand(), 1);
  4. $md = md5($md . $salt);
  5. echo $md;
  6.  
  7. if(md5(md5('password') . $salt) == $md){
  8.         echo 'да';
  9. }else{
  10.         echo 'нет';
  11. }

И что? Я ведь должен записать куда-то сгенерированную соль, чтобы потом авторизовать пользователя. Если соль не сохранять, то потом невозможно будет сверить пароль.
Вопрос: где хранить соль? В базе? Тогда смысл...
2. Denkill - 07 Июля, 2013 - 13:17:22 - перейти к сообщению
Соль ставишь статистическую типо $salt = "salt";

P.S ну понимаешь что salt слишком просто
3. Hapson - 07 Июля, 2013 - 13:21:11 - перейти к сообщению
Denkill пишет:
Соль ставишь статистическую типо $salt = "salt";

P.S ну понимаешь что salt слишком просто

Ну это понятно. Но эту переменную тоже нужно где-то сохранить. Где?
Там же где и проходит хеширование?
4. Denkill - 07 Июля, 2013 - 13:22:20 - перейти к сообщению
Лучше конечно хранит в отдельном файле (что бы было легче менять)

А при шифровки и расшифровки инклудить этот файл.
5. DelphinPRO - 07 Июля, 2013 - 13:36:20 - перейти к сообщению
Denkill пишет:
Соль ставишь статистическую типо $salt = "salt";

Необязательно.
Некоторые системы (например Joomla, а ее думаю не дураки писали?) хранят соль в базе, причем соль для каждого юзера уникальная.
6. Hapson - 07 Июля, 2013 - 13:36:32 - перейти к сообщению
Denkill пишет:
Лучше конечно хранит в отдельном файле (что бы было легче менять)

А при шифровки и расшифровки инклудить этот файл.

А зачем ее менять?
Если к примеру зарегистрировался пользователь User с паролем password и я его пароль зашифровал с солью salt, то я должен хранить эту соль пока активен User.
(Добавление)
DelphinPRO пишет:
Denkill пишет:
Соль ставишь статистическую типо $salt = "salt";

Необязательно.
Некоторые системы (например Joomla, а ее думаю не дураки писали?) хранят соль в базе, причем соль для каждого юзера уникальная.

Вот и я о том же.
Соль-то для чего нужна? Если ломанули БД,то без соли пароли не расшифруют(наверно...). А если соль в БД лежит, и пусть даже уникальная для каждого пользователя, то в чем ее смысл?
7. vanicon - 07 Июля, 2013 - 13:51:36 - перейти к сообщению
Hapson
Она не обязательно лежит в бд, она может находиться и на другом сервере который умел бы хешировать или отдавать соль...
Да и хеширование это зашита данных бд, а если и приложение хакнули то тут защита куда серьезнее нужна...
8. roadster - 07 Июля, 2013 - 13:52:25 - перейти к сообщению
Почитайте вот тут: http://forum[dot]antichat[dot]ru/showthread.php?p=128979
Вроде бы доступно подробно описано зачем оно нужно и с чем его едят.
9. OrmaJever - 07 Июля, 2013 - 14:01:31 - перейти к сообщению
Hapson пишет:
Соль-то для чего нужна? Если ломанули БД,то без соли пароли не расшифруют(наверно...).

нет, суть в том что md5 можно подобрать только перебором по базе. Пароль 123456 подобрать очень легко т.к. он есть в любой базе по подбору, а вот 123456salt уже намного сложнее. Даже если взломщик узнает эту соль она ему никак не поможет.
10. vanicon - 07 Июля, 2013 - 14:04:00 - перейти к сообщению
OrmaJever пишет:
Даже если взломщик узнает эту соль она ему никак не поможет.

А это еще почему?
Если я знаю алгоритм и соль в чем проблема?
11. Champion - 07 Июля, 2013 - 14:07:02 - перейти к сообщению
Hapson, md5 имеет такое свойство, что во-первых из хеша невозможно вычислить исходное значение (только подобрать). Во-вторых, изменение входных данных ведет к непредсказуемому изменению на выходе. Соль - это как раз такое изменение данных на входе.
Соль, состящая из всякого бессмысленного набора символов с большой вероятностью делает хеш не словарным. И не важно - знаем мы соль или нет, нам это мало поможет.
12. EuGen - 07 Июля, 2013 - 14:07:04 - перейти к сообщению
OrmaJever
Это не совсем так. Дело в том, что md5 уязвим к атаке увеличением длины сообщения
Выжимка -
Цитата:
Если вы знаете значение md5('foo'), в силу способа вычисления MD5 можно очень легко посчитать значение md5('foobar'), даже не зная префикса 'foo'.
Так что если вы знаете значение md5('secretfoo:bar'), можно легко вычислить значение md5('secretfoo:bar&bar:baz'), даже не зная префикса 'secret'.

- иными словами, соль не спасёт от атаки по словарю, если есть база хешей (например, случай, когда взломали БД). Но вот сложные пароли не пострадают.
Почитайте ещё - много интересного.
13. OrmaJever - 07 Июля, 2013 - 14:22:20 - перейти к сообщению
EuGen пишет:
Если вы знаете значение md5('foo'), в силу способа вычисления MD5 можно очень легко посчитать значение md5('foobar'), даже не зная префикса 'foo'.
Так что если вы знаете значение md5('secretfoo:bar'), можно легко вычислить значение md5('secretfoo:bar&bar:baz'), даже не зная префикса 'secret'.

Вопрос в том, как? Я не совсем это понимаю.
14. Hapson - 07 Июля, 2013 - 14:23:16 - перейти к сообщению
Всем спасибо, буду читать.
Ну в общих чертах, как я понял, можно использовать приведенный мною пример и сохранять сгенерированную соль в базе рядом с паролем пользователя.
Правильно?
15. vanicon - 07 Июля, 2013 - 14:25:54 - перейти к сообщению
Hapson
Зачем сохранять соль в бд?
Храните ее просто в php скрипте, разницы нет, что бд вскроют или же приложение...

 

Powered by ExBB FM 1.0 RC1