Является ли солирование хешированной версией пароля пользователя таким же безопасным, как соление с заранее определенной строкой?

По сути, я спрашиваю, является ли добавление пароля путем добавления его хешированной версии в конец так же безопасно, как добавление соли с другой строкой. Так:

Это:

$pass = "pass";
$salt = sha1(md5($pass));
$pass = md5($pass.$salt);

Так же безопасно, как это?

$pass = "pass";
$salt = "4D9ds*^dkrUI45^#dkd*3fD8&!dlvd*";
$pass = md5($pass.$salt);

person Thomas    schedule 20.12.2010    source источник
comment
Вы не должны использовать фиксированную соль или генерировать соль из значения, которое нужно хешировать.   -  person Gumbo    schedule 20.12.2010
comment
Пока соль случайна для каждого пользователя, я не вижу никаких проблем.   -  person Ben    schedule 20.12.2010
comment
Если соль случайна, то хеш бесполезен. Можно также записать md5 (rand ()) в базу данных.   -  person codelark    schedule 20.12.2010
comment
Он не добавляет никакой энтропии. Это, по крайней мере, затруднило бы радужные столы, поскольку никто не подготовился к 0123456789..789password. Но насчет реальной безопасности однозначно нет.   -  person mario    schedule 20.12.2010


Ответы (3)


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

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

person BoltClock    schedule 20.12.2010
comment
«фиксированная соль» - это нехорошо, на самом деле «фиксированная соль» называется ключом. читайте также: stackoverflow.com Итак, / questions / 1645161 / используйте случайную соль с высокой энтропией. - person Jacco; 21.12.2010

Если соль основана на хешируемом значении, вы теряете ценность соли.

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

Вместо этого вам следует добавить соль к другому определяемому значению. Общие параметры - это такие поля, как имя пользователя, адрес электронной почты и т. Д.

person codelark    schedule 20.12.2010
comment
+1 по той же причине. Кстати, я действительно не вижу реальной проблемы безопасности при использовании фиксированного хеша по каким-либо другим причинам. - person cbrandolino; 20.12.2010

В любом случае вам не следует использовать md5, так как он был взломан. sha256 более безопасен и так же прост в реализации. Как насчет использования при хранении данных:

$salt = mt_rand();
$pass = hash('sha256',$_POST['userPassword'] . $salt);

Следовательно, $ salt основан не на каких-либо введенных пользователем данных, а на случайных данных. Затем вы сохраняете $ salt в базе данных как есть или меняете строку для обфускации.

person JakeParis    schedule 20.12.2010