Какая оптимальная длина для паролей пользователей?

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

Ответ 1

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

Соли должны быть достаточно длинными, чтобы каждая соль пользовалась уникальной. Случайные 64-битные соли вряд ли когда-либо повторятся даже с миллиардом зарегистрированных пользователей, так что это должно быть хорошо. Однократно повторяющаяся соль является относительно незначительной проблемой безопасности, она позволяет злоумышленнику одновременно искать две учетные записи, но в совокупности не ускорит поиск по всей базе данных. Даже 32-битные соли приемлемы для большинства целей, в худшем случае скорость поиска атакующего составит примерно 58%. Стоимость увеличения солей выше 64 бит невелика, но для этого нет оснований для безопасности.

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

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

Ответ 2

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

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

Ответ 3

Изменить: Мой ниже ответ отвечает на заданный вопрос, но "реальный" ответ: просто используйте bcrypt, scrypt, или Argon2. Если вы задаете такие вопросы, вы почти наверняка используете инструменты на слишком низком уровне.

Честно говоря, нет оправданной причины, чтобы соль не была такой же точной длины, как хешированный пароль. Если вы используете SHA-256, у вас есть 256-битный хеш. Нет причин не использовать 256-битную соль.

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

Ответ 4

Wikipedia:

Методы SHA2-crypt и bcrypt, используемые в Linux, BSD Unixes и Solaris - имеют соли 128 бит. Эти большие значения соли делают прекоммутационные атаки практически для любой длины пароля невозможны против этих систем в обозримом будущем.

128-битная (16-байтовая) соль будет достаточной. Вы можете представить его как последовательность 128 / 4 = 32 шестнадцатеричных цифр.

Ответ 5

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

например. Если вы собираетесь использовать SHA-512, используйте 256-битную соль, так как безопасность, предоставляемая SHA-512, составляет 256 бит.