Если вы собираетесь хранить случайную соль для каждого пользователя, это не имеет большого значения. Храните соль + хеш в одном столбце или храните соль и хеш в двух столбцах. Лично я бы сохранил это как один столбец, потому что маловероятно, что вы когда-либо будете получать только соль или просто хеш. Также, если вы обновляете соль, то необходимо также обновить хеш, а при обновлении хеша вы может также обновить соль. Тем не менее, любой способ хранения одинаково действителен с точки зрения криптографии.
Я думаю, что этот комментарий указывал (хотя и плохо) на то, что альтернативным решением является получение соли из другого фрагмента данных для пользователя, производной соли .
В качестве примера возьмите имя пользователя и пропустите его через 1000+ итераций PBKDF2 (фактически лучше выбрать уникальное и необычное количество итераций - скажем, 2137). Для этого злоумышленнику потребуется доступ к не только к базе данных, но и к вашему исходному коду , чтобы победить систему.
Теперь, если злоумышленник имеет полный доступ как к таблице паролей, так и к исходному коду, вы не получаете никакой защиты, однако, если атака имеет только доступ к базе данных (ограниченное вторжение), вы прекратили атаку или, по крайней мере, сделаете ее намного более сложной.
Еще один аспект, который следует учитывать при реализации производной соли, заключается в том, сможет ли ваш злоумышленник создать учетную запись пользователя (открытая система регистрации). Если кто-либо (включая вашего злоумышленника) может создать учетную запись (как, например, в stackoverflow), производная соль имеет меньшую ценность. Зачем? Злоумышленник может выполнить обратный инжиниринг соли и, следовательно, источника соли, имея только доступ к базе данных посредством атаки открытым текстом (злоумышленник знает свой собственный пароль и другие сведения).