Qual è la differenza tra l'autenticazione Digest e Basic?


Risposte:


197

Digest Authentication comunica le credenziali in forma crittografata applicando una funzione hash a: il nome utente, la password, un valore nonce fornito dal server, il metodo HTTP e l'URI richiesto.

Considerando che l'autenticazione di base utilizza non crittografato base64 .

Pertanto, l'autenticazione di base dovrebbe essere generalmente utilizzata solo quando viene fornita la sicurezza del livello di trasporto come https.

Vedi RFC-2617 per tutti i dettagli cruenti.


1
come l'autenticazione di base non è crittografata? Ho usato questo sito per decodificare il nome utente e la password dati base64decode.org
Dot Freelancer

65
La codifica e la crittografia non sono la stessa cosa. Il fatto che tu sia in grado di decodificare le credenziali utilizzando quel sito dimostra che non sono crittografate.
Andy

@Andy C'è una differenza tra Autenticazione Digest e Autenticazione crittografica? O si riferiscono alla stessa cosa? Grazie.
user224567893

1
@Andy cosa intendi con "decodifica le credenziali"? Le credenziali
tratteggiate

8
Giusto, e l'autent di base non usa le credenziali con hash, sono codificate in base64.
Andy,

114

Autenticazione dell'accesso di base HTTP

  • PASSAGGIO 1 : il client effettua una richiesta di informazioni, inviando un nome utente e una password al server in testo semplice
  • PASSAGGIO 2 : il server risponde con le informazioni desiderate o un errore

L'autenticazione di base utilizza la codifica base64 (non la crittografia) per generare la nostra stringa crittografica che contiene le informazioni di nome utente e password. HTTP Basic non deve essere implementato su SSL, ma se non lo fai, non è affatto sicuro. Quindi non ho nemmeno intenzione di intrattenere l'idea di usarlo senza.

Professionisti:

  • È semplice da implementare, quindi i tuoi sviluppatori client avranno meno lavoro da fare e impiegheranno meno tempo per la consegna, quindi gli sviluppatori potrebbero avere maggiori probabilità di voler utilizzare la tua API
  • A differenza di Digest, puoi archiviare le password sul server in qualsiasi metodo di crittografia ti piaccia, come bcrypt, rendendo le password più sicure
  • È necessaria una sola chiamata al server per ottenere le informazioni, rendendo il client leggermente più veloce di quanto potrebbero essere metodi di autenticazione più complessi

Contro:

  • L'SSL è più lento dell'esecuzione dell'HTTP di base, quindi i client sono leggermente più lenti
  • Se non hai il controllo dei client e non puoi forzare il server a utilizzare SSL, uno sviluppatore potrebbe non utilizzare SSL, causando un rischio per la sicurezza

In breve : se hai il controllo dei client o puoi assicurarti che utilizzino SSL, HTTP Basic è una buona scelta. La lentezza dell'SSL può essere annullata dalla velocità di effettuare una sola richiesta

Sintassi dell'autenticazione di base

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>

Autenticazione dell'accesso digest Digest L'autenticazione dell'accesso digest
Digest utilizza le metodologie di hashing (ovvero digest significa suddiviso in piccoli pezzi) per generare il risultato crittografico. L'autenticazione dell'accesso al digest HTTP è una forma più complessa di autenticazione che funziona come segue:

  • PASSAGGIO 1 : un client invia una richiesta a un server
  • PASSO 2 : il server risponde con un codice speciale (chiamato aie n umber usato solo una volta ), un'altra stringa che rappresenta il realm (un hash) e chiede al client di autenticarsi
  • PASSAGGIO 3 : il client risponde con questo nonce e una versione crittografata di nome utente, password e realm (un hash)
  • PASSAGGIO 4 : il server risponde con le informazioni richieste se l'hash client corrisponde al proprio hash di nome utente, password e realm o in caso di errore

Professionisti:

  • Nessun nome utente o password viene inviato al server in testo normale, rendendo una connessione non SSL più sicura di una richiesta HTTP Basic non inviata su SSL. Ciò significa che SSL non è richiesto, il che rende ogni chiamata leggermente più veloce

Contro:

  • Per ogni chiamata necessaria, il client deve effettuare 2, rendendo il processo leggermente più lento di HTTP Basic
  • HTTP Digest è vulnerabile a un attacco di sicurezza man-in-the-middle che sostanzialmente significa che potrebbe essere hackerato
  • Il Digest HTTP impedisce l'uso della crittografia avanzata delle password, il che significa che le password archiviate sul server potrebbero essere violate

In sintesi , HTTP Digest è intrinsecamente vulnerabile ad almeno due attacchi, mentre un server che utilizza una crittografia avanzata per le password con HTTP Basic su SSL ha meno probabilità di condividere queste vulnerabilità.

Se non hai il controllo sui tuoi clienti, tuttavia, potrebbero tentare di eseguire l'autenticazione di base senza SSL, che è molto meno sicuro di Digest.

Sintassi di autenticazione dell'accesso digest Digest RFC 2069

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

RFC 2617 Sintassi di autenticazione dell'accesso digest

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

fonte ed esempio

In Postman appare come segue:

inserisci qui la descrizione dell'immagine

Nota:

  • Gli schemi Basic e Digest sono dedicati all'autenticazione usando un nome utente e un segreto.
  • Lo schema Bearer è dedicato all'autenticazione mediante un token.

1
Sul tuo server web potresti non reindirizzare a https per tutte le richieste http anche se non hai il controllo dei client?
Raffreddare il

Più ci penso più vedo comunque il tuo punto. Supponendo che inviano lì le credenziali tramite http e accedano al tuo sito, potresti reindirizzare, ma se colpiscono un sito dannoso non puoi aiutare.
Raffreddare il

3
Perché, con Digest, non è possibile crittografare la password prima di archiviarla nel database e, quando viene estratta, decrittografarla?
papiro,

Sebbene la risposta selezionata sia più vicina alla domanda, mi piace questa risposta poiché offre vantaggi e svantaggi per noi non iniziati.
coder0h1t,

1
@ 10cool una volta che hai colpito il sito Web con http, è troppo tardi ... purtroppo. l'utente: il pass è già stato inviato in chiaro sul filo, anche se si viene reindirizzati a httpS subito dopo.
Julien,

41

Vediamo la differenza tra le due autenticazioni HTTP usando Wireshark(Strumento per analizzare i pacchetti inviati o ricevuti).

1. Autenticazione di base HTTP

Di base

Non appena il client digita il nome utente corretto : password , come richiesto dal server Web, il server Web controlla nel database se le credenziali sono corrette e consente l'accesso alla risorsa.

Ecco come vengono inviati e ricevuti i pacchetti:

inserisci qui la descrizione dell'immagine Nel primo pacchetto il Cliente riempie le credenziali usando il metodo POST nella risorsa lab/webapp/basicauth. In cambio il server risponde con il codice di risposta http 200 ok , cioè il nome utente: password erano corretti.

Dettaglio del pacchetto HTTP

Ora, Authorizationnell'intestazione mostra che si tratta dell'autorizzazione di base seguita da una stringa casuale. Questa stringa è la versione codificata (Base64) delle credenziali admin:aadd(compresi i due punti).

2 Http Digest Authentication (rfc 2069)

Finora abbiamo visto che l'autenticazione di base invia username: password in chiaro sulla rete. Ma l'Aut Digest invia un HASH della password usando l'algoritmo Hash.

Ecco i pacchetti che mostrano le richieste fatte dal client e la risposta dal server.

digerire

Non appena il client digita le credenziali richieste dal server, la password viene convertita in responseutilizzando un algoritmo e quindi inviata al server, se il database del server ha la stessa risposta fornita dal client, il server dà l'accesso alla risorsa , altrimenti un errore 401 .

Pacchetto di digest digest dettagliato In quanto sopra Authorization, la responsestringa viene calcolato usando i valori di Username, Realm, Password, http-method, URIe Noncecome illustrato nell'immagine:

Algoritmo di risposta (i due punti sono inclusi)

Quindi, possiamo vedere che l'autenticazione Digest è più sicura in quanto comporta l'hashing (crittografia MD5), quindi gli strumenti di sniffer di pacchetti non possono annusare la password sebbene in Auth di base la password esatta sia stata mostrata su Wireshark.


6
Questa dovrebbe essere la risposta accettata in quanto è più istruttiva e complimenti per le classifiche.
mak

Ma in WireShark stai solo annusando i pacchetti usando il protocollo http? E se steste usando il protocollo HTTPS?
Giovanni Orazio,

WireShark non decide se annusare Http o Https. È il web server configurato con i protocolli.
BoRRis

1
Senza senso. L'autorizzazione di base deve essere utilizzata solo su HTTPS. Quindi il vero confronto è Auth di base su HTTPS rispetto a Digest Auth su HTTP. Visto che al giorno d'oggi i siti Web crittografano tutto il loro traffico, potresti anche utilizzare Basic Auth su HTTPS.
Gili

-3

L'autenticazione di base usa la codifica base 64 per generare una stringa crittografica che contiene le informazioni di nome utente e password.

L'autenticazione con accesso digest utilizza le metodologie di hashing per generare il risultato crittografico


1
la codifica base 64 non è crittografica.
Thomas Sobieck,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.