2013-02-20 1 views
2

Услышав обо всех недавних хаках в крупных технических фирмах, мне стало интересно узнать, как они используют хранилище паролей.Солить пароль бессмысленно, если кто-то получает доступ к соляному ключу? Выключить сервер?

Я знаю, что соление + хеширование принято как обычно безопасное, но когда-либо пример, который я видел в солевом, имеет ключ соляной кислоты, закодированный в скрипт пароля, который обычно хранится на том же сервере.

Итак, это логичное решение для хэш-пароля пользователя изначально, передать этот хэш на «сервер соления» или какую-то функцию, хранящуюся за пределами сайта, а затем передать обратно соленый хеш?

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

ответ

4

No-salt остается в силе, даже если известен злоумышленнику.

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

Это умножение на несколько тысяч (или, возможно, несколько миллионов, в зависимости от того, насколько большая соль вы используете) увеличивает время на хэш всех значений, а хранилище необходимо сохранить результаты - точку, которая (вы надеетесь) это непрактично.

Я должен добавить, однако, что во многих случаях (очень?) Очень большая соль действительно не добавляет много безопасности. Проблема в том, что если вы используете, скажем, 24-битную соль (~ 16 миллионов возможных значений), но только, скажем, несколько сотен пользователей, злоумышленник может собирать значения соли, которые вы на самом деле используете заблаговременно, его словарь атакует только за эти значения вместо полных ~ 16 миллионов потенциальных значений. Короче говоря, ваша 24-битная соль добавляет лишь крошечную часть сложности, превышающей то, что обеспечила бы соль из 8 бит.

OTOH, для большого сервера (Google, Facebook и т. Д.) История совершенно другая: большая соль становится весьма полезной.

3

Соление полезно, даже если злоумышленник знает соль.

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

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

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

+0

Имеет смысл. Кажется, что больше усилий, чем стоит (если только его сайт не имеет значительного значения или важности) для злоумышленника. Спасибо за быстрый ответ. –

1

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

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

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

Я прочитал хорошую статью по этому вопросу, которую я не могу найти сейчас. Но Googling 'password salt' дает хорошие результаты. Посмотрите на this article.

+0

Спасибо. Только то, что я хотел знать. –

0

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

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

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

Я попытался объяснить различия в небольшом tutorial, возможно, вы хотите посмотреть там.

0

Имеет смысл. Кажется, что больше усилий, чем стоит (если только его сайт не имеет значительного значения или важности) для злоумышленника.

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

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

, используя хороший алгоритм хэширования, также имеет значение (использование MD5 или SHA1 почти похоже на использование открытого текста с настройками mutli gpu в эти дни) используйте scrypt, если не тогда bcrypt, или если вам нужно использовать PBKDF2 (вам нужно, чтобы раунды были очень высокими)