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

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

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

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

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

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

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

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

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

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

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

Википедия :

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

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

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

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

  • Самый простой способ шифрования текстового файла в java
  • Как безопасно хранить ключи шифрования в java?
  • Как расшифровать зашифрованную строку AES-256 из CryptoJS с помощью Java?
  • Почему при использовании функции Non-Random IV с режимом CBC существует уязвимость?
  • Java - шифрование / дешифрование имени пользователя и пароля из файла конфигурации
  • Давайте будем гением компьютера.