In che modo l'autenticazione del digest è diversa dall'autenticazione di base oltre all'invio di credenziali come testo normale?
In che modo l'autenticazione del digest è diversa dall'autenticazione di base oltre all'invio di credenziali come testo normale?
Risposte:
La differenza principale è che non richiede l'invio del nome utente e della password attraverso il cavo in testo normale. È anche immune agli attacchi replay, poiché utilizza un numero una tantum dal server.
Il server fornisce al client un numero di utilizzo una tantum (un nonce) che combina con il nome utente, l'ambito, la password e la richiesta URI. Il client esegue tutti questi campi tramite un metodo hash MD5 per produrre una chiave hash.
Invia questa chiave hash al server insieme al nome utente e all'area di autenticazione per tentare di autenticarsi.
Sul lato server viene utilizzato lo stesso metodo per generare un hashkey, solo che invece di utilizzare la password digitata nel browser il server cerca la password prevista per l'utente dal proprio DB utente. Cerca la password memorizzata per questo nome utente, viene eseguito attraverso lo stesso algoritmo e la confronta con ciò che il client ha inviato. Se corrispondono, l'accesso viene concesso, altrimenti può restituire un 401 Non autorizzato (nessun accesso o accesso non riuscito) o un 403 Proibito (accesso negato).
L'autenticazione del digest è standardizzata in RFC2617 . C'è una bella panoramica su Wikipedia :
Puoi pensarlo in questo modo:
Un hash delle credenziali viene inviato in rete.
HA1 = MD5(username:realm:password)
L'unico modo per ottenere l'hash HA1 delle credenziali è conoscere la password. Il server conosce HA1 ma non la password che lo ha generato. Se HA1 fosse noto a un utente malintenzionato, potrebbe entrare nel sistema. Quindi non viene inviato lungo il filo. Un ulteriore hash basato su nonce, ecc. Viene eseguito prima di fare ciò, e questo deve concordare con un calcolo simile fatto sul server. Pertanto, fintanto che il server mantiene HA1 privato, il sistema è sicuro.