Как аутентифицировать и подтвердить пароль? - PullRequest
0 голосов
/ 23 октября 2011

Я даже не знаю, какие вопросы задавать здесь.Моя постановка проблемы проста: мне нужно хранить пароль в БД с помощью соли, проверять введенный пароль по сохраненному паролю и аутентифицировать пароль, используя случайное слово вызова, всякий раз, когда пользователь пытается войти в систему.Я использую php / javascript.

Пытаясь понять это, проблема, с которой я сталкиваюсь, заключается в том, что если я передам слово для вызова в html-форме, то хеширую введенный пароль с этим словом, я могуаутентифицировать пароль на сервере, но я не могу отделить пароль от контрольного слова, чтобы я мог проверить его по соленому паролю в БД.Если я отправляю пароль на сервер в открытом виде или хэширую его без контрольного слова, я могу проверить его, но теперь я не могу его достоверно подтвердить.

Я думаю, что мне нужен какой-то двусторонний алгоритм, такЯ могу зашифровать его ключом, а затем аутентифицировать ключ при проверке пароля.Как мне это сделать?или если это невозможно сделать, то что мне делать?

Ответы [ 2 ]

2 голосов
/ 23 октября 2011

Шифрование пароля с помощью сценариев на стороне клиента, как правило, плохая идея. Правильный способ сделать это - использовать SSL.

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

0 голосов
/ 23 октября 2011
  1. Чтобы сохранить пароль, сгенерируйте случайную соль.Магазин HASH(password+salt) и salt.(Либо сервер, либо клиент могут выполнить это вычисление.)

  2. Чтобы выполнить аутентификацию, сервер ищет salt и HASH(password+salt).Затем он генерирует случайный запрос и отправляет соль и вызов клиенту.

  3. На клиенте запросите пароль у пользователя.Вычислите:HASH( HASH(password+salt) + challenge).Отправьте его на сервер.

  4. На сервере у вас уже есть HASH(password+salt), а у вас challenge.Таким образом, вы также можете вычислить:HASH( HASH(password+salt) + challenge).Сравните это с тем, что отправил вам клиент.Если они совпадают, пароль правильный.

Обратите внимание, что это уязвимо для атаки MITM, поэтому его следует использовать через соединение, которое само защищено от MITM, напримерSSL-соединение.

...