2013-06-10 13 views
2

Простите меня, ребята, я совершенно новый для защиты пароля и шифрования ...это безопасно хранить склеп() соль в базе данных для сравнения паролей

У меня возникают проблемы, сравнивая сохраненные пароли, которые были зашифрованы с использованием РНР crypt() (используя метод hash blowfish) на вход пользователя. Один из способов, которым я нашел, я могу сравнить пароли, чтобы хранить соль, используемую во время шифрования, затем шифровать вход пользователя и сравнивать ее с сохраненным паролем.

Это безопасный способ сделать что-то? Или есть лучший (более безопасный) способ сделать это?

Спасибо.

+0

Я думаю, дело в том, что это один из способов шифрования, и как вы сравниваете это единственный способ сделать это. – AlexP

ответ

2

Использование уникальной соли для пользователя - очень хорошая идея.

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

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

+0

+1 для действительно отличного предложения в конце – ranisalt

+0

@ranisalt - Спасибо. Несколько раз мне приходилось реализовывать собственный поставщик безопасности и считал, что это полезный метод. – STLDeveloper

+1

Просто добавьте идею тупика. Вы можете использовать все, что уже хранится в db как соль. Если у вас есть 10 предметов информации, почему бы не выбрать один из них в качестве соли? Чтобы еще больше усложнить ситуацию, вы могли бы выбрать одну часть информации в качестве соли, основанной на другой. Например, пользователи с фамилией A-L используют учетную запись даты, созданную как соль, но пользователи M-Z используют дату рождения в качестве соли. Простая идея, но вы получаете картину. –

1

Посмотрите на эту статью: https://sheriframadan.com/2013/05/password-hashing/

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

3

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

Версия 5.5 PHP будет иметь встроенную поддержку BCrypt, функции password_hash() и password_verify(). На самом деле это всего лишь обертки вокруг функции crypt() и облегчат ее правильное использование. Он заботится о создании безопасной случайной соли и обеспечивает хорошие значения по умолчанию. Для PHP версии 5.3.7 и более поздних версий существует compatibility pack.

Самый простой способ использования этой функции будет:

$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT); 
$isPasswordCorrect = password_verify($password, $existingHashFromDb); 

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

  • Нет связанных вопросов^_^