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