Как создать безопасную соль?

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

$password = hash('sha512', $password . $salt);

и соль так же, как:

$salt = "xHkosbGhsfT77239GhsvH";

Это буквально стоит в моей конфигурации, так что это нехорошо...

У кого-нибудь есть советы? Любая идея, как это сделать, так что, если кто-то из вас поделиться ею со мной!

Спасибо.


person sushibrain    schedule 20.01.2014    source источник
comment
Идея, я думаю, состоит в том, чтобы иметь уникальную соль для каждого пользователя. Таким образом, вы можете добавить столбец в свою пользовательскую таблицу для его хранения и создать новую соль для каждого регистрирующегося пользователя. Вы можете использовать метку времени, но прочитайте это - может быть лучше использовать случайные соли.   -  person Blorgbeard    schedule 20.01.2014
comment
Соль, основанная только на метке времени, — глупая идея. Соль должна быть случайной. Также: просто используйте собственный API хеширования паролей или библиотека совместимости 5.3.7+.   -  person PeeHaa    schedule 20.01.2014
comment
@PeeHaa, можете ли вы объяснить, почему использование метки времени - такая плохая идея? Кажется, это будет почти уникальным для каждого пользователя. Особенно на уровне школьной системы входа в систему подсчета пользователей.   -  person Blorgbeard    schedule 20.01.2014
comment
Уникальный !== случайный. Вы хотите, чтобы соль была случайной.   -  person PeeHaa    schedule 20.01.2014
comment
Халфер предлагает /s/stupid/non-optimal/ и посылает успокаивающие позитивные лучи @PeeHaa :-).   -  person halfer    schedule 21.01.2014
comment
@PeeHaa, почему ты хочешь, чтобы соль была случайной?   -  person Blorgbeard    schedule 21.01.2014


Ответы (2)


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

person Shahram    schedule 20.01.2014

Вы можете использовать функцию hash_hmac(), которая требует трех аргументов (см. документацию). Я использую это так:

hash_hmac('sha512', $password . $salt, SITEKEY);

sha512 — моя любимая хэш-функция, которая генерирует строки длиной 128 Б.

$password — пароль пользователя.

$salt — это уникальная строка, сгенерированная для каждого пользователя и сохраненная в базе данных в той же строке для пользователя.

соль создается как: bin2hex(openssl_random_pseudo_bytes($bits)) (см. документацию)

SITEKEY – это уникальная строка для каждого сайта, который я создаю.

person Kamil    schedule 20.01.2014