Sto cercando di capire come scambiare le chiavi dell'utente con un server.
Forse durante la registrazione un applet JS genera una coppia di chiavi per l'utente. Queste chiavi sarebbero utilizzate per firmare richieste successive dall'utente al server, quindi il server ha bisogno di una copia della chiave pubblica dell'utente da associare all'account dell'utente.
Ma l'invio della chiave pubblica al server è soggetto agli attacchi del MITM - se un cattivo intenzionato sufficientemente motivato voleva mettersi nel mezzo, catturare la chiave pubblica sul suo cammino verso il server e sostituirla con una chiave per la quale controlla la chiave segreta.
Parte della soluzione sembra essere l'invio della chiave pubblica da parte dell'agente solo tramite un canale crittografato, ad esempio TLS. Ma sembra che con le applicazioni basate su browser, l'onere sia ancora molto all'utente di essere sia istruito e sveglio abbastanza da rendersi conto quando la loro sessione non è con il server giusto a cui dovrebbe essere connesso. In particolare, il nostro cattivo motivato potrebbe creare qualcosa che sembra autentico e credibile, ad esempio
httpS://certificate_server_acme.com
di cui avrebbe il controllo. Il nostro utente potrebbe non rendersi conto che DOVREBBE collegarsi solo a, ad esempio, httpS://certificates.acme.com
Sospetto che si tratti solo di "certificati autofirmati". Le password non risolvono il problema. La verifica della chiave di un utente tramite un messaggio di posta elettronica non è fattibile a meno che gli utenti non possano confrontare e verificare una chiave e il nostro malintenzionato motivato non possa manomettere i messaggi di posta elettronica sulla strada per l'utente.
O c'è qualcosa, forse una funzionalità di OpenID, che può essere utilizzata?