Phpass - опасность невозможности доступа ко всем паролям? - PullRequest
0 голосов
/ 24 июня 2011

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

$pwdHasher = new PasswordHash(8, FALSE);
$hash = $pwdHasher->HashPassword( $password );

, а затем проверить его так:

$checked = $pwdHasher->CheckPassword($password, $hash); 

, то это означает, что логически пароли должны храниться таким образомтак как они могут быть прочитаны только на определенном компьютере (в противном случае кто-то может просто использовать функцию «CheckPassword» на другом компьютере, чтобы получить пароль).Как Phpass делает это?

Если мне нужно переместить веб-сайт на новый сервер в будущем, не вызовет ли это проблемы?Как безопасно сделать резервную копию моей базы данных, чтобы в случае серьезного сбоя сервера я мог восстановить все пароли?(Я что-то упускаю из виду?)

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

Редактировать 2 - Черт, я упустил что-то очевидное.Функция сравнения только проверяет данный пароль на соответствие хешированному и возвращает значение true или false - фактически вам никогда не нужно иметь доступ к самому паролю.Извиняюсь за глупость!

Ответы [ 2 ]

2 голосов
/ 24 июня 2011

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

$2a$08$sssssssssssssssssssssshhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

Это означает, что все, что вам нужно для проверки пароля, хранится в этой строке.

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

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

CheckPassword() не не возвращает исходный пароль.CheckPassword просто проверяет, хэшируется ли переданный пароль с переданным хэшем.Если это так, возвращается true, если нет, возвращается false.Вы можете прочитать статью phpass «Как управлять пользователями и паролями приложения PHP» .Это дает очень подробное описание того, как работает хеширование паролей в целом и в phpass в частности.

...