Я (почти полный) новичок, и это мой первый набег на шифрование - на самом деле это, наверное, в первый раз, когда я использую это слово.
Вот мой вопрос: для небанковского/военного или даже коммерческого веб-приложения, какой правильный способ выбрать соль для хэш-функции, используемой для паролей?
Я могу легко генерировать псевдослучайную соль для каждого нового пользователя и добавлять эту соль к их pw перед применением хэш-функции. Но мне все еще нужно хранить соль, поэтому, возможно, все, кто получает доступ к хешированным паролям, также получают соли.
Преимущество соли просто сделать pw "более случайным" и, следовательно, победить стандартные таблицы радуги на основе словаря?
Будет ли любая из следующих хороших и практических идей:
- Храните соль в отдельном db - возможно, отдельную систему, определенно другую хост, имя, pw и т.д.
- Генерировать соль на основе хэша имени пользователя (или сначала + фамилию, или дату регистрации), предположительно используя другую хеш-функцию? Тогда сама соль не будет храниться в db - только данные, используемые для ее вычисления, будут...
- Хранить в db значение, которое объединяет хешированный pw и соль, неявным образом (например, соль имеет 10 случайных ключей, и они вводятся внутри хэшированного pw между буквами 1 и 2, 4 и 5, 8 и т.д.).
Как побочный вопрос, насколько легко изменить алгоритм соленого хеша при обновлении программного обеспечения веб-сайта? Он чувствует себя кошмаром прямо сейчас.