Это похоже на сильную соль для пароля - PullRequest
5 голосов
/ 22 ноября 2010

Это похоже на безопасную соль для использования с паролем? Какие-либо улучшения или предложения или очевидные недостатки?

$salt = '';
for ($i = 0; $i < 50; $i++) {
   $salt .= chr(rand(33, 126));
}

Ответы [ 4 ]

8 голосов
/ 22 ноября 2010

Вам не нужно делать соли очень долго, и не важно, чтобы они были криптографически безопасными.Смысл в том, чтобы просто сделать атаки радужных таблиц более сложными, поскольку у вас больше нет сопоставления 1: 1 между паролями и хэшами.(Они также не дают администраторам блуждать глазами, видя 482c811da5d5b4bc6d497ffa98491e38 в базе данных, а затем зная, что пароль Джо - «password123».)

Даже 4-байтовой соли было бы более чем достаточно, поскольку у вас теперь было бы 2 32 ≈ 4 миллиарда потенциальных хешей для любого пароля.

5 голосов
/ 22 ноября 2010

Я не думаю, что rand - это хороший PRNG.Если я правильно помню, он отображается непосредственно в c PRNG, который во многих реализациях имеет ужасно маленькое (например, 32-битное) внутреннее состояние.

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

И я обычно делю свою соль на две части:

  1. A на случайную часть на пользователя, которая хранится в базе данных вместе с хешем
  2. A на соль приложения, которая хранится в файле конфигурации.

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

3 голосов
/ 22 ноября 2010

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

3 голосов
/ 22 ноября 2010

Я бы использовал mt_rand, так как он быстрее, но этого вполне достаточно для соли.

...