Как Digest Authentication отличается от базовой аутентификации, отличной от отправки учетных данных в виде обычного текста?Что такое дайджест-аутентификация?
ответ
Основное отличие заключается в том, что она не требует отправки имя пользователя и пароль по сети в незашифрованном виде. Он также невосприимчив к повторным атакам, поскольку он использует одноразовый номер с сервера.
Сервер дает клиенту единовременный номер использования (nonce), который он объединяет с именем пользователя, царством, паролем и запросом URI. Клиент запускает все эти поля с помощью метода хеширования MD5 для создания хеш-ключа.
Он отправляет этот хэш-ключ на сервер вместе с именем пользователя и сферой, чтобы попытаться выполнить аутентификацию.
На стороне сервера такой же метод используется для генерации hashkey, только вместо того, чтобы вводить пароль, введенный в браузер, сервер просматривает ожидаемый пароль для пользователя из своей пользовательской базы данных. Он просматривает сохраненный пароль для этого имени пользователя, проходит через тот же алгоритм и сравнивает его с тем, что отправил клиент. Если они совпадают, то предоставляется доступ, в противном случае он может отправить обратно 401 Unauthorized (без входа или неудачного входа в систему) или 403 Запрещено (доступ запрещен).
Дайджест аутентификации standardized in RFC2617. Там в nice overview of it on Wikipedia:
Вы можете думать об этом так:
- Клиент делает запрос
- Клиент получает обратно одноразовый номер с сервера и запрос 401 аутентификации
- клиент отправляет обратно следующий ответ array (username, realm, generate_md5_key (nonce, username, realm, URI, password_given_by_user_to_browser)) (да, это очень упрощено)
- Сервер принимает имя пользователя и область (плюс он знает URI, который запрашивает клиент), и он ks введите пароль для этого имени пользователя. Затем он идет и делает свою собственную версию generate_md5_key (nonce, username, realm, URI, password_I_have_for_this_user_in_my_db)
- Он сравнивает вывод generate_md5(), который он получил с отправленным клиентом, если они соответствуют клиенту, отправил правильный пароль. Если они не совпадают, пароль был ошибочным.
Хорошее объяснение. Имя пользователя & pwd для пользователя Windows? Откуда они созданы? – SoftwareGeek
Они все, что пользователь вводит в браузер. Пароль должен соответствовать тому, что хранился сервер для пароля для этого пользователя. Скорее всего, это не что-то конкретное для этого веб-приложения, а не для вашего пароля Windows. Это очень зависит от способа объединения веб-приложения. –
Этот ответ 6 лет, но я думаю, что все системы, защищенные системой безопасности, хранят пароли в формате соленой хеширования. Существует нет и не должно быть метода получения исходного пароля из базы данных, что делает невозможным авторизацию дайджеста. –
Хеш учетных данных отправляется по кабелю.
HA1 = MD5(username:realm:password)
от клиента к серверу?Не могли бы вы предоставить шаги для взаимодействия? Статья в Википедии хорошая, но мне нужно лучшее объяснение или пример. – SoftwareGeek
Да клиент генерирует хеш-значение и отправляет его на сервер. В статье в Википедии подробно описывается протокол, я предлагаю вам ссылку на эту информацию для получения дополнительной информации. –
Единственный способ получить хэш HA1 учетных данных - это узнать пароль. Сервер знает HA1, но не пароль, который сгенерировал его. Если HA1 был известен злоумышленнику, он мог войти в систему. Поэтому он не отправляется по проводам. Еще один хеш, основанный на nonce и т. Д., Выполняется до этого, и это должно совпадать с аналогичным вычислением, выполненным на сервере. Таким образом, до тех пор, пока сервер сохраняет HA1 private, система защищена.
Это объяснение для аутентификации Digest, где пароль не отправляется в виде обычного текста (что имеет место для Basic Auth) –
- 1. Что такое "?" делать? Что такое __FILE__?
- 2. Что такое трансформация и что такое Transform?
- 3. Что такое структура разработки? Что такое IDE?
- 4. Что такое PHPCI - что такое сборка?
- 5. Что такое скрипка и что такое DL?
- 6. Что такое Dim, что такое Факт?
- 7. Что такое поток? Что такое `initialize`?
- 8. Что такое сжатие, что
- 9. Что такое "??"
- 10. Что такое.
- 11. Что такое большие графики? Что такое анализ больших графов? Что такое большие данные? Что такое большой анализ данных?
- 12. Что такое «Нарисовать что-то»?
- 13. Что такое мыло в пурпуре? что это такое? Что такое использование мыла/xml-RPC-пользователя?
- 14. Что такое последовательная запись и что такое случайная запись
- 15. Что такое синтаксис и что такое использование @ в javascript?
- 16. Google AMP: что такое макет? Что такое контейнер?
- 17. Что такое метод обновления MessageDigest и что такое BASE64Encoder?
- 18. Что такое весенние бобы, что такое использование бобов
- 19. Что такое пулы PHP-FPM и что такое pm.max_children?
- 20. Терминология: что такое маска и что такое флаг
- 21. Что такое угловой 2 Непрозрачный токен и что такое точка?
- 22. Что такое бизнес-объекты и что такое бизнес-логика?
- 23. Что такое temp и что такое использование temp в java?
- 24. Что такое autovalue.shaded или что такое затененная банка?
- 25. Что такое заголовок? В частности, что такое POST @ GET заголовки?
- 26. Что такое структура? И что такое Учение 2?
- 27. Что такое un/managed DLL? Что такое un/управляемый код?
- 28. Что такое preemption/Что такое preemtible ядро? Для чего это?
- 29. Что такое CGI и что такое CGI-скрипты?
- 30. Что такое .NET-архитектура и что такое .NET framework?
Отличное объяснение от @Gumbo прямо здесь: http://stackoverflow.com/a/5288679/591487 – inorganik
Что-то, чего вы НИКОГДА НЕ должны использовать. Не защищает пароль в пути и требует, чтобы сервер хранил пароли в обычном режиме. – CodesInChaos
Digest действительно обеспечивает лучшую безопасность в пути, чем обычная аутентификация для _unencrypted_ трафика, но она слаба. Меньше безопаснее использовать Basic auth в сочетании с SSL/TLS вместо этого, так как вы также можете хранить пароли на сервере зашифрованными. – rustyx