PHP хеширование паролей в 2011 году - PullRequest
0 голосов
/ 23 июня 2011

Я поднял этот вопрос, потратив несколько часов на просмотр ряда публикаций на SO в отношении наиболее безопасного способа обработки паролей в PHP / MySQL. Большинство ответов кажутся довольно устаревшими, как и ссылки, на которые люди обращены. Многие рекомендуют md5 и sha-1.

Мы все знаем, что MD5 и SHA-1 больше не стоит использовать из-за того, что они были обращены, а также потому, что существует ряд баз данных, которые создали миллионы строк md5 / sha1. Теперь, очевидно, вы обойдете это с солью, что я собираюсь сделать.

Однако я недавно начал играть с джакузи, которая кажется намного более безопасной и актуальной. Буду ли я прав, думая, что водоворот + соль - это достаточная защита для паролей?

На самом деле я рассматривал что-то вроде этого:

<?php
    $static_salt = 'some_static_salt_string_hard_coded';
    $password = 'some_password_here';
    $salt = 'unique_salt_generated_here';

    $encoded = hash('whirlpool', $static_salt.$password.$salt);
?>

Что ты думаешь? Избыточный или разумный?

Ответы [ 3 ]

3 голосов
/ 23 июня 2011

Это, вероятно, достаточно для большинства приложений.

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

ИМХО, в настоящее время лучшее решение - использовать bcrypt . Он, очевидно, поддерживается в PHP 5.3+, и вот пример того, как его использовать.

1 голос
/ 23 июня 2011

Этого будет достаточно (однако нет смысла в статически жестко закодированной соли). И почему бы не использовать SHA256? Водоворот редко используется.

0 голосов
/ 23 июня 2011

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

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

В конце концов, не имеет значения, насколько сложнаВаш алгоритм хеширования:

  1. при свободном выборе пользователи выбирают неверные, вероятные пароли
  2. пользователи будут использовать один и тот же пароль для разных служб

Еслиэто работает для вас - тогда отлично - но универсального решения не существует.

...