it-swarm.dev

Riutilizzo di chiavi private / pubbliche

Ho account su diversi siti di terze parti: Bitbucket, Bluehost, ecc.

Da quello che ho raccolto, è pratica comune usare una coppia di chiavi per tutti [id_rsa, id_rsa.pub], ma solo per dare la chiave pubblica

È l'uso corretto o è meglio generare una nuova coppia per ciascun sito?

Mi sembra che questo non sia sicuro: qualsiasi sito di cui mi fido con una cattiva intenzione [o che è stato violato] potrebbe prendere la mia chiave privata quando mi connetto per la prima volta e utilizzarla per accedere ad altri siti.

Qualcuno che capisce SSH può verificare che sia sicuro usare una coppia di chiavi ovunque e, in tal caso, forse spiegare perché?

Inoltre, se ho due computer di casa, c'è qualche motivo per usare coppie di chiavi diverse da ciascuna?

Ringrazia tutti.

45
SamGoody

La tua chiave privata non viene mai inviata all'altro sito quindi è assolutamente sicuro riutilizzare la chiave pubblica. Va anche bene riutilizzare la stessa chiave dei computer locali. Tuttavia, tieni presente che se qualcuno ruba la chiave, avrà accesso a tutti loro. Questo può essere o non essere un problema.

42
artbristol

Esistono diverse coppie di chiavi in ​​SSH. Quello di cui stai parlando è la coppia di chiavi client . Il client (ovvero la macchina che si trova sulla tua scrivania, sotto il tuo controllo fisico) memorizza la chiave privata e la chiave privata non viene mai inviata al server. La chiave pubblica è memorizzata sul server (in genere nel $HOME/.ssh/authorized_keys file).

Quando il client si connette al server, il client utilizza la chiave privata per dimostrare al server che controlla la chiave privata e può eseguire calcoli con essa (ovvero firma digitale ). Il server verifica la firma grazie alla chiave pubblica. La conoscenza della chiave pubblica non dà il potere di generare nuove firme, motivo per cui viene chiamata chiave "pubblica": può essere resa pubblica , senza alcun effetto negativo. In particolare, la copia della chiave pubblica su un numero qualsiasi di server non dà potere a nessuno di questi server rispetto agli altri server, siano essi onesti o completamente controllati da un utente malintenzionato.

Come sottolinea @artbristol, questa è la chiave privata che è importante. Se copi la tua chiave pubblica su dieci server e qualcuno ruba la chiave privata (possibilmente hackerando il tuo sistema desktop o fisicamente acquistandola), allora che qualcuno ottenga l'accesso immediato ai dieci server in una volta sola. Le chiavi private sono preziose .

18
Thomas Pornin

Mi sembra che questo non sia sicuro: qualsiasi sito di cui mi fido con una cattiva intenzione [o che è stato violato] potrebbe prendere la mia chiave privata quando mi connetto per la prima volta e utilizzarla per accedere ad altri siti.

Qualcuno che capisce SSH può verificare che sia sicuro usare una coppia di chiavi ovunque e, in tal caso, forse spiegare perché?

Le chiavi pubbliche funzionano in base all'autenticazione sfida. Fondamentalmente, dai a diversi siti la tua chiave pubblica, in modo che ogni sito possa presentarti una sfida. Questa sfida è unica ogni volta e può essere risolta solo da una persona con una chiave privata.

Un esempio semplificato sarebbe se il server prende la tua chiave pubblica e crittografa un messaggio del tipo "La chiave di sessione per l'utente X al 19 dic 16: 30: 03.351213 UTC è XPa7sK35WjMgAezrPmG1Sq4CV7nsFN1Uc3TRW6P8Evc". Il computer client riceve il messaggio crittografato, lo decodifica con la chiave privata e quindi restituisce la chiave di sessione decodificata al server, confermando che si dispone della chiave privata in possesso su cui il server ti autentica. (In pratica è spesso più complicato con il server in genere ha chiavi host pubbliche/private, quindi puoi crittografare i tuoi messaggi sul server e autenticare che il server è chi dice che sia).

Avere la tua chiave pubblica non fornisce a un server dannoso ulteriori metodi di attacco, ad eccezione del tentativo di fattorizzare il modulo dalla tua chiave pubblica per ricreare la tua chiave privata. Ciò è possibile solo se la chiave è troppo piccola, ovvero le chiavi a 512 bit sono state decifrate dieci anni fa, le chiavi RSA a 768 bit sono state segnalate incrinate l'anno scorso (con circa 10 ^ 20 operazioni; o 2000 anni su un unico core di un processore moderno); Le chiavi a 1024 bit sono ancora sicure e l'impostazione predefinita ssh è chiavi a 2048 bit.

6
dr jimbob

Questo documento contiene tutti i dettagli su come funziona l'autenticazione con chiave pubblica in SSH. L'ho riassunto di seguito.

Il client invia il seguente pacchetto:

 descrizione/valore del tipo di dati 
 byte SSH_MSG_USERAUTH_REQUEST 
 nome utente stringa 
 servizio stringa 
 stringa "publickey" 
 booleano TRUE 
 nome algoritmo chiave pubblica 
 stringa chiave pubblica da utilizzare per l'autenticazione della stringa 

dove firma è una firma che utilizza la chiave privata sui seguenti dati:

 identificatore di sessione stringa 
 byte SSH_MSG_USERAUTH_REQUEST 
 nome utente stringa 
 servizio stringa 
 stringa "chiave pubblica" 
 booleano TRUE 
 stringa nome algoritmo chiave pubblica 
 stringa chiave pubblica da utilizzare per l'autenticazione 

Il server quindi cerca di vedere se la chiave pubblica specificata è autorizzata per la chiave pubblica fornita (@ThomasPornin discute come ciò viene fatto nella sua risposta). Il server quindi verifica che la firma sia corretta (questo viene fatto utilizzando la chiave pubblica). Se ciò ha esito positivo, l'autenticazione ha esito positivo.

Come puoi vedere (e come sottolineato nella risposta di @ artbristol), la chiave privata non viene mai trasmessa al server. Devi solo dimostrare di conoscere la chiave privata inviando la firma digitale.

4
mikeazo