2016-01-27 7 views
3

Я задавал себе этот вопрос дюжину раз.Действительно ли нужна парольная соль PHP?

Действительно ли пароль соли необходим?

Я не нашел хорошую литературу по этому вопросу.

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

Кроме того, с точки зрения кисти, если я запрещаю IP, существует ли какая-либо причина для хранения солей?

+2

Вы действительно не должны использовать свои собственные соли в хэшах паролей, и вам действительно нужно использовать встроенные функции PHP (http://jayblanchard.net/proper_password_hashing_with_PHP.html) для защиты паролей. Если вы используете версию PHP менее 5.5, вы можете использовать 'password_hash()' [пакет совместимости] (https://github.com/ircmaxell/password_compat). –

+2

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

+1

Да, они помогают. Да, даже если база данных нарушена. Да, даже если вы запретите IP. Да, они нужны. https://en.wikipedia.org/wiki/Salt_(cryptography) – ceejayoz

ответ

6

Да, вы должны всегда использовать соли. К счастью, PHP довольно умный. От this article:

Если вы используете параметры по умолчанию для функции password_hash()PHP будет генерировать случайные соли для каждого пароля как это хешируется. Случайная соль - дополнительный уровень безопасности, который делает его чрезвычайно трудным для взлома любых паролей. Даже если два или более пользователя используют один и тот же пароль, каждый из их хэшей будет отличаться.

Это избавляет вас от необходимости генерировать соль и оставляет тяжелый подъем до PHP. Элемент проверки, password_verify(), использует случайную соль, помещенную в хэш, чтобы иметь возможность протестировать данный пароль.

Из документов для password_verify():

Обратите внимание, что password_hash()возвращает алгоритм, стоимость и соль в качестве части хэше. Поэтому вся информация, необходимая для проверки хэша, включена в нее. Это позволяет проверить функцию проверки хэша, не требуя отдельного хранилища для информации о соле или алгоритме.

+0

Как 'password_verify' извлекает' password_hash' без дополнительной информации, поступающей из пароля напрямую? – PhyCoMath

+0

Обновить ответ @GjertIngarGjersund. Если вы прочитаете статью, вы получите лучшую картину. –

+0

Благодарим вас за ответ :) – PhyCoMath

1

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

3

do необходимо соль, потому что несостоявшийся хэш слишком легко взломать (используя rainbow tables).

Во-первых, несоленые хеши приводят к большему количеству столкновений. Если два пароля используют baseball в качестве пароля, взломать один достаточно, чтобы взломать оба. Если обе соленые, так что один становится baseball#sd7#$j, а один - baseballL4&$h1, это не работает.

Во-вторых, пароль, такой как baseball или даже *4kB$l!h_', будет легко отменить, используя радужные столы, если он не солен. Это потому, что легко создать радужный стол, охватывающий все пароли до определенной длины. Если правильно соленое, то *4kB$l!h_' может быть превращено в *4kB$l!h_'H4Sj$8)@80-+2nm:W[oa}u#*4$lNamA{ или что-то еще абсурдно долгое. Создание радужного стола для этого намного сложнее.

С PHP, сделайте вашу жизнь проще и просто используйте password_hash().Что бы вы ни делали, не сворачивайте свои собственные алгоритмы безопасности, особенно в отношении хранения паролей. Вы будет получить сожжены.

Для получения дополнительной информации см. Why are salted hashes more secure?. Вы также можете провести некоторое время с OWASP's Password Storage Cheat Sheet и это PHP Security Cheat Sheet.

1

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

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

Как вы писали, соль не секрет. Чтобы получить один пароль, злоумышленник все равно мог бы создать таблицу радуги, используя эту известную соль. Проблема в том, что ему понадобится построить второй стол радуги для второго пароля, потому что он использовал другую соль. Другими словами, первый стол радуги нельзя использовать повторно, чтобы найти другие пароли.

Построение радужного стола, чтобы получить только один пароль, не имеет смысла, проще грубой силы, пока вы не найдете совпадение, вычисление остальной части радужного стола бесполезно, так как вы не можете его повторно использовать. Вот почему мы говорим, что уникальные соли предотвращают атаки радужного стола, потому что жестокое форсирование быстрее, чем работа с радужными столами.

+0

Это лучший ответ. –

Смежные вопросы