Что такое дайджест-аутентификация? - PullRequest
87 голосов
/ 05 марта 2010

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

Ответы [ 3 ]

142 голосов
/ 05 марта 2010

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

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

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

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

Дайджест-аутентификация стандартизирована в RFC2617 . Вот хороший обзор в Википедии :

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

  1. Клиент делает запрос
  2. Клиент возвращает одноразовый номер с сервера и запрос аутентификации 401
  3. Клиент отправляет обратно следующий массив ответов (имя пользователя, область, generate_md5_key (nonce, имя пользователя, область, 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 (), полученные с отправленным клиентом, если они совпадают с тем, что клиент отправил правильный пароль. Если они не совпадают, отправленный пароль был неверным.
12 голосов
/ 05 марта 2010

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

HA1 = MD5(username:realm:password)

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

1 голос
/ 07 января 2016

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

...