|
|
|
| В форуме периодически всплывает вопрос где и как хранить пароли. Сразу рекомендуют хэш. А для пущей секретности - двойной (тройной, ... десятерной хэш). Данный способ прокатывает только до тех пор, пока код закрыт. Если же исходники открыты, то подобные манипуляции бессмысленны - алгоритм известен, а значит пароль можно взять перебором.
Для себя я придумал следующую схему:
<?
//$securecode генерируется один раз при установке системы и хранится в файле настроек сайта
$securecode=md5(rand());
//очевидно что это пароль пользователя
$pass='string';
//этот код мы храним в куках и используем для автоматической авторизации
$cookiehash=md5($pass.$securecode);
//этот код хранится в БД
$dbpass=md5($cookiehash.$securecode);
|
Таким образом, при том что алгоритм шифрования известен, для взлома пароля необходимо завладеть данными как минимум из двух источников: $securecode && ($cookiehash || $dbpass).
Единственное узкое место - подделка куки. Но в этом случае злоумышленник сможет только авторизоваться. Для изменения настроек ему все равно необходим пароль.
можно, конечно, зарегистрироваться на сайте и попытаться, имея собственную куку, вычислить $securecode, но страшно представить сколько времени на это потребуется.
Какие будут мысли/замечания/идеи? | |
|
|
|
|
|
|
|
для: Loki
(23.12.2008 в 12:58)
| | Собственно, замечание одно.
Мощность множества возможных значений $securecode будет равна RAND_MAX . | |
|
|
|
|
|
|
|
для: Trianon
(23.12.2008 в 13:50)
| | имеет смысл исправить на mt_rand()? или лучше что-то еще более серьезное? | |
|
|
|
|
|
|
|
для: Loki
(23.12.2008 в 14:36)
| | Про rand() и mt_rand(0 я как-то тут уже говорил.
Эти функции призваны генерировать статистически равномерную последовательность, а не одиночные данные. кроме того, никакой криптозащиты в них нет - они для этого попросту не предназначались.
rand дает RAND_MAX значений, но вовсе не все будут равновероятны при единственном вызове.
Я бы оперся на дрообную часть microtime (и может быть даже на результаты нескольких таких вызовов в разных http-запросах - на разных пользовательских шагах процесса установки движка)
вообще, чем больше непредсказуемых данных будет взято в затравку для такого ключа - тем лучше.
Если только они и вправду непредсказуемые. | |
|
|
|
|
|
|
|
для: Trianon
(23.12.2008 в 15:27)
| | Собственно, наверное microtime и есть самое непредсказуемое. | |
|
|
|