Qualche tempo fa c'era un grande fuzz su Firesheep: ascoltando il traffico wifi si può rubare la tua sessione di login, il che è molto brutto perché ora qualcuno può ad es. invia e-mail per tuo conto. Alcuni hanno affermato che l'utilizzo di SSL per l'intero sito era l'unica soluzione. Ma non pensavo che fosse vero: se riesci a mantenere la password o l'equivalente memorizzata sul lato client, e non lo invii mai al server, ma piuttosto autentichi ogni richiesta che fai con questa password, nessuno può impersonare te (a meno che loro conoscono la tua password). Ad esempio quando fai una richiesta HTTP req
, invece fai la richiesta r + "?hmac=HMAC(password, req)"
per provare che conosci la password.
Poi ho trovato un documento su un protocollo chiamato SessionLock , che è mirato a risolvere lo stesso problema. È un po 'diverso da quello che ho descritto sopra, e ho alcune domande a riguardo.
Innanzitutto, perché stabiliscono un segreto condiviso su SSL o utilizzando il protocollo Diffie-Hellman, quando esiste già un segreto condiviso disponibile (la password o una versione hash della password)?
In secondo luogo, riguardo alla versione che usa Diffie-Hellman si dice:
If the browser loses its secret, it can re-perform a Diffie-Hellman key exchange with the server, using a number of XMLHttpRequest calls.
Qualcuno può spiegare come funziona? Presumibilmente il lato client non ha salvato la password, e ha anche perso il segreto condiviso. Quindi, per quanto posso vedere, il lato client non sa nulla, eppure è in grado di ristabilire un segreto condiviso che può essere usato per fare cose autenticate. Un attaccante non sarebbe in grado di fare esattamente la stessa cosa? Cosa mi manca?