Un controllo superficiale di Gmail indica che l'analisi della forza della password viene eseguita sul lato client utilizzando JavaScript. Ho letto il loro .js per un po ', ho deciso che era impenetrabile alle 9:30 del mattino senza caffè e ho guardato il filo con tcpdump mentre invece ho digitato una nuova password. Ogni pressione del tasto non ha attivato il traffico tra il browser e Google, ma ogni volta che la valutazione della password è cambiata (ad esempio, da "troppo breve" a "debole") il traffico era correlato alla modifica del fumetto del piccolo aiuto.
Puoi premere F12 in Chrome mentre sulla loro pagina cambia password e sfogliare tutti i loro JavaScript. Bevi prima il caffè.
Detto questo, le password del World Wide Web sono quasi sempre inviate al server in chiaro, ma idealmente su HTTPS in modo che il wrapper SSL offra sicurezza. Sono in testo semplice nel formato GET o POST, oppure sono codificati (non crittografati ) nell'intestazione Auth di base HTTP. Perché? Gestione delle chiavi.
Il client non ha modo di digitare chiavi per crittografare la password condivisa dal server. L'impostazione di uno richiede o la distribuzione di chiavi segrete ai client N + 1 e il mantenimento della segretezza ... o l'impostazione di un sistema a chiave pubblica. E una volta impostato un sistema a chiave pubblica, devi solo dare un calcio a te stesso e dire "Perché non mi fido del protocollo SSL per cominciare?"
Ora, ecco alcuni valori anomali da considerare:
È possibile che server e client eseguano autenticazione digest . In breve, il server invia una stringa casuale, il client esegue l'hashing della password e lo schiaccia con quella stringa casuale e lo rimanda indietro. Il server deve avere una copia in chiaro della password corretta sul suo lato; esegue lo stesso processo di hash + mash e lo confronta. Ciò è più difficile per un utente malintenzionato di prendere la password sul cavo, ma in genere richiede che il server conosca la password in chiaro (anziché una versione con hash).
BMC Remedy una volta implementato quanto segue: La pagina di accesso conteneva JavaScript che avrebbe scambiato la password - IIRC memorizzava una statica stringa ed eseguirebbe un cifrario di sostituzione sulla password usando quella stringa. Manderebbe la stringa modificata al server, che potrebbe semplicemente invertire la sostituzione. Unico problema? Chiunque può invertire la sostituzione, perché ha seguito un algoritmo statico che è stato pubblicato nel JavaScript nella pagina di accesso. Quindi Remedy-over-HTTP non ha fornito alcuna protezione reale per le password ... che risale al tema originale, di "generalmente ci affidiamo solo al protocollo SSL per proteggere le password in transito"
Infine, sono a conoscenza di un'applicazione - Litle PayPage - che distribuisce JavaScript con un chiave pubblica. PayPage non accetta password, ma i dati della carta di credito, e il codice JavaScript viene crittografato con quella chiave integrata prima che avvolge l'intera richiesta in SSL e l'invio su HTTPS. Lo stesso potrebbe essere fatto con qualsiasi applicazione, essenzialmente risolvendo il problema iniziale che ho elencato di condividere le chiavi con il client - o riprodurre il sistema SSL, fate la vostra scelta. Il vantaggio di questo approccio è che aggira il tradizionale problema di "Cosa succede se ci sono gateway HTTP che eseguono un MITM su SSL?"