В чем разница между дайджестом и базовой аутентификацией?

Ответы:

197

Дайджест-аутентификация передает учетные данные в зашифрованном виде, применяя хеш-функцию к: имени пользователя, паролю, предоставленному одноразовому значению серверу, методу HTTP и запрошенному URI.

В то время как базовая аутентификация использует незашифрованную кодировку base64.

Следовательно, базовую аутентификацию обычно следует использовать только в тех случаях, когда обеспечивается безопасность транспортного уровня, например https.

См. RFC-2617 для всех кровавых деталей.

Энди
источник
1
как базовая аутентификация не зашифрована? я использовал этот сайт для декодирования имени пользователя и пароля. base64decode.org
Dot Freelancer
65
Кодирование и шифрование - это не одно и то же. Тот факт, что вы можете декодировать учетные данные с помощью этого сайта, показывает, что они не зашифрованы.
Энди
@ Энди Есть ли разница между дайджест-аутентификацией и криптографической аутентификацией? Или они имеют в виду одно и то же? Спасибо.
user224567893
1
@ И что ты имеешь в виду под «расшифровывать учетные данные»? Хешированные учетные данные не могут быть расшифрованы ...
Александр Сурафель
8
Правильно, и базовая аутентификация не использует хешированные учетные данные, они закодированы в base64.
Энди
114

Базовая аутентификация доступа HTTP

  • ШАГ 1 : клиент делает запрос информации, отправляя имя пользователя и пароль на сервер в виде простого текста
  • ШАГ 2 : сервер отвечает желаемой информацией или ошибкой

Базовая аутентификация использует кодирование base64 (не шифрование) для генерации нашей криптографической строки, которая содержит информацию об имени пользователя и пароле. HTTP Basic не должен быть реализован через SSL, но если вы этого не сделаете, он вообще не является безопасным. Так что я даже не собираюсь развлекать идею использовать его без.

Плюсы:

  • Его просто реализовать, поэтому у ваших клиентов-разработчиков будет меньше работы и меньше времени на доставку, поэтому разработчики с большей вероятностью захотят использовать ваш API
  • В отличие от Digest, вы можете хранить пароли на сервере любым способом шифрования, который вам нравится, например, bcrypt, делая пароли более безопасными
  • Для получения информации требуется всего один вызов на сервер, что делает клиента немного быстрее, чем могли бы быть более сложные методы аутентификации.

Минусы:

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

Подводя итоги - если у вас есть контроль над клиентами или вы можете гарантировать, что они используют SSL, HTTP Basic является хорошим выбором. Медлительность SSL может быть устранена скоростью только одного запроса

Синтаксис базовой аутентификации

Value = username:password
Encoded Value =  base64(Value)
Authorization Value = Basic <Encoded Value> 
//at last Authorization key/value map added to http header as follows
Authorization: <Authorization Value>

Аутентификация доступа к
дайджесту HTTP Для аутентификации доступа к дайджесту используются методы хеширования (т. Е. Дайджест-средства, разрезанные на мелкие кусочки) для получения криптографического результата. Аутентификация доступа к дайджесту HTTP - более сложная форма аутентификации, которая работает следующим образом:

  • ШАГ 1 : клиент отправляет запрос на сервер
  • ШАГ 2 : сервер отвечает специальным кодом (называетсято есть п умбра используется только один раз ), другая строка , представляющая область (а) и хэш просит клиент для проверки подлинности
  • ШАГ 3 : клиент отвечает этим одноразовым номером и зашифрованной версией имени пользователя, пароля и области (хеш)
  • ШАГ 4 : сервер отвечает запрошенной информацией, если хеш клиента совпадает со своим собственным хешем имени пользователя, пароля и области, или если нет, если возникла ошибка

Плюсы:

  • Имена пользователей и пароли не отправляются на сервер в виде открытого текста, что делает соединение без SSL более безопасным, чем HTTP-запрос Basic, который не отправляется через SSL. Это означает, что SSL не требуется, что делает каждый вызов немного быстрее

Минусы:

  • Для каждого необходимого вызова клиент должен сделать 2, делая процесс немного медленнее, чем HTTP Basic
  • HTTP Digest уязвим к атаке «человек посередине», что означает, что его можно взломать
  • HTTP Digest предотвращает использование надежного шифрования паролей, что означает, что пароли, хранящиеся на сервере, могут быть взломаны

Таким образом , дайджест HTTP по своей природе уязвим как минимум для двух атак, в то время как сервер, использующий надежное шифрование паролей с HTTP Basic по SSL, с меньшей вероятностью разделяет эти уязвимости.

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

Синтаксис аутентификации доступа к дайджесту RFC 2069

Hash1=MD5(username:realm:password)
Hash2=MD5(method:digestURI)
response=MD5(Hash1:nonce:Hash2)

Синтаксис аутентификации доступа к дайджесту RFC 2617

Hash1=MD5(username:realm:password)
Hash2=MD5(method:digestURI)
response=MD5(Hash1:nonce:nonceCount:cnonce:qop:Hash2)
//some additional parameters added 

источник и пример

В Почтальон выглядит следующим образом:

введите описание изображения здесь

Примечание:

  • Эти схемы Основной и Digest предназначены для аутентификации , используя имя пользователя и секрет.
  • Схема Bearer предназначена для аутентификации с использованием токена.
Premraj
источник
1
На вашем веб-сервере вы могли бы не просто перенаправить на https для всех запросов http, даже если у вас нет контроля над клиентами?
10
Чем больше я думаю об этом, тем больше вижу вашу точку зрения. Предполагая, что они отправляют свои учетные данные через http и попадают на ваш сайт, вы можете перенаправить их, но если они попадут на вредоносный сайт, вы не сможете помочь.
10
3
Почему с помощью Digest вы не можете зашифровать свой пароль перед сохранением в базе данных, а при его извлечении расшифровать?
Папиро
Хотя выбранный ответ ближе к вопросу, мне нравится этот ответ, поскольку он дает плюсы и минусы для нас, непосвященных.
coder0h1t
1
@ 10cool, как только вы попали на сайт с http, уже слишком поздно ... к сожалению. user: pass уже отправлено в открытом виде, даже если вы сразу после этого перенаправлены на httpS.
Жюльен
41

Давайте посмотрим на разницу между двумя HTTP- аутентификациями, использующими Wireshark(Инструмент для анализа отправленных или полученных пакетов).

1. Http Basic Authentication

основной

Как только клиент вводит правильное имя пользователя: пароль по запросу веб-сервера, веб-сервер проверяет в базе данных правильность учетных данных и предоставляет доступ к ресурсу.

Вот как пакеты отправляются и принимаются:

введите описание изображения здесь В первом пакете Клиент заполняет учетные данные, используя метод POST на ресурсе -. lab/webapp/basicauthВ ответ сервер отвечает обратно с http-кодом ответа 200 ok , т. Е. Имя пользователя: пароль были правильными.

Деталь HTTP-пакета

Теперь в Authorizationзаголовке показано, что это базовая авторизация, за которой следует некоторая случайная строка. Эта строка является закодированной (Base64) версией учетных данных admin:aadd(включая двоеточие).

2 Http Digest Authentication (rfc 2069)

До сих пор мы видели, что базовая аутентификация отправляет имя пользователя: пароль в виде открытого текста по сети. Но дайджест-аутентификация отправляет HASH -пароль, используя алгоритм Hash.

Вот пакеты, показывающие запросы, сделанные клиентом и ответ от сервера.

дайджест

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

Подробный пакет аутентификации дайджеста В приведенном выше описании Authorization, то responseстрока вычисляется с использованием значений Username, Realm, Password, http-method, URIи , Nonceкак показано на изображении:

Алгоритм ответа (двоеточия включены)

Следовательно, мы можем видеть, что дайджест-аутентификация является более безопасной, поскольку она включает хеширование (шифрование MD5), поэтому инструменты анализатора пакетов не могут прослушивать пароль, хотя при базовой аутентификации точный пароль был показан на Wireshark.

Borris
источник
6
Это должен быть принятый ответ, так как он более информативен и заслуживает чарта.
Мак
Но в wireshark вы только нюхаете пакеты, используя протокол http? Что если вы использовали протокол https?
JohnRDOrazio
Wireshark не решает, нюхать Http или Https. Это веб-сервер, на котором настроены протоколы.
BoRRis
1
Ерунда. Обычная аутентификация предназначена только для использования по HTTPS. Таким образом, реальное сравнение - Basic Auth по HTTPS и Digest Auth по HTTP. Поскольку в настоящее время веб-сайты шифруют весь свой трафик, вы также можете использовать Basic Auth over HTTPS.
Гили
-3

Базовая аутентификация использует base 64 Encoding для генерации криптографической строки, которая содержит информацию об имени пользователя и пароле.

Digest Access Authentication использует методологию хеширования для генерации криптографического результата.

Четан Чапекар
источник
1
кодировка base 64 не является криптографической.
Томас Собек