Подтвердить что ты не робот

Хранение паролей портативных (PHPass). Должен ли я использовать их?

Я устанавливаю регистрацию пользователя script (Tank Auth) для моего сайта.

В руководстве по установке говорится:

ПРЕДУПРЕЖДЕНИЕ. По умолчанию библиотека генерирует сильные системные хэши паролей, которые не переносятся. Это означает, что после создания пользователя база данных не может быть сброшена и экспортирована на другой сервер. Такое поведение может также можно изменить в файле конфигурации.

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

4b9b3361

Ответ 1

Задача Auth использует PHPass для хэширования паролей (старая версия, которая не является хорошим знаком, вы можете захотеть обновить в вашей установке). PHPass имеет два режима: портативный и bcrypt.

В зависимости от версии PHP вам не нужно иметь переносные хеши. На PHP 5.3 и выше PHP поставляет свою собственную реализацию bcrypt, если она недоступна в системе. Если на всех ваших серверах есть PHP 5.3 и выше, я настоятельно рекомендую отключить переносные хэши. PHPass "хэши портативных компьютеров" существует, потому что, в зависимости от установленной версии PHP, bcrypt может быть недоступен.

Тем не менее, портативные хеш файлы PHPass хранят соль в своем хеше. Поэтому каждый запуск с одним и тем же паролем отличается.

Кроме того, PHPass использует PHP_VERSION во время генерации этих хэшей * чтобы проверить, поддерживает ли функция md5() с этой версией параметр $rawMode. Если это не так, pack() используется для преобразования шестнадцатеричных данных в двоичные (обратите внимание, что это значительно медленнее, а просто используется $rawMode, поэтому создается ветка).

Опять же, если все ваши серверы работают с PHP 5.3 и выше, я настоятельно рекомендую отключить переносной режим и вместо этого использовать PHPass вместо bcrypt. Поскольку PHP 5.3+ обеспечивает собственную реализацию, когда система недоступна, ваш хэш будет проверяться в разных ОС. Даже если вы отключите портативный режим, PHPass все равно будет достаточно умным, чтобы проверить ваши старые хэши надлежащим образом.

* Строка 131


РЕДАКТИРОВАТЬ:. Для более подробного объяснения, как генерируются хэши в переносном режиме (упрощенный, не использует фактические переменные, найденные в PHPass, но точны). Обратите внимание, что PHPass использует собственную версию кодировки base64.

  • $final = '$P$'

  • $final .= encode64_int($rounds) (от конструктора, минимум 5 на PHP 5+, 3 других)

  • $final .= genSalt() (Соль составляет 6 байтов... 8 байтов в формате "encode64" ).

  • $hash = md5($salt . $password)

  • Для 2 $rounds раз, do $hash = md5($hash . $password)

  • $final = encode64($hash)

Таким образом, конечный хэш по существу таков:

$P$9IQRaTwmfeRo7ud9Fh4E2PdI0S3r.L0
\__________/\____________________/
  \                   \
   \                   \ Actual Hash
    \
     \  $P$   9   IQRaTwmf
        \_/   \   \______/
         \     \      \
          \     \      \ Salt
           \     \ 
            \     \ # Rounds (not decimal representation, 9 is actually 11)
             \
              \ Hash Header