Riutilizzo di chiavi private / pubbliche

36

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 ogni sito?

Mi sembra che questo sia insicuro - qualsiasi sito di cui mi fido con intenzione nefasta [o che è hackerato] potrebbe prendere la mia chiave privata quando mi collego la prima volta e usarla per andare negli altri siti.

Qualcuno che capisce SSH può verificare che è sicuro usare una coppia di chiavi ovunque, e se è così, magari spiegare perché?

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

Grazie a tutti.

    
posta SamGoody 29.12.2011 - 10:38
fonte

4 risposte

33

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

    
risposta data 29.12.2011 - 13:08
fonte
15

Ci sono diverse coppie di chiavi in SSH. Quello di cui stai parlando è la coppia di chiavi client . Il client (ovvero la macchina 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 è archiviata sul server (in genere nel file $HOME/.ssh/authorized_keys ).

Quando il client si connette al server, il client usa la chiave privata per dimostrare al server che controlla la chiave privata e può fare calcoli con esso (vale a dire firma digitale ). Il server verifica la firma grazie alla chiave pubblica. Conoscenza della chiave pubblica non dà il potere di generare nuove firme, motivo per cui è chiamata una chiave "pubblica": può essere resa pubblica, senza alcun effetto negativo. In particolare, la copia della tua chiave pubblica su un numero qualsiasi di server non autorizza nessuno di questi server sugli altri server, siano essi onesti o completamente controllati da un utente malintenzionato.

Come sottolinea @artbristol, questa è la chiave privata che è importante. Se copiate la vostra chiave pubblica su dieci server e qualcuno ruba la chiave privata (possibilmente hackerando il vostro sistema desktop, o rubandolo fisicamente), allora qualcuno otterrà l'accesso immediato ai dieci server in uno partire. Le chiavi private sono preziose .

    
risposta data 29.12.2011 - 14:52
fonte
5

It would seem to me that this is insecure - any site I trust with nefarious intention [or that is hacked] could take my private key when I connect the first time, and use it to go into the other sites.

Can someone who understands SSH verify that its safe to use one key pair everywhere, and if so, perhaps explain why?

Le chiavi pubbliche funzionano in base all'autenticazione di sfida. Fondamentalmente, dai a diversi siti la tua chiave pubblica, quindi ogni sito può lanciare una sfida a te. 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 dic 19esimo: 30: 03.351213 UTC è XPa7sK35WjMgAezrPmG1Sq4CV7nsFN1Uc3TRW6P8Evc". Il computer client riceve il messaggio crittografato, lo decrittografa con la chiave privata e quindi restituisce la chiave di sessione decrittografata al server, convalidando di avere la chiave privata in possesso su cui il server si autentica. (In pratica è spesso più complicato con il server in genere dispone di chiavi host pubbliche / private, quindi è possibile crittografare i messaggi sul server e autenticare che il server è chi dice di essere).

Avere la tua chiave pubblica non fornisce a un server malintenzionato metodi di attacco aggiuntivi, ad eccezione del tentativo di calcolare il modulo dalla tua chiave pubblica per ricreare la tua chiave privata. Questo è possibile solo se la tua chiave è troppo piccola, cioè le chiavi a 512 bit sono state decifrate un decennio fa, le chiavi RSA a 768 bit sono state riportate incrinate l'anno scorso (con circa 10 ^ 20 operazioni o 2000 anni su un singolo core di un processore moderno); Le chiavi a 1024 bit sono ancora sicure e il default di ssh è chiavi a 2048 bit.

    
risposta data 29.12.2011 - 19:42
fonte
3

Questo documento contiene tutti i dettagli su come l'autenticazione della chiave pubblica lavora in SSH. L'ho riepilogato di seguito.

Il client invia il seguente pacchetto:

data type   description/value

byte      SSH_MSG_USERAUTH_REQUEST
string    user name
string    service
string    "publickey"
boolean   TRUE
string    public key algorithm name
string    public key to be used for authentication
string    signature

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

string    session identifier
byte      SSH_MSG_USERAUTH_REQUEST
string    user name
string    service
string    "publickey"
boolean   TRUE
string    public key algorithm name
string    public key to be used for authentication

Il server quindi cerca di vedere se la chiave pubblica specificata è autorizzata per la chiave pubblica fornita (@ThomasPornin analizza come ciò viene fatto nella sua risposta). Il server quindi controlla che la firma sia corretta (questo viene fatto usando la chiave pubblica). Se ciò riesce, allora l'autenticazione ha successo.

Come puoi vedere (e come indicato 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.

    
risposta data 29.12.2011 - 14:57
fonte

Leggi altre domande sui tag