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