2009-12-10 2 views
9

Хорошо, я пытаюсь понять причину использования соли.Какова цель «соли» при хешировании?

Когда пользователь регистрируется, я генерирую уникальную соль для него/нее, которую я храню в БД. Затем я использую его и пароль с SHA1. И когда он/она входит в систему, я перехватываю его с помощью sha1($salt.$password).

Но если кто-то взломает мою базу данных, он может видеть хешированный пароль и соль.

Это сложнее взломать, чем просто хэшировать пароль с солью? Я не понимаю ...

Извините, если я тупой ...

+0

Подумайте только об этом: поскольку каждый пользователь имеет другую соль, комбинация соли + пароль уникальна, даже если пароль отсутствует. – Gumbo

+0

Соль делает ваш хэш гораздо лучше, вот почему. –

+0

см. Http://stackoverflow.com/search?q=salt – VolkerK

ответ

8

Если вы не используете соль, то злоумышленник может предвычисление пароль < -> хэш в автономном режиме базы данных, даже до того как они разбиты на ваш сервер. Добавление соли массивно увеличивает размер этой базы данных, что затрудняет выполнение такой атаки.

Кроме того, как только они сломались, они могут угадать обычно используемый пароль, хеш-код, а затем проверить все пароли в базе данных для соответствия. С другой солью для каждого пользователя они могут атаковать только один пароль за раз.

В Википедии есть статья о salts in cryptography.

+0

Это особенно забавно, если вы постоянно солите и re-hash несколько раз. Конечно, для пользователя вход в систему медленнее, но это невозможно, даже зная соль, чтобы попытаться перевести пароль. – StrixVaria

+0

@StrixVaria: Как бы повторная конкатенация соли и повторного хеширования была бы иной, чем просто конкатенирование соли несколько раз? Я не думаю, что это обеспечит вам дополнительную безопасность. –

+0

Только из-за дополнительного времени, которое потребуется для каждой «угадывания» в попытке грубой силы. Если вы хэш х раз, он занимает х раз дольше за догадку. По мере того как x становится большим, количество попыток, которые могут быть предприняты, уменьшается. – StrixVaria

1

Другой целью использования соли является удостовериться, что два пользователя с одним и тем же паролем не будут иметь одинаковый хэш в таблице пользователей (при условии, что их соль не совпадает). Однако комбинация соли и пароля может привести к тому же «строкам» или хешу в конце, и хеш будет точно таким же, поэтому обязательно используйте комбинацию соли и пароля, где две разные комбинации не будут приводят к тому же хешу.

1

Если злоумышленник создает giant table of hash values for plaintext passwords, использование соли не позволяет ему использовать один и тот же стол, чтобы взломать более одного пароля. Нападающему приходилось создавать отдельную таблицу для каждой соли. Обратите внимание, что для того, чтобы это действительно эффективно работало, ваша соль должна быть довольно длинной. В противном случае предварительно вычисленная таблица злоумышленника, скорее всего, будет содержать хэш-код salt + password.