2015-08-05 2 views
3

В настоящее время я работаю над проектом на PHP, и мне интересно, как сделать мою систему безопасной как можно сейчас. В настоящее время я использую password_hash для хеш-паролей, а затем сохраняю их в своей базе данных. Что мне было интересно: пересматривает ли и повторно сохраняет новый соленый хэш в базу данных, повышая безопасность, или это просто иллюзия?Переписывает ли случайно соленый пароль при повышении безопасности входа?

+2

Да, это так. Зачем? Посмотрите, например, здесь: https://crackstation.net/hashing-security.htm – syck

+0

Благодарим вас за отзыв, я обязательно его реализую! –

+0

@syck: в какой части этой статьи вы ссылаетесь на людей? – halfer

ответ

5

Я не думаю, что это увеличит безопасность, нет. У вас есть два сценария риска:

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

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

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

Именно поэтому мы рекомендуем людям не использовать пароли повторно, а вместо этого им следует использовать надежные пароли, хранящиеся в диспетчере паролей. Еще лучше, если люди могут использовать другое имя пользователя и/или другую электронную почту для каждой службы. Кстати, это удивительно простой в использовании электронной почты на обслуживание: если вы на GMail с адресом [email protected], просто сделать это:

[email protected] 

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

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

+1

не говоря уже о том, что они могут отправлять фальшивые электронные письма с сбросом пароля, когда люди нажимают на вредоносную ссылку. – Tschallacka

+0

Хорошая точка @ Майкл, в этот момент это скорее игра! – halfer

+2

Я всегда думаю о самом простом решении, и на самом деле самым простым решением является просто попросить людей их пароли. 37% людей просто передадут свои пароли по телефону, если вы притворитесь, что работаете в компании, которой они являются. И в вашем сценарии вы знаете веб-сайт, брендинг и автоматический формат электронной почты, который компания отправляет ... так что давайте упростим для клиентов, зарегистрируем подобный домен для чтения, чтобы обманывать его, отправлять клиентов там в одном окружении и перенаправить их на исходный сайт с данными входа в систему. так просто ... – Tschallacka

2

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

Поскольку пароль будет таким же, и только соль будет изменена, взломщик с доступом к хешам может использовать грубую силу с одинаковой стоимостью. Изменение соли не улучшит безопасность, соль не секрет, она полностью выполняет свою работу, даже если она известна. Скрытие или изменение не добавляет никакой ценности (скрытие затруднено и есть лучшие методы, чтобы добавить секрет, чем скрыть соль).

2

Прежде всего, я не специалист по криптографии. У меня был класс криптографии в университете, но это не делает меня экспертом.

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

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

Однако, если пароль не изменяется в течение длительного времени, он может быть хэширован с использованием алгоритма хеширования, который был хорош во время хэширования, но сейчас он беден. PHP has built-in functions especially for password hashing since PHP 5.5.

Рекомендуемый способ работы объясняется на веб-сайте PHP, но это сводится к следующему: используйте password_verify для проверки пароля, используйте password_hash для шифрования пароля. Используйте password_needs_rehash, чтобы проверить, не зашифрован ли пароль с помощью безопасного хэша. Если это не так, переигрывайте или попросите пользователя изменить его (в зависимости от политики безопасности).

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