2012-06-11 3 views
0

Прошли несколько вопросов по этой теме в SO и не смогли найти ответы на этот конкретный запрос. Я видел Salting Your Password: Best Practices? и отличный ответ Non-random salt for password hashes, который имеет очень полезные рекомендации, но не содержит четкого указания по хранению.Управление паролями - подход к Hash, Salt & Iteration

Желательно ли иметь хэш, случайную соль и итерацию в одной таблице? Если нет, то какой подход?

Я понимаю, что радужные столы не могут быть легко сделаны со случайными солями на месте, даже если мы их вместе. Вопрос в том, что есть много простых дополнительных сдерживающих факторов, которые могут пройти долгий путь. Например, соль в другой таблице (инъекции обычно выщелачивают таблицу, а не БД) и счетчик итераций в другом уровне (скажем, константа в среднем уровне).

+5

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

+0

Согласитесь, что это лишь незначительный сдерживающий фактор для разделения таблицы. Как насчет количества итераций. Разве это не лучше, как постоянный в середине уровня? В случае (в скором времени) изменения счетчика в будущем он может управляться последней отметкой времени, чтобы преобразовать успешные логины в новый счетчик итераций. – fozylet

+1

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

ответ

2

Это нормальный образец для хранения соли и итерации вместе с вычисленным хешем.

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

+0

Согласитесь с солью. Какая цель выполняет итерации, если счет сразу доступен? – fozylet

+0

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

+0

Если у них есть соль, тогда можно взломать хэш. – AustinAllover

2

Мы ответили на этот вопрос в различных формах на блоке безопасности стека.

Они похожи на концепции вашего подхода удерживать всю информацию в одной таблице.

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

От одного из постов криптограф Томаса Pornin на нашем безопасности Стек Обмена блог:

  • Why passwords should be hashed - мы хэширование паролей, чтобы предотвратить злоумышленник доступа только для чтения с эскалации до более высоких уровней мощности. Хеширование паролей не сделает ваш веб-сайт непроницаемым для атак; он все равно будет взломан. Хеширование пароля - это защита от повреждений.
+1

. Эти вопросы, похоже, обсуждают, как вычислить хеш, а не о том, как хранить фрагменты или как распределять обязанности между средним уровнем и БД. – fozylet

-2

Хранение соли внутри базы данных хорошо для предотвращения радуги таблицы атаки, но за дополнительную сдерживающего:

Убедитесь, что соль верхний, нижний, альфа, числовые и специальные символы и жесткий код его вдоль с солью внутри базы данных:

sha1('a&1S' . $user_pass . $random_salt); // a&1S is the 'hard coded salt' 

Почему жёстко соль?Он делает все и больше, чем случайный соль, который хранится в базе данных.

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

Так что если у злоумышленника нет файла доступ, который в большинстве случаев, жестко закодированная соль будет нераскрытой, и единственный способ, которым злоумышленник мог взломать пароль, - это выполнить команду bruteforce (выполнить команду U, L, A, N, S, которая является - почти невозможной, если пароль + соль + жёстко длина соли> = 10 символов)

см http://hashcat.net - рекомендуемый инструмент хакера для хэша крекинга Добавить свой хэш http://waraxe.us, чтобы увидеть, если ваш пароль может быть взломан (:

+0

случайная соль НЕ делает все, что делает случайная соль. Он служит совершенно отдельной цели, и предполагаемое увеличение безопасности является весьма ситуативным.Пожалуйста, прочитайте криптографы на тему: [Пароль Хейшинг добавляет соль + перец или достаточно соли?] (Http://security.stackexchange.com/a/3279/2113) – Jacco

+0

В безопасности вы должны предположить, что если у них есть доступ к вашей базе данных, они имеют доступ на чтение для всей вашей машины. Также очень * очень много времени, чтобы атаковать список паролей, хэшированных с помощью правильного алгоритма хэширования (BCrypt). Я предполагаю, что ваше предположение о простом взломе хэша основано на устаревшем MD5. – Jacco

+0

И тогда нет такой вещи, как «твердая закодированная соль»; в криптографии это будет называться ключом. Ваше предположение заключается в том, что ваш ключ останется в секрете и не может быть определен другими способами. Это предположение неверно. Если я могу получить систему хэш 1 известное значение (например, * мой * пароль), я могу определить ключ для стоимости атаки на один хеш. После этого мы вернулись на четвертую. – Jacco

Смежные вопросы