Прошли несколько вопросов по этой теме в SO и не смогли найти ответы на этот конкретный запрос. Я видел Salting Your Password: Best Practices? и отличный ответ Non-random salt for password hashes, который имеет очень полезные рекомендации, но не содержит четкого указания по хранению.Управление паролями - подход к Hash, Salt & Iteration
Желательно ли иметь хэш, случайную соль и итерацию в одной таблице? Если нет, то какой подход?
Я понимаю, что радужные столы не могут быть легко сделаны со случайными солями на месте, даже если мы их вместе. Вопрос в том, что есть много простых дополнительных сдерживающих факторов, которые могут пройти долгий путь. Например, соль в другой таблице (инъекции обычно выщелачивают таблицу, а не БД) и счетчик итераций в другом уровне (скажем, константа в среднем уровне).
Я думаю, вы должны предположить, что мотивированный злоумышленник получит * все * данные, хранящиеся в вашей системе, независимо от того, где вы его разместили. –
Согласитесь, что это лишь незначительный сдерживающий фактор для разделения таблицы. Как насчет количества итераций. Разве это не лучше, как постоянный в середине уровня? В случае (в скором времени) изменения счетчика в будущем он может управляться последней отметкой времени, чтобы преобразовать успешные логины в новый счетчик итераций. – fozylet
Как отметил Грег, вы должны разработать свою систему для хранения паролей в формате, который очень сложно сломать, даже если злоумышленник знает каждый бит информации о пароле. Хранение вещей в разных столах не является сдерживающим фактором и не должно использоваться в качестве предлога для ослабления вашей безопасности в каком-либо другом месте (не говоря, что вы это сделаете). Предположим, что любые инъекции получат всю вашу базу данных. –