Was ist der Unterschied zwischen Digest- und Basisauthentifizierung?

Antworten:

194

Die Digest-Authentifizierung kommuniziert Anmeldeinformationen in verschlüsselter Form, indem eine Hash-Funktion angewendet wird auf: den Benutzernamen, das Kennwort, einen vom Server bereitgestellten Nonce-Wert, die HTTP-Methode und den angeforderten URI.

Während die Standardauthentifizierung eine nicht verschlüsselte Base64-Codierung verwendet.

Daher sollte die Standardauthentifizierung im Allgemeinen nur verwendet werden, wenn die Sicherheit der Transportschicht bereitgestellt wird, z. B. https.

Siehe RFC-2617 für alle wichtigen Details.

Andy
quelle
1
Wie wird die Basisauthentifizierung nicht verschlüsselt? Ich habe diese Website verwendet, um den Benutzernamen und das Passwort zu entschlüsseln. base64decode.org
Dot Freelancer
65
Codierung und Verschlüsselung sind nicht dasselbe. Die Tatsache, dass Sie die Anmeldeinformationen auf dieser Site dekodieren können, zeigt, dass sie nicht verschlüsselt sind.
Andy
@Andy Gibt es einen Unterschied zwischen Digest-Authentifizierung und kryptografischer Authentifizierung? Oder beziehen sie sich auf dasselbe? Vielen Dank.
user224567893
1
@Andy was meinst du mit "Anmeldeinformationen dekodieren"? Hashed Credentials können nicht entschlüsselt werden ...
Alexander Suraphel
8
Richtig, und die Basisauthentifizierung verwendet keine Hash-Anmeldeinformationen. Sie sind base64-codiert.
Andy
111

HTTP Basic Access Authentication

  • SCHRITT 1 : Der Client fordert Informationen an und sendet einen Benutzernamen und ein Kennwort im Klartext an den Server
  • SCHRITT 2 : Der Server antwortet mit den gewünschten Informationen oder einem Fehler

Bei der Standardauthentifizierung wird die Base64- Codierung (keine Verschlüsselung) zum Generieren unserer kryptografischen Zeichenfolge verwendet, die die Informationen zu Benutzername und Kennwort enthält. HTTP Basic muss nicht über SSL implementiert werden, aber wenn Sie dies nicht tun, ist es überhaupt nicht sicher. Ich werde also nicht einmal die Idee haben, es ohne zu benutzen.

Vorteile:

  • Es ist einfach zu implementieren, sodass Ihre Client-Entwickler weniger Arbeit zu erledigen haben und weniger Zeit für die Bereitstellung benötigen, sodass Entwickler möglicherweise eher Ihre API verwenden möchten
  • Im Gegensatz zu Digest können Sie die Kennwörter auf dem Server in einer beliebigen Verschlüsselungsmethode wie bcrypt speichern, um die Sicherheit der Kennwörter zu erhöhen
  • Es ist nur ein Aufruf an den Server erforderlich, um die Informationen abzurufen. Dadurch ist der Client etwas schneller als komplexere Authentifizierungsmethoden

Nachteile:

  • SSL läuft langsamer als einfaches HTTP, daher sind die Clients etwas langsamer
  • Wenn Sie keine Kontrolle über die Clients haben und den Server nicht zur Verwendung von SSL zwingen können, verwendet ein Entwickler möglicherweise kein SSL, was ein Sicherheitsrisiko darstellt

Zusammenfassend : Wenn Sie die Kontrolle über die Clients haben oder sicherstellen können, dass sie SSL verwenden, ist HTTP Basic eine gute Wahl. Die Langsamkeit des SSL kann durch die Geschwindigkeit, mit der nur eine Anfrage gestellt wird, aufgehoben werden

Syntax der Basisauthentifizierung

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-Digest-Zugriffsauthentifizierung Die
Digest-Zugriffsauthentifizierung verwendet die Hashing-Methoden (dh Digest-Mittel, die in kleine Stücke geschnitten werden), um das kryptografische Ergebnis zu generieren. Die HTTP Digest-Zugriffsauthentifizierung ist eine komplexere Form der Authentifizierung, die wie folgt funktioniert:

  • SCHRITT 1 : Ein Client sendet eine Anfrage an einen Server
  • SCHRITT 2 : Der Server antwortet mit einem speziellen Code (a genannt)dh n umber nur einmal verwendet ), eine andere Zeichenfolge, die den Realm darstellt (ein Hash) und den Client zur Authentifizierung auffordert
  • SCHRITT 3 : Der Client antwortet mit dieser Nonce und einer verschlüsselten Version des Benutzernamens, des Passworts und des Realms (ein Hash).
  • SCHRITT 4 : Der Server antwortet mit den angeforderten Informationen, wenn der Client-Hash mit seinem eigenen Hash aus Benutzername, Kennwort und Realm übereinstimmt, oder wenn nicht, mit einem Fehler

Vorteile:

  • Es werden keine Benutzernamen oder Kennwörter im Klartext an den Server gesendet, wodurch eine Nicht-SSL-Verbindung sicherer wird als eine HTTP-Basisanforderung, die nicht über SSL gesendet wird. Dies bedeutet, dass kein SSL erforderlich ist, wodurch jeder Anruf etwas schneller wird

Nachteile:

  • Für jeden erforderlichen Aufruf muss der Client 2 ausführen, wodurch der Prozess etwas langsamer als bei HTTP Basic ist
  • HTTP Digest ist anfällig für einen Man-in-the-Middle-Sicherheitsangriff, was im Grunde bedeutet, dass es gehackt werden könnte
  • HTTP Digest verhindert die Verwendung der starken Kennwortverschlüsselung, was bedeutet, dass die auf dem Server gespeicherten Kennwörter gehackt werden können

Zusammenfassend ist HTTP Digest von Natur aus anfällig für mindestens zwei Angriffe, während ein Server, der eine starke Verschlüsselung für Kennwörter mit HTTP Basic über SSL verwendet, diese Sicherheitsanfälligkeiten weniger wahrscheinlich gemeinsam nutzt.

Wenn Sie jedoch keine Kontrolle über Ihre Clients haben, können diese versuchen, eine Standardauthentifizierung ohne SSL durchzuführen, was viel weniger sicher ist als Digest.

RFC 2069 Digest Access-Authentifizierungssyntax

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

RFC 2617 Digest Access-Authentifizierungssyntax

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

Quelle und Beispiel

In Postman sieht wie folgt aus:

Geben Sie hier die Bildbeschreibung ein

Hinweis:

  • Das Basic- und das Digest-Schema sind der Authentifizierung unter Verwendung eines Benutzernamens und eines Geheimnisses gewidmet.
  • Das Bearer-Schema ist der Authentifizierung mithilfe eines Tokens gewidmet.
Premraj
quelle
1
Könnten Sie auf Ihrem Webserver nicht einfach für alle http-Anforderungen zu https umleiten, selbst wenn Sie keine Kontrolle über die Clients haben?
10cool
Mehr denke ich darüber nach mehr ich sehe Ihren Standpunkt jedoch. Angenommen, sie senden ihre Anmeldeinformationen über http und gelangen zu Ihrer Site, könnten Sie umleiten, aber wenn sie auf eine bösartige Site stoßen, können Sie nicht helfen.
10cool
3
Warum können Sie mit Digest Ihr Kennwort vor dem Speichern in der Datenbank nicht verschlüsseln und beim Abrufen entschlüsseln?
Papiro
Obwohl die ausgewählte Antwort näher an der Frage liegt, gefällt mir diese Antwort, da sie für uns Uneingeweihte Vor- und Nachteile hat.
coder0h1t
1
@ 10cool Sobald Sie die Website mit http aufgerufen haben, ist es zu spät ... leider. Der Benutzer: Pass wurde bereits auf der Leitung gelöscht, auch wenn Sie kurz danach zu httpS weitergeleitet werden.
Julien
41

Lassen Sie uns den Unterschied zwischen den beiden HTTP- Authentifizierungen mit Wireshark(Tool zum Analysieren von gesendeten oder empfangenen Paketen) sehen.

1. HTTP-Basisauthentifizierung

Basic

Sobald der Client den richtigen Benutzernamen eingibt: Kennwort , wie vom Webserver angefordert, überprüft der Webserver in der Datenbank, ob die Anmeldeinformationen korrekt sind, und gewährt Zugriff auf die Ressource.

So werden die Pakete gesendet und empfangen:

Geben Sie hier die Bildbeschreibung ein Im ersten Paket füllt der Client die Anmeldeinformationen mit der POST- Methode in der Ressource aus. lab/webapp/basicauthIm Gegenzug antwortet der Server mit dem http-Antwortcode 200 ok , dh der Benutzername: Passwort war korrekt.

Detail des HTTP-Pakets

Jetzt, in der AuthorizationKopfzeile zeigt es , dass es Grund Autorisierung durch eine zufällige Zeichenfolge gefolgt .Dieses String ist die codierte (Base64) Version der Anmeldeinformationen admin:aadd(einschließlich Doppelpunkt).

2. HTTP- Digest-Authentifizierung (RFC 2069)

Bisher haben wir gesehen, dass die Basisauthentifizierung Benutzername: Passwort im Klartext über das Netzwerk sendet. Die Digest- Authentifizierung sendet jedoch einen HASH des Passworts unter Verwendung des Hash-Algorithmus.

Hier sind Pakete, die die vom Client gestellten Anforderungen und die Antwort vom Server zeigen.

Verdauen

Sobald der Client die vom Server angeforderten Anmeldeinformationen eingibt, wird das Kennwort responsemithilfe eines Algorithmus in ein Kennwort konvertiert und dann an den Server gesendet. Wenn die Serverdatenbank dieselbe Antwort wie vom Client gegeben hat, gewährt der Server den Zugriff auf die Ressource , sonst ein 401 Fehler.

Detailliertes Digest-Auth-Paket In dem obigen Authorization, der responsewird Zeichenkette berechnet die Werte der Verwendung von Username, Realm, Password, http-method, URIund Noncewie in der Abbildung dargestellt:

Antwortalgorithmus (Doppelpunkte sind enthalten)

Daher können wir sehen, dass die Digest-Authentifizierung sicherer ist, da sie Hashing (MD5-Verschlüsselung) beinhaltet. Daher können die Paket-Sniffer-Tools das Kennwort nicht abhören, obwohl in Basic Auth das genaue Kennwort auf Wireshark angezeigt wurde.

BoRRis
quelle
6
Dies sollte die akzeptierte Antwort sein, da sie informativer und ein großes Lob für die Charts ist.
Mak
Aber in Wireshark schnüffeln Sie nur Pakete mit dem http-Protokoll? Was ist, wenn Sie das https-Protokoll verwenden?
JohnRDOrazio
Wireshark entscheidet nicht, ob er Http oder Https schnüffeln soll. Es ist der Webserver, der mit Protokollen konfiguriert ist.
BoRRis
1
Unsinn. Basic Auth darf nur über HTTPS verwendet werden. Der eigentliche Vergleich ist also Basic Auth über HTTPS mit Digest Auth über HTTP. Da Websites heutzutage den gesamten Datenverkehr verschlüsseln, können Sie Basic Auth auch über HTTPS verwenden.
Gili
-3

Bei der Standardauthentifizierung wird die Base 64-Codierung zum Generieren einer kryptografischen Zeichenfolge verwendet, die die Informationen zu Benutzername und Kennwort enthält.

Die Digest Access-Authentifizierung verwendet die Hashing-Methoden, um das kryptografische Ergebnis zu generieren

Chetan Chaphekar
quelle
1
Die Base 64-Codierung ist nicht kryptografisch.
Thomas Sobieck