Подтвердить что ты не робот

Каков наилучший способ соления и хранения соли?

Привет, ребята, я прочитал о том, как солить пароль, но это может показаться немного странным. Но как я могу хранить и защищать соль. Например, в архитектуре с несколькими шинами говорят, что я использую GUID клиентских машин для генерации моей соли, тогда пользователь ограничивается одной машиной, но если я использую случайную соль, ее нужно где-то хранить. Несколько дней назад я увидел пример приложения, в котором хэш и соль были сгенерированы в клиентской системе всякий раз, когда новый пользователь был создан, а затем соленый пароль и хэш передаются на сервер, где они хранятся на SQL-сервере. Но если я следую этому методу, и база данных будет скомпрометирована, для человека X будут доступны пароли и значения солей для каждого пароля. Итак, должен ли я снова солить/зашифровать пароли и получить соль на стороне сервера? Какова наилучшая практика соления?

4b9b3361

Ответ 1

Сохранение соли, незашифрованной в базе данных рядом с хешированными паролями, не является проблемой.

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

Смотрите этот отличный пост по теме Томаса Птачека.

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

edit @n10i. См. статью wikipedia для безопасной хэш-функции. Что касается размера соли, в популярной реализации bcrypt.gensalt() используется 128 бит.