Как я должен действительно экономить соли - PullRequest
0 голосов
/ 25 ноября 2018

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

Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

@ ManyelReyes имеет правильный ответ, и вот почему:

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

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

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

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

0 голосов
/ 25 ноября 2018

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

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

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

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

Подробнее здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...