Используя хэш того, что вы хешируете как соль?

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

Пример:

String hash1 = MD5(password);
String endHash = MD5(hash1 + password);

затем сохраните endHash в вашей базе данных. Будет ли этот эффективный agaisnt Rainbow Table атаковать, если моя база данных будет компрометирована? Или я что-то упустил, что легко сломать?

 Nefrubyr13 июл. 2009 г., 18:20
Это должно быть первым правилом работы с протоколами безопасности: не пытайтесь быть умным, вы только сломаете его. Используйте случайную соль. Не имя пользователя. Не хэш ничего. Просто случайные данные.

Ответы на вопрос(6)

Кроме того, вы должны избегать MD5 в пользу сильного хэш-алгоритма, такого как SHA1, SHA-256, SHA-512.

 Petey B13 июл. 2009 г., 18:19
да, я собирался, просто используя MD5 в качестве примера, потому что он наиболее широко известен.

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

Решение Вопроса

Это ключевое усиление (http://en.wikipedia.org/wiki/Key_strengthening), хорошая техника, которая, тем не менее, не заменяет настоящую соль. Он не защитит вас от радужного стола, написанного с помощью этой двойной хэш-функции.

 Petey B13 июл. 2009 г., 18:19
спасибо за информацию, добавлю туда соль.

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

String hash = MD5(username + password)

Вам также следует рассмотреть возможность использования другой функции, так как md5 считается неработающейMD5

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

Поскольку это относится к вашему вопросу - использование динамической соли обычно затрудняет определение вашей соли. Это повышает безопасность, но не поможет, если кто-то знает ваш алгоритм.

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

 13 июл. 2009 г., 18:17
Соль может быть полностью публичной, не ставя под угрозу безопасность выбранной вами схемы паролей. Основная задача соли состоит в том, чтобы предотвратить использование предварительно сгенерированных радужных таблиц, а не предотвратить создание новой настраиваемой радужной таблицы для каждого пароля.

Не имеет значения: Ваши сохраненные данные по-прежнему основаны исключительно на пароле, поэтому дополнительной защиты нет.

 13 июл. 2009 г., 18:08
Существует некоторая дополнительная защита в том, что условная радужная таблица не будет работать, в то время как для создания пользовательской таблицы потребуется вдвое больше времени. Но, конечно, вы правы в том, что не защищаете, как соль.

Ваш ответ на вопрос