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 :: Версия для печати :: Шифрование паролей, сессий, куков...
Форумы портала PHP.SU » » Вопросы новичков » Шифрование паролей, сессий, куков...

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

1. Hapson - 30 Июля, 2013 - 01:08:41 - перейти к сообщению
Ниже я может где-то ляпну глупость - я не особо разобрался еще во всех этих методах шифрования.
Имеет ли смысл шифровать пароль к примеру так:
PHP:
скопировать код в буфер обмена
  1. $start = microtime(1);
  2.  
  3. $user_pass = "megapassword";
  4. $salt = hash("sha512", $_SERVER['REMOTE_ADDR']);//соль -> в БД
  5. $result = "";
  6. for($i = 0; $i < 10000; $i++){
  7.         $result = hash("sha512", $user_pass . $salt . $result);
  8. }
  9. $result = md5($salt . substr($result, 32, 32));//пароль -> в БД
  10.  
  11. $clock = microtime(1) - $start ."<br>";
  12. //0.28 - 0.3 sec


Дальше вопрос по кукам.
Что если и имя и значение куки тоже будут какими-то вот такими хешами? В куки уже хешировать какие-то поля из БД.

Теперь сессии. На основе чего генерируется id сессии? Можно же ведь вместо имени сессии записывать такой хеш? Ну и значение тоже хеш чего-то там... юзер агент, ip (любые значения, за которыми не нужно лазить в БД)

Ну и самое главное - везде ли поддерживается sha512?
(Добавление)
PS
Ну к примеру вот так (образно)
PHP:
скопировать код в буфер обмена
  1. session_name(hash("sha512", $_SERVER['REMOTE_ADDR']));
  2. session_id(hash("sha512", $_SERVER['HTTP_USER_AGENT']));

(Добавление)
PPS
ну и плюс в саму сессию будет записываться хеш каких-то данных, которые есть в сессии.
2. caballero - 30 Июля, 2013 - 01:31:01 - перейти к сообщению
смысл шифровать пароль есть в БД чтобы потом сравнивать при авторизации

Цитата:
Теперь сессии. На основе чего генерируется id сессии? Можно же ведь вместо имени сессии записывать такой хеш?


а зачем в это вообще лезть? как работает сессия не имеет значения - вы можете зранить там что угодно включая пароли
3. Hapson - 30 Июля, 2013 - 01:59:36 - перейти к сообщению
caballero пишет:
смысл шифровать пароль есть в БД чтобы потом сравнивать при авторизации

Я имею ввиду при регистрации нового пользователя, его пароль шифровать как-то так.
caballero пишет:
а зачем в это вообще лезть? как работает сессия не имеет значения - вы можете зранить там что угодно включая пароли

Многие пишут, что украв куку сессии можно как-то что-то нехорошее наделать. В общих чертах - сессии не совершенны. Это не мое мнение. Ну да ладно, пусть будет PHPSESSID, но парочка хешей там не помешает.
4. Vaio - 30 Июля, 2013 - 09:10:50 - перейти к сообщению
http://php.net/manual/ru/faq.passwords.php

Hapson пишет:
Многие пишут, что украв куку сессии можно как-то что-то нехорошее наделать. В общих чертах - сессии не совершенны.

Украв куку сессии, он не сможет увидеть ни содержание сессии ни изменить ее.

Можешь еще добавить какие-то дополнительные хэши в сессию/куку и затем сверять их.
5. Hapson - 30 Июля, 2013 - 17:07:29 - перейти к сообщению
Vaio пишет:
http://php.net/manual/ru/faq.passwords.php

Hapson пишет:
Многие пишут, что украв куку сессии можно как-то что-то нехорошее наделать. В общих чертах - сессии не совершенны.

Украв куку сессии, он не сможет увидеть ни содержание сессии ни изменить ее.

Можешь еще добавить какие-то дополнительные хэши в сессию/куку и затем сверять их.

Понятно, мануал я читал.
Я так понял, что нет смысла извращаться с шифрованием, но и ограничиваться однократным md5 без соли тоже нельзя.
Уникальная соль пользователя хранится всегда рядом с паролем, так как нет смысла ее скрывать, если она действительно для каждого уникальна. Методы шифрования в алгоритме тоже по большому счету не имеют значения. Если алгоритм украден, то все.
То есть не важно, прогнал я пароль 5 раз через md5 или по разу через разные методы. Пусть я даже несколько раз порезал и склеил разные хеши и еще раз все захешировал - плевать.
Я так понял, важно время выполнения хеширования. Пусть это даже будет прогон через md5 100000раз. Потом по словарю проверять будет уже долго.
Из этого я делаю вывод, что нужно увеличить время хеширования, что немного увеличит безопасность, даже если украли алгоритм.

Вопрос: какое время оптимально для шифрования. Выше я привел пример, который выполняется примерно 0,3 сек. Но на время влияет и железо, так ведь? У меня на ноуте 1.6 ГГц.

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

А что насчет hash(). К примеру если я буду использовать hash() и sha512, на всех ли системах это будет работать.

Но самое главное, каково оптимальное время шифрования. Можно ведь и на md5 запустить цикл.А в цикле можно много чего делать со строкой. В последствии взломщик для подбора будет вынужден использовать именно мой - долгий алгоритм.

PS
Конечно же, это не главное. Главное то, нужен ли кому-то мой сайт. Если нужен очень, то поломают. Вопрос в том, как максимально затруднить процесс, чтобы не ломали все кому не лень.
6. caballero - 30 Июля, 2013 - 17:49:21 - перейти к сообщению
если доступа к Бд нет то достаточно простого MD5
а если есть то никакое шифрование не поможет.

не заморачиватесь с проблемами которых нет
7. Hapson - 30 Июля, 2013 - 18:08:01 - перейти к сообщению
caballero пишет:
если доступа к Бд нет то достаточно простого MD5
а если есть то никакое шифрование не поможет.

не заморачиватесь с проблемами которых нет

Я тоже так думаю. Но вопрос в том, стоит ли повышать время шифрования. Усложнится ли задача взломщика, если у него есть БД, хеши, соли и мой алгоритм. То есть он будет делать банальный перебор. Но перебор будет долгим за счет алгоритма. Вот мне и интересно, как долго нужно шифровать - 0.3, 0.5, 1... сек
8. caballero - 30 Июля, 2013 - 18:12:08 - перейти к сообщению
Цитата:
Усложнится ли задача взломщика, если у него есть БД, хеши, соли и мой алгоритм. То есть он будет делать банальный перебор

никто не будет взламывать шифр перебором

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

в любом случае способ шифровния всегда можно поменять - это локальные изменения а не переделка сайта
так какой смысл с этим сейчас заморачиватся.
9. Hapson - 30 Июля, 2013 - 18:32:54 - перейти к сообщению
caballero пишет:
в любом случае способ шифровния всегда можно поменять

Кстати...
К примеру я использую md5($pass) - уже есть 100 пользователей в БД. И тут я решил использовать hash("sha512", $pass) - как проверять те хеши, которые генерировал md5?
10. makar3000 - 30 Июля, 2013 - 18:50:52 - перейти к сообщению
Hapson В форме авторизации после $_POST используете:

PHP:
скопировать код в буфер обмена
  1. $err = '';
  2. $login = $_POST['login']; // + Проверки на sql инджект
  3. $pass = $_POST['passw'];
  4.  
  5. $result = mysql_query('select * from `users` where `login`="'.$login.'"');
  6. $result = mysql_fetch_array($result);
  7.  
  8. if(preg_match('/^[a-f0-9]{32}$/', $result['passw']))
  9.     if(md5($pass) !== $result['passw']) $err = 'Неверный пароль';
  10. else
  11.     if(hash("sha512", $pass) !== $result['passw']) $err = 'Неверный пароль';
  12.  
  13. if(!$err) {
  14.     // Если пароли верны
  15. } else echo $err;
11. Hapson - 30 Июля, 2013 - 18:59:50 - перейти к сообщению
makar3000
Ну это понятно - двойная проверка. Я имею ввиду, что я буду вынужден после смены алгоритма юзать двойную проверку. И после смены я смогу лишь попросить пользователей сменить пароли. А если я к примеру буду вырезать из sha512 32 символа и их писать в БД, то я даже не узнаю, где хеш md5, а где sha512.

Вот поэтому я и хочу сейчас определить метод хеширования.
12. makar3000 - 30 Июля, 2013 - 19:04:00 - перейти к сообщению
Могли бы сделать так что бы при вводе старого пароля в md5, выводилась форма смены пароля, а там уже обновляли базу загоняя в нее новый пасс.

Да и не могу понять зачем оно вам? md5 не расшифровывается, ну только в тех случаях если пароли: 123456, 123321, qwerty
13. Hapson - 30 Июля, 2013 - 19:10:03 - перейти к сообщению
makar3000 пишет:
Да и не могу понять зачем оно вам? md5 не расшифровывается, ну только в тех случаях если пароли: 123456, 123321, qwerty

Ну да)))
Ладно, но главное-то: hash("sha512", $pass) - будет работать на всех системах?
14. makar3000 - 30 Июля, 2013 - 19:12:50 - перейти к сообщению
Hapson Всмысле на всех? На всех версиях php?
(Добавление)
PHP 5 >= 5.1.2,
15. teddy - 30 Июля, 2013 - 19:21:57 - перейти к сообщению
.

 

Powered by ExBB FM 1.0 RC1