Что такое дайджест-аутентификация?


чем дайджест-аутентификация отличается от обычной аутентификации, кроме отправки учетных данных в виде обычного текста?

3 75

3 ответа:

основная разница в том, что он не требует отправки имени пользователя и пароля по сети в открытом виде. Он также невосприимчив к replay-атакам, так как использует одноразовый номер с сервера.

сервер дает клиенту одноразовый номер использования (nonce), который он сочетает с именем пользователя, областью, паролем и запросом URI. Клиент запускает все эти поля с помощью метода хэширования MD5 для получения хэш-ключа.

Он отправляет этот хэш-ключ на сервер вместе с именем пользователя и областью для попытки аутентификации.

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

дайджест-проверка подлинности стандартизированы в документе rfc2617. Там есть хороший обзор этого в Википедии:

вы можете думать об этом так:

  1. клиент делает запрос
  2. клиент получает обратно nonce от сервера и 401 запрос Аутентификации
  3. клиент отправляет обратно следующий массив ответов (имя пользователя, область, generate_md5_key(nonce, username, realm, URI, password_given_by_user_to_browser)) (да, это очень упрощенно)
  4. сервер принимает имя пользователя и область (плюс он знает URI, который запрашивает клиент), и он ищет пароль для этого имени пользователя. Затем он идет и делает свою собственную версию generate_md5_key (nonce, username, realm, URI, password_I_have_for_this_user_in_my_db)
  5. он сравнивает вывод generate_md5 (), который он получил с тем, который отправил клиент, если они соответствуют отправленному клиенту верный пароль. Если они не совпадают с паролем ошибся.

хэш учетных данных передается по проводу.

HA1 = MD5(username:realm:password)

в Википедии есть отличная статья на эту тему

единственный способ получить хэш HA1 учетных данных-это знать пароль. Сервер знает HA1, но не пароль, который его сгенерировал. Если HA1 был известен злоумышленнику, он мог войти в систему. Поэтому он не отправляется вниз по проводу. Дальнейший хэш на основе nonce и т. д. делается перед этим, и это должно совпадать с аналогичным расчетом, выполненным на сервере. Таким образом, пока сервер сохраняет HA1 private, система защищена.