Wie unterscheidet sich die Digest-Authentifizierung von der Standardauthentifizierung, abgesehen vom Senden von Anmeldeinformationen als einfacher Text?
Wie unterscheidet sich die Digest-Authentifizierung von der Standardauthentifizierung, abgesehen vom Senden von Anmeldeinformationen als einfacher Text?
Antworten:
Der Hauptunterschied besteht darin, dass der Benutzername und das Kennwort nicht im Klartext über die Leitung gesendet werden müssen. Es ist auch immun gegen Wiederholungsangriffe, da es eine einmalige Nummer vom Server verwendet.
Der Server gibt dem Client eine einmalige Verwendungsnummer (Nonce), die er mit dem Benutzernamen, dem Realm, dem Kennwort und der URI-Anforderung kombiniert. Der Client führt alle diese Felder über eine MD5-Hashing-Methode aus, um einen Hash-Schlüssel zu erstellen.
Dieser Hash-Schlüssel wird zusammen mit dem Benutzernamen und dem Realm an den Server gesendet, um zu versuchen, sich zu authentifizieren.
Serverseitig wird dieselbe Methode zum Generieren eines Hashkeys verwendet. Statt das im Browser eingegebene Kennwort zu verwenden, sucht der Server das erwartete Kennwort für den Benutzer in seiner Benutzer-DB. Es sucht das gespeicherte Passwort für diesen Benutzernamen, führt denselben Algorithmus durch und vergleicht es mit dem, was der Client gesendet hat. Wenn sie übereinstimmen, wird der Zugriff gewährt, andernfalls kann ein 401 Unauthorized (kein Login oder fehlgeschlagenes Login) oder ein 403 Forbidden (Zugriff verweigert) zurückgesendet werden.
Die Digest-Authentifizierung ist in RFC2617 standardisiert . Es gibt einen schönen Überblick darüber auf Wikipedia :
Sie können sich das so vorstellen:
Ein Hash der Anmeldeinformationen wird über die Leitung gesendet.
HA1 = MD5(username:realm:password)
Die einzige Möglichkeit, den Hash HA1 der Anmeldeinformationen abzurufen, besteht darin, das Kennwort zu kennen. Der Server kennt HA1, aber nicht das Passwort, das es generiert hat. Wenn HA1 einem Angreifer bekannt wäre, könnte es in das System gelangen. Es wird also nicht über den Draht geschickt. Zuvor wird ein weiterer auf Nonce usw. basierender Hash durchgeführt, der mit einer ähnlichen Berechnung auf dem Server übereinstimmen muss. Somit ist das System sicher, solange der Server HA1 privat hält.