La mia risposta è che l'uso di coppie di chiavi pubbliche è una cosa molto più intelligente da fare rispetto all'utilizzo di password o elenchi di password. Mi concentrerò su cose che sono non ampiamente conosciute su diverse forme di autenticazione SSH e non vedo altre risposte che le menzionino.
Prima di tutto, devi capire che l'autenticazione dell'utente è un processo diverso e separato rispetto alla creazione del canale sicuro . In parole povere ciò significa che per prima cosa viene utilizzata la chiave pubblica del server (se accettata!) Per costruire il canale SSH sicuro, abilitando la negoziazione di una chiave simmetrica che verrà utilizzata per proteggere la sessione rimanente, abilitare il canale riservatezza, protezione dell'integrità e autenticazione del server.
Dopo il canale è funzionale e sicuro, l'autenticazione dell'utente avviene.
I due modi usuali per farlo sono usando una password o una coppia di chiavi pubbliche.
L'autenticazione basata su password funziona come puoi immaginare: il client invia la sua password tramite il canale protetto, il server verifica che questa sia effettivamente la password dell'utente specifico e consente l'accesso.
Nel caso delle chiavi pubbliche, abbiamo una situazione molto diversa. In questo caso, il server ha la chiave pubblica dell'utente memorizzata. Quello che succede dopo è che il server crea un valore casuale (nonce), lo crittografa con la chiave pubblica e lo invia all'utente. Se l'utente è chi dovrebbe essere, può decodificare la sfida e inviarla al server, che conferma l'identità dell'utente. È il classico modello di risposta alla sfida . (In SSHv2 è effettivamente usato qualcosa di diverso ma concettualmente vicino)
Come puoi immaginare, nel primo caso la password viene effettivamente inviata al server (a meno che SSH non utilizzi la password challenge response), nel secondo la tua chiave privata non abbandona mai il client. Nello scenario immaginario che qualcuno intercetta il traffico SSL ed è in grado di decrittografarlo (utilizzando una chiave privata del server compromessa, o se si accetta una chiave pubblica errata durante la connessione al server) o ha accesso al server o al client, la password sarà noto - con l'autenticazione della chiave pubblica-privata e il modello di risposta alla sfida i tuoi dettagli privati non cadrà mai nella mano dell'attaccante.
Quindi, anche se un server a cui ti colleghi è compromesso, altri severs usi la stessa chiave per non essere!
Ci sono altri vantaggi nell'usare una coppia di chiavi pubbliche: la chiave privata non deve essere archiviata in chiaro nel PC client come suggerito. Questo ovviamente lascia aperto il file della chiave privata al compromesso come farebbe un file di password non crittografato, ma è più facile decrittografarlo (all'accesso) e utilizzare la chiave privata. Dovrebbe essere memorizzato crittografato e devi fornire una passphrase solitamente lunga per decrittografarlo ogni volta che viene utilizzato.
Ovviamente questo significa che dovrai fornire la passphrase lunga ogni volta che ti connetti a un server, per sbloccare la tua chiave privata - Ci sono dei modi per aggirare questo problema. È possibile aumentare l'usuabilità del sistema utilizzando un agente di autenticazione: questo è un software che sblocca le chiavi per la sessione corrente, quando si accede a gnome per esempio o quando si esegue prima ssh nel client, quindi è possibile digita "ssh remote-system-ip" ed esegui l'accesso, senza fornire una passphrase, e fallo più volte fino alla disconnessione dalla sessione.
Quindi, per riassumere, l'utilizzo di coppie di chiavi pubbliche offre una protezione notevolmente maggiore rispetto all'utilizzo di password o elenchi di password che possono essere acquisiti se il client , il server o la sessione sicura è compromessa . Nel caso in cui non si utilizzi una passphrase (che non dovrebbe accadere), le coppie di chiavi pubbliche ancora offrono protezione contro server e sessioni compromesse.