Я понимаю, что соль не предназначена для того, чтобы быть секретной, она просто предназначена для того, чтобы отличаться от любого централизованного стандарта, чтобы вы не могли разработать таблицу радуги или подобную атаку, чтобы разрушить все хеши, которые используют алгоритм, поскольку соль разрывает радужный стол. Мое понимание здесь может быть не совсем правильным, поэтому исправьте меня, если я ошибаюсь.
В широко используемой части программного обеспечения с открытым исходным кодом соль будет широко известна, и это откроет вам атаки, потому что теперь они могут просто атаковать соленую версию вашего хэша и создавать таблицы радуги, которые включают данные о соле.
Как я вижу, есть два варианта решения этой проблемы. Первый заключается в изменении соли с каждой новой версией программного обеспечения, но это не хорошо, потому что новые версии программного обеспечения больше не смогут проверять старые хэши паролей.
Второе решение, о котором я думал, состояло в том, чтобы сохранить соль на каждый сохраненный пароль; другими словами, каждый пароль получает другую соль. Недостатком является то, что соли должны быть связаны с хэшами паролей каким-то образом, возможно, просто придерживаясь их рядом с паролем в базе данных. Возможно, даже правильно использовать имя пользователя (возможно, это не так, возможно, имена пользователей слишком короткие).
Мой вопрос: это приемлемо? Есть ли какой-либо дополнительный риск, связанный с хранением соли непосредственно с помощью хэша паролей? Мне кажется, что сохранение соли в исходном коде не отличается, поэтому нет потери безопасности, сохраняя соль с паролем.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я не использую это для какой-либо реальной системы безопасности. На самом деле, я никогда не разрабатывал систему паролей. Я просто смутно разбираюсь в вопросах безопасности.