Соль традиционно хранится в виде префикса к хешированному паролю. Это уже дает знать любому злоумышленнику, имеющему доступ к хешу пароля. Использование имени пользователя в качестве соли или не влияет на эти знания и, следовательно, не повлияет на безопасность одной системы.
Однако использование имени пользователя или любого другого контролируемого пользователем значения в качестве соли уменьшит межсистемную безопасность, поскольку пользователь, имеющий одинаковые имя пользователя и пароль в нескольких системах, использующих один и тот же алгоритм хеширования паролей, в итоге получит одинаковый хэш пароля в каждой из этих систем. Я не считаю это существенной обязанностью, поскольку я, как злоумышленник, пробовал бы пароли, которые, как известно, целевая учетная запись использовала в других системах, сначала, прежде чем пытаться каким-либо другим способом взломать учетную запись. Одинаковые хэши только сообщают мне заранее, что известный пароль будет работать, они не облегчат реальную атаку. (Тем не менее, обратите внимание, что быстрое сравнение баз данных учетных записей предоставит список целей с более высоким приоритетом, так как он скажет мне, кто есть, а кто не использует пароли повторно.)
Большая опасность этой идеи состоит в том, что имена пользователей обычно используются повторно - почти на любом сайте, который вы хотите посетить, будет, например, учетная запись пользователя с именем "Dave", а "admin" или "root" встречаются еще чаще - что сделало бы создание радужных таблиц, ориентированных на пользователей с этими общими именами, намного проще и эффективнее.
Оба этих недостатка могут быть эффективно устранены путем добавления второго значения соли (либо фиксированного, либо скрытого, либо открытого как стандартная соль) к паролю перед его хэшированием, но в этот момент вы можете просто использовать стандартную энтропию соль в любом случае вместо работы с именем пользователя в него.
Отредактировано для добавления: Многие люди говорят об энтропии и важна ли энтропия в соли. Это так, но не по той причине, что большинство комментариев к нему, кажется, думают.
По общему мнению, энтропия важна, так что злоумышленнику будет трудно угадать соль. Это неверно и, по сути, совершенно не имеет значения. Как уже несколько раз указывали разные люди, атаки, на которые будет влиять соль, могут совершать только те, у кого есть база данных паролей, а кто-то с базой паролей может просто посмотреть, в чем состоит соль каждой учетной записи. Будь это угадано или нет, не имеет значения, когда вы можете просто найти его.
Причина, по которой энтропия важна, состоит в том, чтобы избежать кластеризации солевых значений. Если соль основана на имени пользователя, и вы знаете, что большинство систем будет иметь учетную запись с именем «root» или «admin», тогда вы можете создать радужную таблицу для этих двух солей, и она взломает большинство систем. Если, с другой стороны, используется случайная 16-битная соль и случайные значения имеют примерно равномерное распределение, то вам нужна радужная таблица для всех 2 ^ 16 возможных солей.
Речь идет не о том, чтобы помешать злоумышленнику узнать, что такое соль индивидуального аккаунта, а о том, чтобы не дать им большую, жирную цель одной соли, которая будет использоваться на значительной части потенциальных целей.