Соль рассматривается как общедоступная, прежде всего потому, что хранить ее в секрете не нужно.
Соль в первую очередь состоит в том, чтобы сделать атаки по словарю более трудными / менее практичными.При атаке по словарю злоумышленник хеширует обычные слова из словаря и (если он вообще серьезно) дополняет их такими вещами, как обычные имена.Если он сможет заполучить ваш список хэшированных паролей, он сможет увидеть, соответствует ли какой-либо из них хешу в его списке.Предполагая, что у вас значительное количество пользователей, у него довольно хорошие шансы найти хотя бы одного пользователя.Когда он это делает, он просматривает свой список, чтобы найти, какое слово произвело этот хеш, и теперь он может использовать его, чтобы войти в систему и выдать себя за этого пользователя.
Добавление соли означает, что вместо того, чтобы сделать это один раз, он имеетсделать это один раз для каждой возможной соли.Например, если вы используете 24-битную соль, он должен хэшировать каждое слово в словаре ~ 16 миллионов раз и сохранять результаты всех ~ 16 миллионов хешей.
Просто для аргументации,давайте предположим, что без соли злоумышленнику потребуется 8 часов для хеширования всех слов-кандидатов и 16 мегабайт для хранения результатов (хэши и слова, которые произвели каждое).Далее мы предположим, что хранилище поровну поделено между самими хешами и списком слов / имен / независимо от того, что их произвело.
Используя ту же 24-битную соль, это означает, что его время умножается натот же фактор ~ 16 миллионов.Его хранилище для слов, которые произвели хэши, остается тем же самым, но для самих хешей (снова) умножается на ~ 16 миллионов.По математическим расчетам они рассчитаны примерно на 15 000 лет вычислений и 128 терабайт памяти.
Короче говоря, без соли, атака по словарю доступна почти любому.Я мог легко поверить, что (например) кто-то позволил бы своему компьютеру работать всю ночь, чтобы сделать хэширование, просто чтобы натолкнуть хорошую апрельскую шутку над некоторыми из его коллег (легко поверить, потому что я видел, как это было сделано).
Когда вы приступаете к делу, это все игра чисел: атака по словарю не ставит на то, что у каждого пользователя будет пароль, который легко угадать, достаточно только будет для них найти хотя бы несколько открытых отверстий.Аналогично, обнародование соли допускает несколько более простую атаку, загружая соль для каждого хеша и выполняя отдельные атаки по словарю для каждого, используя известную соль для каждого.Предполагая, что в системе меньше пользователей, чем возможных хеш-значений, это более практичная атака.Тем не менее, он теперь настаивает на том, чтобы атаковать каждый пароль индивидуально, а не использовать один словарь не только для всей системы, но фактически для всех систем, которые он может захотеть атаковать, используя тот же алгоритм хеширования.
В заключение: соль может делать свою работу превосходно, даже если она обнародована.Одна из целей практически любой системы безопасности - минимизировать объем информации, которую необходимо хранить в секрете.Так как соль может работать, даже если она общедоступна, она обычно считается общедоступной.В практической системе вы, конечно, не пытаетесь опубликовать ее злоумышленникам, но вы не должны (в любом случае, не) полагаться на то, что она остается секретной.