it-swarm.it

Utilizzare una chiave pubblica per accedere a SSH è meglio del salvataggio di una password?

L'uso di una coppia di chiavi pubblica/privata è abbastanza conveniente per accedere a host frequentati, ma se sto usando una coppia di chiavi senza password, è più sicuro (o meno sicuro) di una password? La sicurezza attorno al mio file di chiave privata è fondamentale, ma dire che il mio magico file di chiave privata era solo un elenco di password per vari host, c'è differenza?

69
Nick T

La mia risposta è che l'uso di coppie di chiavi pubbliche è molto cosa più saggia da fare rispetto all'utilizzo di password o elenchi di password. Mi concentrerò su cose che sono non ampiamente conosciute su diverse forme di autenticazione SSH e non vedo altre risposte menzionarle.

Prima di tutto, devi capire che l'autenticazione dell'utente è un processo diverso e separato rispetto alla creazione del canale sicuro . In parole povere, ciò significa che per prima cosa, la chiave pubblica del server viene utilizzata (se accettata!) Per costruire il canale SSH sicuro, abilitando la negoziazione di una chiave simmetrica che verrà utilizzata per proteggere la sessione rimanente, abilitare il canale riservatezza, protezione dell'integrità e autenticazione del server.

Dopo il canale è funzionale e sicuro, ha luogo l'autenticazione dell'utente. I due soliti modi per farlo è utilizzando una password o una coppia di chiavi pubbliche. L'autenticazione basata su password funziona come puoi immaginare: il client invia la sua password sul canale sicuro, il server verifica che questa sia effettivamente la password dell'utente specifico e consente l'accesso. Nel caso della chiave pubblica, abbiamo una situazione molto diversa. In questo caso, il server ha la chiave pubblica dell'utente memorizzata. Quello che succede dopo è che il server crea un valore casuale (nonce), lo crittografa con la chiave pubblica e lo invia all'utente. Se l'utente è chi dovrebbe essere, può decifrare la sfida e rispedirla al server, che quindi conferma l'identità dell'utente. È il classico modello challenge-response. (In SSHv2 viene effettivamente utilizzato qualcosa di leggermente diverso ma concettualmente vicino)

Come puoi immaginare, nel primo caso la password viene effettivamente inviata al server (a meno che SSH non utilizzi la risposta alla richiesta di password), nel secondo la tua chiave privata non lascia mai il client. Nello scenario immaginario in cui qualcuno intercetta il traffico SSL ed è in grado di decrittografarlo (utilizzando una chiave privata del server compromessa o se si accetta una chiave pubblica errata durante la connessione al server) o si ha accesso al server o client, la password sarà noto: con l'autenticazione con chiave pubblica-privata e il modello di risposta alla sfida i tuoi dettagli privati ​​non cadranno mai nelle mani dell'attaccante. Quindi, anche se un server a cui ti connetti è compromesso, altri server con cui usi la stessa chiave non lo sarebbero!

Esistono altri vantaggi dell'utilizzo di una coppia di chiavi pubbliche: la chiave privata non deve essere archiviata in chiaro nel PC client come suggerito. Questo ovviamente lascia il file della chiave privata aperto a compromessi come farebbe un file di password non crittografato, ma è più facile decrittografare (all'accesso) e utilizzare la chiave privata. Dovrebbe essere memorizzato crittografato e devi fornire una passphrase solitamente lunga per decrittografarla ogni volta che viene utilizzata.

Ovviamente questo significa che dovrai fornire la lunga passphrase ogni volta che ti connetti a un server, per sbloccare la tua chiave privata - Ci sono modi per aggirare questo. Puoi aumentare l'usabilità del sistema usando un agente di autenticazione: questo è un software che sblocca le tue chiavi per la sessione corrente, quando accedi ad gnome per esempio o quando accedi per la prima volta al tuo client, quindi puoi semplicemente digitare 'ssh remote-system-ip' e accedere, senza fornire una passphrase, e farlo più volte fino a quando non ci si disconnette dalla sessione.

Quindi, per riassumere, l'utilizzo di coppie di chiavi pubbliche offre una protezione notevolmente maggiore rispetto all'utilizzo di password o elenchi di password che possono essere acquisiti se client, server = oppure la sessione sicura è compromessa. Nel caso in cui non si utilizzi una passphrase (cosa che non dovrebbe accadere), le coppie di chiavi pubbliche offrono protezione da sessioni e server compromessi.

84
john

Rispetto a un elenco memorizzato di password (lunghe e casuali), una chiave privata SSH memorizzata offre la stessa sicurezza: le cose sono sicure fintanto che il file privato rimane privato.

La chiave privata, tuttavia, è molto più conveniente, entrambi praticamente (in questo momento, i client SSH la supportano immediatamente, contrariamente a un file personalizzato di password che è necessario utilizzare con alcuni copia e incolla manuali) e teoricamente (puoi riutilizzare la stessa chiave per ogni host a cui desideri connetterti, mentre un elenco di password aumenterà in modo lineare con il numero di host contattati, a meno che tu non riutilizzi la stessa password per più host, che è - cattivo).

15
Thomas Pornin

Dipende dalle minacce che prendi in considerazione.

Il punto principale dell'autenticazione con chiave pubblica/privata non è quello di rivelare il tuo segreto, nemmeno alla parte in cui ti stai autenticando. Per questo motivo, usare le chiavi è meglio, poiché non invii mai il tuo segreto fuori dal tuo computer.

Tuttavia, se la minaccia che consideri è locale e se non proteggi le tue chiavi private con una password, l'archiviazione di un elenco di password in chiaro equivale all'archiviazione delle chiavi private senza protezione.

Per questo motivo, è utile proteggere le tue chiavi private con una password e utilizzare strumenti come ssh-agent (per comodità). Su OSX, questo può anche essere integrato con KeyChain, quindi potrebbe non essere nemmeno necessario sbloccare la chiave privata (a livello di applicazione, solo a livello di demone di sicurezza) per poterla utilizzare tramite SSH (essenzialmente, KeyChain e il demone security si occupa di ssh-agent).

13
Bruno

La differenza principale tra l'uso di un chiave privata senza password e l'uso di password di testo semplice per l'autorizzazione SSH è autorizzazione da qualcosa che hai (la tua chiave privata) o da qualcosa che conosci (la tua password memorizzata). Sono di razza diversa, ma è difficile dire che alla fine uno sia migliore o più sicuro.

Autorizzare qualcosa che hai è normalmente più difficile per l'attaccante replicarsi all'improvviso - è più facile forzare/indovinare la tua password più semplice che replicare la tua chiave. Ma ha un grosso svantaggio - ora mantenere la tua chiave privata davvero segreta diventa fondamentale. Se usi qualcosa che solo tu conosci (password memorizzata), dovrebbe essere più facile mantenerlo in quel modo (almeno teoricamente). Ma se devi memorizzarlo, allora probabilmente usi qualcosa di non così complesso.

Quindi spetta a te decidere, cosa è più probabile: la tua chiave privata avanzata viene rubata o non è stata indovinata una password così forte (o acquisita in qualche altro modo).

C'è un'eccezione qui: se vuoi dire nella tua domanda che memorizzerai password molto lunghe, complesse e casuali nel tuo file segreto invece di usare una chiave privata, allora probabilmente c'è poca differenza tra i due ancora qualche differenza (mi è sfuggita la parte, vedi la risposta di @ john per un bel commento su questo). In tal caso entrambi sono qualcosa che hai , tieni i tipi segreti , ma quindi chiediti: perché farlo in primo luogo se è per questo che sono state progettate le chiavi private? dovresti rimanere con le chiavi private in quel caso.

10
Karol J. Piczak

L'articolo a cui si fa riferimento tratta delle password digitate in una sessione ssh; Penso che valga la pena di pensarci, e dei commenti di Richard, ma non credo più nella risposta stessa. (Preferisco ancora le chiavi pubbliche.)

Song, Wagner e Tian hanno dimostrato che è possibile velocizzare le ricerche con password a forza bruta circa 50 volte usando informazioni di temporizzazione da ssh sessioni . Noack rivisitò il loro studio e trovò SSH2 vulnerabile anche all'analisi dei tempi.

L'attacco fa due ipotesi:

  • L'hash della password è disponibile per il cracking della forza bruta.
  • Un utente malintenzionato può ottenere timestamp accurati sui pacchetti inviati tra host o acquisire in altro modo informazioni sui tempi.

Le chiavi pubbliche non sono solo più convenienti, ma più sicure contro determinate minacce.

8
sarnold

Se stai usando chiavi "software" (ovvero chiavi memorizzate nella tua directory .ssh o equivalente) sei sostanzialmente allo stesso livello della memorizzazione delle password.

OpenSSH ora ha un supporto PKCS # 11 quasi decente, lo stesso è disponibile in KiTTY (un fork PuTTY), quindi per sfruttare davvero l'autenticazione pubkey, scegli una smart card. Quindi c'è una vera differenza rispetto alle password. Un file di chiave software, protetto da una password, può essere replicato come una semplice password, mentre una smart card non può.

2
martin