Этот вопрос может противоречить вышеизложенному, но должна ли моя соль быть случайно сгенерированным значением?Если да, то когда это может быть полезно?
Соли должны быть случайными.Их единственное использование состоит в том, чтобы делать атаки методом "грубой силы" на хэши намного дороже.То, что называется «радужной таблицей» (это причудливое имя для базы данных, в которой кто-то заранее хеширует целую кучу возможных паролей и позволяет искать пароли, если вы знаете хэш), позволяет принимать несоленые хеши паролей и переворачивать их.во многих случаях они превращаются в пароли за доли секунды.
Соль среднего размера может экспоненциально увеличить сложность атаки с использованием грубой силы.За каждый бит случайных данных в вашей соли вы удваиваете время, необходимое для атаки с использованием грубой силы.Для каждого уникального значения соли в вашей базе данных злоумышленник должен начать все заново при атаке пароля, защищенного этой солью.
Если бы у вас было 1 КБ случайной соли для каждого пароля пользователя, предварительно вычисленные хэши были бы вне окна.Вы не измените время, которое потребуется для перебора пароля одного пользователя.
Один из способов сделать жизнь злоумышленника труднее - сделать процесс хеширования вычислительно интенсивным (например,5000 раундов sha1 (соль + sha1 (соль + sha1 (соль + пароль)))).Вы должны сделать это только для каждой попытки входа в систему.Атакующий должен сделать это для каждой комбинации соли и пароля, которую он хочет угадать.Вы должны решить, стоит ли это что-то для ваших нужд.Ответ, вероятно, нет.
Редактировать: Помимо паролей, в пользовательской системе, что еще должно быть зашифровано в качестве хорошей практики?Они зашифровывают имена пользователей или что-то еще?
Я параноик, но я бы сказал, что любая информация, которая вам не нужна владельцу сайта, пока пользователь не вошел в систему, должна быть зашифрована с помощьюпроизводная от пароля пользователя.Таким образом, у злоумышленников нет доступа, потому что у вас нет доступа.
Например, для системы обработки онлайн-заказов вам может понадобиться их почтовый адрес, имя и последний заказ в незашифрованном виде, но их заказистория и любимый цвет могут быть зашифрованы паролем их учетной записи.
Обратите внимание, что если вы сделаете это, и они потеряют свой пароль, защищенная информация также будет потеряна.
2nd Edit:Что такое односторонний хэш?Я имею в виду, технически, я не могу перепроектировать мой исходный код?Возможно, это плохой вопрос, потому что я мало знаю об одностороннем хешировании.
Хеш - это метод для систематического отбрасывания информации.Допустим, вы начинаете со строки и производите "srflcdos", отбрасывая все, кроме каждого четвертого символа.Текст, который я «хешировал», мог бы быть: «Копье, если рыба лежит спокойно. Не сидите!», Или это может быть: «Суперкалифрагистическое явление».Невозможно доказать в любом случае.
Криптографические хеши делают намного больше микширования и других преобразований наряду с выбрасыванием, чтобы сделать их более безопасными для небольших объемов входных данных и избежать утечки любых фактов ввсе о входных данных.В качестве примера небезопасного хэша, если вы знаете, что всякий раз, когда вход содержит букву A, 12-битный хэш равен 1, то вы предоставляете информацию об исходном тексте, и результат не является криптографически безопасным хешем.
Принцип заключается в том, что вы не можете провести обратный инжиниринг процесса, если между каждым преобразованием вы выбрасываете информацию, жизненно важную для обращения предыдущего преобразования.Сумма MD5 выдает 128 бит вывода независимо от того, введены вы в 1 бит или 12 петабайт информации.Очевидно, что вы не можете сжать 12 петабайт в 128 бит, поэтому информация явно выбрасывается в процессе вычисления хэша.