Почему считается безопасным хранить случайную соль в базе данных с дайджестом пароля пользователя?

В свете большой Утечка паролей в LinkedIn, я думал о безопасности паролей. Фреймворки веб-разработки, с которыми я работал в прошлом, обычно хранят основную соль уровня приложения в качестве константы приложения, а затем объединяют все пароли пользователей с этим значением (генерируются случайным образом для каждого приложения). например в псевдокоде: password = hash(App::salt + userPassword).

Я прочитал много советов, в которых предлагается создать случайную соль для каждого пользователя, а затем сохранить ее в базе данных вместе с паролем каждого пользователя. У меня вопрос, как это повышает безопасность? Если злоумышленник получит список дайджестов паролей из базы данных, он, вероятно, тоже сможет получить соль, верно? Или есть какой-то вектор атаки, о котором я не знаю, который получит дайджесты паролей без доступа к остальной части таблицы?


person rybosome    schedule 06.06.2012    source источник


Ответы (1)


Сохранение случайной соли для каждого пользователя предотвращает атаку Rainbow table.

В случае "основной соли" все еще можно предварительно вычислить такую ​​таблицу и использовать ее в атаке. При использовании соли для каждого пользователя это становится непрактичным.

person Sergio Tulentsev    schedule 06.06.2012
comment
Тогда есть ли смысл иметь соль для всего приложения, а также случайную соль? Для этого потребуется получить доступ к конфигурации приложения в файловой системе, а также затруднить определение дайджеста по словарю / обычным паролям плюс сохраненная соль. - person rybosome; 07.06.2012
comment
@rybosome Единственная проблема, которую я вижу, это то, что вы не можете изменить его в будущем, не аннулируя всех текущих пользователей. - person George Reith; 21.03.2014