C'è in realtà un modo per autenticare un utente tramite una connessione non protetta: protocollo Secure Remote Password (SRP) . SRP è specificamente progettato per consentire a un client di autenticarsi su un server senza che un utente malintenzionato di Man-in-the-Middle sia in grado di acquisire la password del client o persino rieseguire l'autenticazione per impersonare successivamente il client, indipendentemente dal fatto che l'autenticazione sia riuscita o meno. Inoltre, l'autenticazione di successo con SRP crea una chiave segreta condivisa che sia il client che il server conoscono, ma un MitM no. Questa chiave segreta potrebbe essere utilizzata per la crittografia simmetrica e / o HMAC.
Tuttavia, ci sono un certo numero di limitazioni di SRP:
- L'utente deve essersi registrato in modo sicuro, in quanto il processo di registrazione richiede la trasmissione di materiale equivalente alla password (anche se il server non ha bisogno di memorizzarlo).
- Anche se è sicuro tentare un accesso SRP con un server non attendibile (cioè, non esporterà la tua password a quel server, e sarai in grado di dire che il server non aveva la tua password nella sua database), non è sicuro caricare una pagina web di accesso da un server non affidabile (potrebbe mandare giù una pagina che cattura ogni tuo tasto e lo invia da qualche parte).
- Sebbene l'autenticazione di successo tramite SRP generi una chiave segreta condivisa sicura, il codice per utilizzare effettivamente questa chiave in un'app web dovrebbe essere caricato da un server e un utente malintenzionato potrebbe manomettere quel codice per rubare la chiave simmetrica e fare modifiche alle richieste e alle risposte.
In altre parole, mentre SRP può essere utile in situazioni in cui si ha un client fidato che non ha bisogno di scaricare il codice tramite la connessione non protetta e si dispone anche di un altro modo sicuro per registrare l'utente (s), SRP non è adatto per un'applicazione web. Le app Web scaricano sempre il loro codice dal server, quindi se la connessione al server non è sicura, un MitM (o un altro utente malintenzionato, ad esempio qualcuno che spoofing DNS) può immettere codice dannoso nell'app Web e non c'è nulla che tu, la vittima, può fare al riguardo. Una volta che il codice è lì, può acquisire qualsiasi password o altri dati inseriti, rubare qualsiasi chiave generata e manomettere eventuali richieste inviate o risposte che ricevi senza che tu nemmeno lo sappia.