Как Digest Authentication отличается от базовой аутентификации, отличной от отправки учетных данных в виде обычного текста?
Что такое дайджест-аутентификация?
Ответ 1
Основное отличие состоит в том, что он не требует отправки имени пользователя и пароля через провод в виде открытого текста. Он также невосприимчив к повторным атакам, поскольку он использует одноразовый номер с сервера.
Сервер предоставляет клиенту единовременный номер использования (nonce), который он объединяет с именем пользователя, царством, паролем и запросом URI. Клиент запускает все эти поля с помощью метода хеширования MD5 для создания хеш-ключа.
Он отправляет этот хэш-ключ на сервер вместе с именем пользователя и сферой, чтобы попытаться выполнить аутентификацию.
На стороне сервера тот же метод используется для генерации hashkey, только вместо того, чтобы использовать пароль, введенный в браузер, сервер просматривает ожидаемый пароль для пользователя из своей пользовательской БД. Он просматривает сохраненный пароль для этого имени пользователя, проходит через тот же алгоритм и сравнивает его с тем, что отправил клиент. Если они совпадают, то предоставляется доступ, в противном случае он может отправить обратно 401 Unauthorized (без входа или неудачного входа в систему) или 403 Запрещено (доступ запрещен).
Аутентификация дайджеста стандартизована в RFC2617. Там хороший обзор этого в Википедии:
Вы можете думать об этом так:
- Клиент делает запрос
- Клиент возвращает несекс с сервера и запрос проверки подлинности 401
- Клиент отправляет обратно следующий массив ответов (имя пользователя, realm, generate_md5_key (nonce, username, realm, URI, password_given_by_user_to_browser)) (да, это очень упрощено)
- Сервер принимает имя пользователя и область (плюс он знает URI, который запрашивает клиент), и он ищет пароль для этого имени пользователя. Затем он идет и делает свою собственную версию generate_md5_key (nonce, username, realm, URI, password_I_have_for_this_user_in_my_db)
- Он сравнивает вывод generate_md5(), который он получил с отправленным клиентом, если он соответствует клиенту, который отправил правильный пароль. Если они не совпадают, отправленный пароль был неправильным.
Ответ 2
Хеш учетных данных отправляется по проводу.
HA1 = MD5(username:realm:password)
Ответ 3
Единственный способ получить хэш HA1 учетных данных - это знать пароль. Сервер знает HA1, но не пароль, который сгенерировал его. Если HA1 был известен злоумышленнику, он мог войти в систему. Поэтому он не отправляется по проводам. Еще один хеш, основанный на nonce и т.д., Выполняется до этого, и это должно совпадать с аналогичным вычислением, выполненным на сервере. Таким образом, до тех пор, пока сервер сохраняет HA1 private, система защищена.