2012-05-25 1 views
2

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

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

Вопрос о хранении соли.

Нужно ли хранить соль в своей колонке в базе данных?

Затем добавьте соль + пароль, и когда дело доходит до входа в систему, вызовите соль и пароль из базы данных, чтобы сделать это.

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

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

ответ

0

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

5

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

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

Я бы порекомендовал, что если вы хотите улучшить систему хэша паролей, вы делаете это правильно, при этом функция хэша работает медленно. В статье password hashes with bcrypt объясняются важные моменты генерации хэша для паролей.

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

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

+1

Как соль не может быть секрет? Если злоумышленник знает соль, он может легко изменить атаку словаря, чтобы включить соль и вуаля! –

+0

@Martins Briedis - Предварительное вычисление всех хэшей определенного словаря обычно называют радужным столом.Злоумышленник не мог использовать уже существующие общедоступные радужные таблицы (просто поиск по хэшированию), потому что радуга должна быть сделана точно для одной конкретной соли (или для оригинального словаря, если соль не использовалась). – martinstoeckli

+0

@Martins Briedis - Забыл упомянуть, что создание радужного стола - это не задача, которую вы делаете за несколько секунд. Когда вы используете медленную хеш-функцию (например, bcrypt), ей нужно много времени, и если вы используете для каждого пароля другую соль, вам нужно много времени для каждого пароля. – martinstoeckli

2

Забудьте MD5 или SHA. Используйте Bcrypt. (Blow Fish Crypt) Поставляется с PHP 5.3 и выше. (crypt method 2a) он более безопасен и медленнее.

При использовании Bcrypt соль хранится вместе с хешем в той же группе. Нет причин для отдельного.

http://php.net/manual/en/function.crypt.php

+0

Так будет phpass - http://www.openwall.com/phpass/ выполнять работу? – Garry

+0

Да PHPass будет работать. Я рекомендую просто использовать собственные PHP-функции выше, если использовать php 5.3 выше – Ray