Cosa invia esattamente ssh durante l'esecuzione della negoziazione chiave?


10

Quando si specifica esplicitamente il file di identità su ssh:

ssh -i ./id_rsa ...

Ho queste righe nella traccia di debug ssh:

debug1: Offering public key: ./id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply

Significa che ssh-generate id_rsacontiene anche esponente pubblico RSA? id_rsail formato sembra piuttosto esplicito che contiene la chiave privata con il suo blocco "BEGIN PRIVATE KEY", quindi "offrire chiave pubblica" deve significare qualcosa di diverso da "inviare la chiave pubblica al server".

MODIFICARE:

Per chiarire, voglio sapere cosa sta succedendo esattamente dietro la linea "offerta chiave pubblica". Se il client possiede più chiavi, verranno offerte tutte al server una per una.


Per aggiungere a quel problema c'è un metodo per il server per verificare se abbiamo una buona chiave prima della sfida. Perché avevo già un server rifiutato la nostra chiave prima ancora di decifrarla. L'errore è lì a causa del nome non ben specificato.
Gopoi,

Risposte:


12

per connetterti a un server SSH e autenticarti con la tua coppia di chiavi pubblica / privata devi prima condividere la tua chiave pubblica con il server.

questo è fatto copiando la chiave pubblica per la chiave privata al server, e l'aggiunta a ~/ssh/authorized_keyssia con copia / incolla, la copia id_rsa.pubper ~/.ssh/authorized_keysil server o con cat id_rsa.pub >> ~/.ssh/authorized_keys, aggiungendo alla lista.

quando ci si connette, il server utilizza la chiave pubblica per firmare una richiesta e il client utilizza la chiave privata id_rsaper decrittografare la sfida, crittografarla nuovamente con il pubblico del server host keye inviarla indietro.

l'host verifica di aver decifrato correttamente la sfida, decrittografando la risposta con la sua chiave privata e il client / host stabilisce una connessione crittografata, basata sui dati condivisi, non sulle chiavi pubbliche / private.

in NO POINT nello scambio c'è la tua chiave privata, o la chiave privata dell'host scambiata o rivelata l'una all'altra. la tua chiave pubblica È memorizzata sul server, ma è per questo che è una chiave PUBBLICA.


Sì, va bene e va bene, ma tutto ciò accade prima che il server identifichi la chiave pubblica con cui crittografare la sfida. Ho diverse chiavi e sono tutte "offerte" al server una per una. Cosa comporta esattamente questo? E sì, mi rendo conto che la chiave privata non viene realmente inviata, probabilmente dovrei rimuovere completamente quella riga dalla domanda. : P
Alex B,

quando specifichi ssh -i keynameche stai dicendo esattamente al tuo client ssh quale chiave intendi utilizzare per connetterti al server. se hai una dozzina di chiavi nel ~/.ssh/tuo client NON eseguirà l'iterazione attraverso ciascuna chiave. cercherà ~/.ssh/id_rsa, ~/.ssh/id_dsapotenzialmente alcuni altri nomi di file che sono codificati nel client, o quale chiave è specificata per quell'host in ~/.ssh/config... per farla breve; il tuo cliente non sta / offrendo / nessuna chiave al server.
cpbills,

quando ti connetti, il tuo / client / decodifica la sfida dal server, quindi cade nel suo elenco di chiavi private locali standardizzate per crittografare la sfida e inviare la risposta. Se la risposta alla sfida ha esito negativo, / può / passare al successivo nome chiave codificato, re-crittografare con / that / chiave privata e riprovare. di nuovo, le tue chiavi, pubbliche e private non sono / condivise / con il server al momento dell'autenticazione dell'accesso.
cpbills,

1
oh, rileggo il tuo commento; host: crittografa la sfida con la chiave host, client: decodifica la sfida con la chiave pub dell'host, client: crittografa la sfida con la chiave privata, host: tentativi di decrittografia della sfida con tutte le chiavi pubbliche elencate ~/.ssh/authorized_keysnell'host sa qual è la sfida e che aspetto ha per, quindi una volta che una chiave pubblica lo sblocca, sa usare quella chiave.
cpbills,

@cpbills, scusate ho dimenticato di dire che ho alcune chiavi da un agente inoltrato, quindi vengono offerte più chiavi (il registro -vvv mostra tutte le offerte, anche se specifico il file di identità).
Alex B,

1

La crittografia a chiave pubblica / privata si basa su un sistema molto semplice:

Si dispone di una chiave pubblica che è capace di fare la crittografia a senso unico, e una chiave privata che è in grado di de crittati. La chiave pubblica può quindi essere assegnata a tutti nel mondo e nessuno sarà in grado di decrittografare i dati crittografati, anche se saranno in grado di crittografare i dati che è possibile decrittografare con la chiave privata.

Quindi la risposta alla tua domanda è "La tua chiave pubblica".


Sì, grazie, so in dettaglio come funziona la crittografia a chiave pubblica, ma voglio conoscere le specifiche del protocollo SSH e il formato della chiave. Sono interessato a sapere se memorizza l'esponente pubblico nel file della chiave privata o no? Per quanto ne so, "offrire la chiave pubblica" può significare anche firmare un nonce con la chiave privata, in modo che il server possa trovare una chiave pubblica corrispondente.
Alex B,

Sì. fa ssh-keygen -y ti darà la chiave pubblica della chiave privata, il contrario non funziona
Mâtt Frëëman

1

Non penso che in questo momento dovrebbe essere effettivamente necessario inviare la chiave pubblica o privata. Una crittografia deve essere eseguita dal client utilizzando la chiave privata su testo normale che è già nota al server. L'host può decrittografare questo messaggio utilizzando la chiave pubblica, sapendo che l'unico che avrebbe potuto crittografarlo correttamente è un client che contiene la chiave privata corrispondente, quindi autenticare il client.

Credo che lo dica Offering public key: ./id_rsaperché utilizza la chiave privata (archiviata ./id_rsa) per eseguire una crittografia in testo normale conosciuta dal server e quindi il server utilizzerà la chiave pubblica per decrittografare questo testo cifrato e confermare che corrisponde al testo normale. Il file della chiave pubblica ./id_rsa.pubnon dovrebbe mai essere necessario al client dopo la generazione della chiave iniziale. Questo è usato solo dal server per la decrittazione.


Sospettavo che succedesse qualcosa del genere, ma volevo alcuni dettagli (ovvero il protocollo di negoziazione della chiave SSH reale). Non sono sicuro del motivo per cui sei stato sottoposto a downgrade.
Alex B,

Mi dispiace che la mia risposta sia stata così agitata. Non ho familiarità con le specifiche della negoziazione della chiave SSH, solo le negoziazioni generali necessarie per l'autenticazione con chiave pubblica. Potrei essere stato votato in negativo per la risposta non specifica.
Trey Hunner,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.