Could someone clarify if this is correct?
Sì , è corretto che la password sia nota al server in testo normale. RFC 4252, sezione 8 specifica "Password Authentication" per SSH e scrive (liberamente citato):
Si noti che [...] la password in chiaro viene trasmessa nel pacchetto [...].
Volevo anche fornire una risposta, non sulla domanda in sé, ma su
Can you design a protocol which doesn't send the server the password or values equal to the password?
La risposta è Sì .
Dovresti assicurarti che il tuo protocollo faccia quanto segue:
- (più parte dell'implementazione) L'utente deve avere alcuni mezzi per confermare che non stanno dicendo la password al server. Il protocollo più intelligente non ha senso se il server può bypassarlo visualizzando un testo che può ottenere il contenuto. Questo è un problema se l'applicazione è solo un terminale remoto, e l'autenticazione sta già accadendo durante questa "modalità terminale remoto", o se il server può "falsificare" la connessione senza inserire una password, e quindi visualizzarne la sua. Un altro esempio potrebbe essere un sito Web con un modulo html. L'autenticità della finestra di dialogo "popup pop up" è stata progettata pensando a questo problema.
- Dovresti utilizzare un protocollo di risposta alle sfide come SCRAM o SRP . Se la tua registrazione della password è progettata in modo da non fornire una chiave al server (o ti fidi del server al momento della registrazione, come nell'esempio), entrambi non forniscono valori al server che possono utilizzare per accedere ad altri server con la stessa password. Per SCRAM, i tuoi sali devono essere unici per server, SRP ti esonera da tale dovere.
- Devi utilizzare la crittografia insieme a Associazione canali tra il tuo livello di crittografia e il tuo livello di risposta alle sfide. Questo renderà i server infetti non in grado di giocare "man in the middle" a un server di destinazione per la parte di autenticazione della connessione, quindi fare il loro malvagio business dopo di esso. SRP supporta questo per la sua natura come un protocollo di scambio chiave e lo SCRAM RFC ufficiale ha anche il supporto per il binding del canale.
Tuttavia, questa è una discussione prevalentemente teorica. Dovresti usare le chiavi ssh ovunque possibile , perché offrono una protezione brute-force molto migliore.