В работе у нас есть две конкурирующие теории солей. В продуктах, над которыми я работаю, используется что-то вроде имени пользователя или номера телефона для добавления хэша. По сути, то, что отличается для каждого пользователя, но легко доступно для нас. Другой продукт случайным образом генерирует соль для каждого пользователя и изменяется каждый раз, когда пользователь меняет пароль. Затем соль зашифровывается в базе данных.
У меня вопрос, а нужен ли второй подход? Я могу понять с чисто теоретической точки зрения, что это более безопасно, чем первый подход, но как насчет точки зрения практичности. Прямо сейчас, чтобы аутентифицировать пользователя, соль должна быть незашифрована и применена к информации для входа.
Поразмыслив над этим, я просто не вижу реального повышения безопасности от такого подхода. Изменение соли с учетной записи на учетную запись по-прежнему делает чрезвычайно трудным попытку кого-либо подобрать алгоритм хеширования, даже если злоумышленник знал, как быстро определить, что это было для каждой учетной записи. Это происходит при условии, что пароли достаточно надежны. (Очевидно, что найти правильный хеш для набора паролей, где все они состоят из двух цифр, значительно проще, чем найти правильный хеш для паролей, состоящих из 8 цифр). Я ошибаюсь в своей логике или что-то мне не хватает?
EDIT: Хорошо , так вот почему я думаю , что это действительно спорный вопрос , чтобы зашифровать соль. (дай мне знать, на правильном ли я пути).
В следующем объяснении мы предположим, что пароли всегда состоят из 8 символов, а соль - 5, и все пароли состоят из строчных букв (это просто упрощает математику).
Наличие разной соли для каждой записи означает, что я не могу использовать одну и ту же радужную таблицу (фактически, технически я мог бы, если бы у меня была таблица достаточного размера, но давайте пока проигнорируем это). Насколько я понимаю, это настоящий ключ к разгадке, потому что для взлома каждой учетной записи мне приходится изобретать колесо, так сказать, для каждой из них. Теперь, если я знаю, как применить правильную соль к паролю для генерации хеша, я бы сделал это, потому что соль действительно просто увеличивает длину / сложность хешированной фразы. Поэтому я бы сократил количество возможных комбинаций, которые мне нужно было бы сгенерировать, чтобы «знать», что у меня есть пароль + соль, с 13 ^ 26 до 8 ^ 26, потому что я знаю, в чем состоит соль. Теперь это упрощает, но по-прежнему очень сложно.
Итак, зашифруйте соль. Если я знаю, что соль зашифрована, я бы не стал пытаться сначала ее расшифровать (при условии, что я знаю, что она имеет достаточный уровень шифрования). Я бы проигнорировал это. Вместо того, чтобы пытаться выяснить, как его расшифровать, возвращаясь к предыдущему примеру, я бы просто создал большую радужную таблицу, содержащую все ключи для 13 ^ 26. Незнание, что соль определенно замедлит меня, но я не думаю, что это добавило бы монументальной задачи попытаться сначала взломать шифрование соли. Вот почему я не думаю, что оно того стоит. Мысли?
Вот ссылка, описывающая, как долго пароли продержатся при атаке методом грубой силы: http://www.lockdown.co.uk/?pg=combi