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

1

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

Пример:

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

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

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

Ваш Ответ

6   ответов
1

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

String hash = MD5(username + password)

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

0

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

да, я собирался, просто используя MD5 в качестве примера, потому что он наиболее широко известен. Petey B
7

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

спасибо за информацию, добавлю туда соль. Petey B
1

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

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

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

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

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

0

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

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

Похожие вопросы