Quando ti connetti al server sbagliato, questo dovrebbe innescare un avvertimento sul lato client molto evidente, perché il server sembra utilizzare una chiave distinta dalla chiave che stava usando nelle sessioni precedenti. Il client ricorda le chiavi dei server. Per un classico client OpenSSH , l'avviso ha il seguente aspetto:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
Naturalmente, questo si basa sul fatto che il tuo client si sia già connesso almeno una volta al server giusto; in caso contrario, il client non saprà anticipatamente la chiave del server corretta.
Supponendo che tu abbia fatto "clic-through" l'avviso (cioè modificato il tuo .ssh/known_hosts
per aggirarlo), allora sei connesso al server sbagliato. Quando si utilizza l'autenticazione basata su chiave, il client calcola una firma digitale su una stringa che contiene il "key hash di scambio", un valore specifico della sessione ottenuto dal meccanismo di scambio delle chiavi attraverso una funzione hash; il server verifica la firma per quanto riguarda la chiave pubblica del client previsto (in .ssh/authorized_keys
).
In nessun modo la chiave privata del client viene mai rivelata al server. Inoltre, l'inclusione dell'hash di scambio delle chiavi in quello che è firmato impedisce al server ricevente (quello sbagliato / falso) di riutilizzare la firma per impersonare l'utente sul server giusto. Pertanto, la chiave privata del tuo cliente è sicura; non è necessario cambiarlo.
(Il meccanismo di autenticazione del client basato sulla chiave è descritto in sezione 7 di RFC 4252 .)