Генерация пользовательских уникальных ключей hmac для хеширования паролей - PullRequest
0 голосов
/ 16 июля 2011

Для хеширования пароля моего сайта я написал следующую функцию:

public function hash($user) {
    $user_key = hash_hmac('sha512', $user['id'].$user['email'], $this->site_key);
    $password = hash_hmac('sha512', $user['password'], $user_key);
}

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

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

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

Extra : я не использовал соль, потому что я думаю, hmac добавляет предоставленный ключ к данным (как соль), верно?

1 Ответ

3 голосов
/ 16 июля 2011

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

Наконец, я бы посоветовал вам сделать это для паролей ваших пользователей.

<?PHP

$password=$user['password'];
$username=$user['username'];

$salt='usesomesillystringforsalt';
$hashed_password=crypt($password.$username,'$2a$04$usesomesillstringforsalt$');

?>

В этом алгоритме используется Bcrypt, основанный на Blowfish. Это очень надежный алгоритм, к которому обратились носители Gawker после того, как они были взломаны благодаря надежности и полезности для хеширования паролей. crypt Руководство по PHP

Далее, не забудьте заменить часть с надписью usesomesillystringforsalt на что-то другое. Это должно быть 22 цифры соли base64 A-Z, a-z, 0-9 и / и "."

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

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

Как уже говорилось, если у вас есть еще вопросы, не стесняйтесь спрашивать.

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