Другие ответы, по-видимому, не учитывают ваше недопонимание темы, поэтому здесь идет речь:
Два различных варианта использования соли
Я видел много уроков, предлагающих использовать соль следующим образом:
$hash = md5($salt.$password)
[...]
Другое использование, которое я видел, находится в моей системе Linux. В / etc / shadow хешированные пароли хранятся вместе с солью.
Вы всегда должны хранить соль с паролем, потому что для проверки того, что пользователь ввел в вашу базу паролей, вы должны объединить ввод с солью, хэшировать его и сравнить с сохраненный хеш.
Безопасность хеша
Теперь кто-то с радужным столом мог бы поменять хэш и выдать ввод "foobar".
[...]
, поскольку известно, что обратный хеш te5SBM.7C25fFDu6bIRbX содержит "foo".
Невозможно обратить хеш как таковой (по крайней мере, в теории). Хеш "foo" и хеш "saltfoo" не имеют ничего общего. Изменение хотя бы одного бита на входе криптографической хеш-функции должно полностью изменить вывод.
Это означает, что вы не можете создать радужную таблицу с общими паролями, а затем «обновить» ее солью. С самого начала нужно принимать во внимание соль.
Это и есть причина того, почему вам прежде всего нужен радужный стол. Поскольку вы не можете получить пароль из хэша, вы предварительно вычисляете все хэши наиболее вероятных используемых паролей, а затем сравниваете ваши хэши с их хэшами.
Качество соли
Но скажи $salt=foo
"foo" было бы крайне плохим выбором соли. Обычно вы используете случайное значение, закодированное в ASCII.
Кроме того, у каждого пароля есть своя собственная соль, отличающаяся (надеюсь) от всех других солей в системе. Это означает, что злоумышленник должен атаковать каждый пароль индивидуально, а не надеяться, что один хэшей соответствует одному из значений в его базе данных.
Атака
Если хакер каким-то образом смог достать этот файл, я не вижу, для чего служит соль,
Атака радужной таблицы всегда требуется /etc/passwd
(или какая база данных паролей используется), или как бы вы сравнили хеши в радужной таблице с хешами реальных паролей?
Что касается цели: допустим, злоумышленник хочет создать радужную таблицу для 100 000 часто используемых английских слов и типичных паролей (подумайте «секретно»). Без соли ей пришлось бы предварительно вычислить 100 000 хешей. Даже с традиционной солью UNIX из 2 символов (каждый из 64 вариантов: [a–zA–Z0–9./]
) ей придется вычислять и хранить 4 096 000 000 хешей ... настоящее улучшение.