Gentoo Logo

Disclaimer : La versione originale di questo articolo è stata pubblicata da IBM developerWorks ed è di proprietà di Westtech Information Services. Questo documento è una versione aggiornata dell'articolo originale, e contiene numerosi miglioramenti apportati dal Gentoo Linux Documentation team.
Questo documento non è mantenuto attivamente.


OpenSSH gestione delle chiavi, Parte 1

Indice:

1.  Capire l'autenticazione RSA/DSA

Molti di noi stanno gia utilizzando l'ottimo OpenSSH (vedi Risorse più avanti in questo capitolo) come alternativa sicura, e criptata per i comandi vulnerabili di telnet e rsh. Una delle più intriganti caratteristiche è la possibilità di autenticare gli utenti usando i protocolli RSA e DSA, i quali sono basati su una coppia complementare di chiavi completamente numeriche. Tra le sue migliori caratteristiche, RSA and DSA hanno la capacità di stabilire connessioni a sistemi remoti senza digitare la password. Per questa caratteristica, i nuovi utenti di OpenSSH configurano spesso RSA/DSA in modo rapido e grossolano con conseguenti login privi di password, ma aprendo grandi e gravi falle di sicurezza nel processo.

Cos'è l'autenticazione RSA/DSA ?

SSH, per l'esattezza OpenSSH (un'implementazione free di SSH), è uno strumento incredibile. Come telnet o rsh, il client ssh può essere utilizzato per loggarsi ad una macchina remota. Tutto quello che è richiesto sulla macchina remota è che sia in esecuzione sshd, il server del processo ssh. A differenza di telnet, il protocollo ssh è veramente sicuro. Esso utilizza uno speciale algoritmo di criptatura del flusso di dati, aumentando e garantendo l'integrità di essi, realizzando autenticazioni in modo sicuro.

Tuttavia anche se ssh è realmente grande, c'è un certo componente della sue funzionalità che è spesso ignorato o pericolosamente abusato o semplicemente mal compreso. Questo componente di OpenSSH è il sistema di autenticazione a chiave RSA/DSA, un'alternativa al sistema standard di autenticazione che OpenSSH utilizza di default.

I protocolli di autenticazione RSA e DSA di OpenSSH sono basati su di una copia speciale generata di chiavi cifrate, chiamate private key (chiave privata) e public key(chiave pubblica). Il vantaggio di utilizzare questo sistema di autenticazione basato su chiavi è che in molti casi è possibile stabilire connessioni sicure senza aver digitato manualmente la password.

Mentre i protocolli basati su chiavi di autenticazione sono relativamente sicuri, i problemi si presentano quando gli utenti prendono determinate scorciatoie in nome di convenienza, senza aver completamente capito le loro implicazioni sulla sicurezza. In questo articolo, daremo una buona occhiata a come usare correttamente i protocolli di autenticazione DSA ed RSA senza esporsi a rischi inutili di sicurezza. Nel mio seguente articolo vi mostrerò come usare ssh-agent per nascondere le chiavi private ed introdurre keychain, un ssh-agent front-end che offre un certo numero di vantaggi della convenienza senza sacrificare la sicurezza. Se tu sei interessato ad apprendere più in dettaglio le caratteristiche di OpenSSH, continua a leggere.

Come lavorano le chiavi RSA/DSA

Ora una breve e generale spiegazione di come lavorano le chiavi RSA/DSA. Partiamo con un ipotetico scenario dove vogliamo usare l'autenticazione RSA per permettere ad una workstation locale con sistema linux (di nome localbox) di aprire una shell su remotebox, una macchina del tuo ISP. Bene adesso, noi proveremo a connetterci a remotebox utilizzando ssh client, noi otterremmo il seguente prompt:

Codice 1.1: Connessione a remotebox

$ ssh drobbins@remotebox
drobbins@remotebox's password:

Qui si vede un esempio di autenticazione di default di ssh. Normalmente questo chiede la password dell'account drobbins su remotebox. Se noi digitiamo la nostra password per remotebox, ssh utilizza il suo protocollo sicuro di autenticazione della password, trasmettendola al remotebox per la verifica. Tuttavia diversamente da come fa telnet, qui la nostra password è cifrata così da non essere intercettata da nessuno che stia catturando i dati della nostra connessione. Appena remotebox autentica la password che abbiamo fornito con il suo database, se ha successo, noi siamo abilitati al logon, remotebox ci offre il prompt della shell. . Mentre il metodo di autenticazione di default di ssh sembra essere abbastanza sicuro, l'autenticazione di RSA e DSA apre nuove possibilità.

Tuttavia, diversamente dall'autenticazione sicura della password ssh, l'autenticazione RSA richiede qualche configurazione iniziale. Noi abbiamo bisogno di eseguire questi passi iniziali una sola volta. Dopo di che l' autenticazione RSA tra localbox e remotebox sarà totalmente senza paura. Per impostare l'autenticazione RSA, noi dobbiano dapprima generare una coppia di chiavi, una privata ed una pubblica. Queste due chiavi hanno delle proprietà molto importanti. La chiave pubblica può essere utilizzata per cifrare un messaggio e solo il proprietario della rispettiva chiave privata può decifrarlo. La chiave pubblica può solo essere usata per criptare(encryption), e la chiave privata può solo essere utilizzata per decriptare(decryption) di un messaggio codificato dalla corrispondente chiave pubblica. Il Protocollo di autenticazione RSA (e DSA) utilizza questa speciale peculiarità della coppia di chiavi per realizzare l'autenticazione sicura senza dover trasmettere nessuna informazione riservata sulla rete.

Per far si che l'autenticazione RSA o DSA funziona, noi dobbiamo fare il primo passo. Copiamo la nostra public key su remotebox. La chiave pubblica è chiamata "pubblica" per una ragione. Visto che essa è utilizzata solo per cifrare i nostri messaggi, noi non dobbiamo preoccuparci che vada in mani sbagliate. Cosi una volta che abbiamo copiato la nostra chiave pubblica su remotebox e la abbiamo messa nel file speciale (~/.ssh/authorized_keys) così che il servizio sshd su remotebox la possa trovare, noi siamo pronti a loggarci su remotebox.

Per far ciò, scriviamo semplicemente ssh drobbins@remotebox dalla nostra console su localbox. Però questa volta, ssh lascia al servizio sshd su remotebox decidere se preferisce utilizzare l'autenticazione del protocollo RSA. Cosa succede adesso è molto interessante. Il servizio sshd di Remotebox genera un numero casuale, e lo cifra utilizzando la nostra chiave pubblica (Quella che noi abbiamo copiato prima). Cosi sshd spedisce questo numero casuale cifrato al nostro ssh funzionante su localbox. Dopodiche il nostro ssh utilizza la nostra private key per decifrare questo numero, e lo spedisce di ritorno a remotebox, come se dicesse "Vedi, io ho la corrispondente chiave privata; Sono stato in grado di decifrare il tuo messaggio!" Cosi, sshd conclude che noi possiamo fare il log in, in quando possediamo la corrisponente chiave privata. Di fatto noi dobbiamo possedere la chiave privata per avere l'accesso a remotebox.

Due osservazioni

Ci sono due importanti osservazioni riguardo l'autenticazione RSA e DSA. La prima è che noi dobbiamo per forza generare la coppia di chiavi. Noi possiamo poi copiare la chiave pubblica nelle macchine remote per averne accesso tramite la nostra sola chiave privata. In altre parole, non abbiamo bisogno di una copia di chiavi per ogni sistema al quale vogliamo avere accesso, me è sufficiente una sola una copia.

L'altra osservazione è che la nostra chiave privata non deve assolutamente finire nelle mani sbagliate. La chiave privata è l'unica cosa che ci garantisce l'accesso ai sistemi remoti, ed ognuno che la possiede ha accesso esattamente come noi. Così come non ci farebbe piacere che qualcunaltro avesse le nostre chiavi di casa, nello stesso modo dobbiamo proteggere la nostra chiave privata da ogni utilizzo inappropriato. Nel mondo dei bits and bytes, questo significa che nessuno deve essere in grado di leggere o copiare la nostra chiave privata.

Sicuramente gli sviluppatori di ssh conoscono l'importanza della chiave privata ed hanno creato alcune sicurezze all'interno di ssh e ssh-keygen così che la nostra chiave privata non venga abusata. Primo, ssh è configurato per visualizzare un avviso nel caso in cui la nostra chiave privata abbia dei permessi che concedono a qualcuno di leggerla. Secondo, quando creiamo la nostra copia di chiavi pubblica/privata utilizzando ssh-keygen, ssh-keygen ci chiederà di inserire una parola-segreta (passphrase). Se noi la inseriamo, la nostra chiave privata viene cifrata utilizzando quest'ultima, così se qualcuno ci ruba la chiave privata essa sarà inutilizzabile a chiunque non conosca anche la nostra parola segreta. Armati di queste conoscenze andiamo a vedere come configurare ssh per utilizzare il protocollo di autenticazione RSA e DSA.

ssh-keygen passo passo

Il primo passo per impostare l'autenticazione RSA è quello di generare la copia pubblica/privata di chiavi. In origine l'autenticazione RSA fu implementata in ssh, così RSA può funzionare con qualsiasi versione di OpenSSH, anche se io raccomando sempre che nel sistema sia installata la versione disponibile più recente, ad esempio, mentro sto scrivendo questo articolo, openssh-2.9_p2. Ora generiamo una copia di chiavi come segue:

Codice 1.2: Utilizzando ssh-keygen

$ ssh-keygen
Generating public/private rsa1 key pair.
Enter file in which to save the key (/home/drobbins/.ssh/identity): (premi invio)
Enter passphrase (empty for no passphrase): (inserisci la parola chiave)
Enter same passphrase again: (inserisci nuovamente la parola chiave)
Your identification has been saved in /home/drobbins/.ssh/identity.
Your public key has been saved in /home/drobbins/.ssh/identity.pub.
The key fingerprint is:
a4:e7:f2:39:a7:eb:fd:f8:39:f1:f1:7b:fe:48:a1:09 drobbins@localbox

Quando ssh-keygen chiede dove salvare la chiave, premiamo invio per accettare la posizione predefinita di /home/drobbins/.ssh/identity. ssh-keygen memorizzerà la chiave privata nel percorso sopra definito e la chiave pubblica sarà anchessa nella stessa posizione, in un file chiamato identity.pub.

Da tenere presente anche che ssh-keygen domanda di inserire la parola chiave. Quando richiesto noi inseriamo una buona parola chiave ( sette o più caratteri difficili da prevedere). ssh-keygen allora cifra la nostra chiave privata (~/.ssh/identity) utilizzando questa parola chiave, in modo tale che nessuno possa utilizzarla senza conoscere la nostra parola chiave.

Il piccolo compromesso

Quando specifichiamo la parola chiave, abilitiamo ssh-keygen a prevenire degli abusi, ma questo crea un piccolo inconveniente. Ora, ogni volta che vogliamo connetterci al nostro drobbins@remotebox account utilizzando ssh, ssh chiederà di inserire la parola chiave, in modo tale da poter decifrare la nostra chiave privata e da poter utilizzare per l'autenticazione RSA. Ma attenzione noi non dobbiamo digitare la nostra password per l'account di drobbins su remotebox, dobbiamo digitare la parola chiave necessaria per decifrare localmente la chiave privata. Dopo che la chiave privata è stata decifrata, il nostro client ssh si prenderà cura del resto. Visto che il meccanismo di utilizzare la nostra password remota è completamente differente, noi stiamo digitando la "frase segreta" di ssh.

Codice 1.3: Loggarsi con l'utilizzo della parola chiave

$ ssh drobbins@remotebox
Enter passphrase for key '/home/drobbins/.ssh/identity': (inserire la parola chiave)
Last login: Thu Jun 28 20:28:47 2001 from localbox.gentoo.org

Welcome to remotebox!

$

E qui gli utenti molto spesso vengono fuorviati da un semplice compromesso. Mote volte essi creeranno chiavi private non criptate cosicchè successivamente occorre digitare una password. In questo modo basta digitare il comando ssh per venire immediatamente autenticati tramite RSA (o DSA) ed effettuare la procedura di login.

Codice 1.4: Loggarsi con l'utilizzo della parola chiave

$ ssh drobbins@remotebox
Last login: Thu Jun 28 20:28:47 2001 from localbox.gentoo.org

Welcome to remotebox!

$

Tuttavia anche non si è capito bene l'impatto sulla sicurezza è meglio utilizzare questo piccolo inconveniente. Con una chiave privata non cifrata, se qualcuno attaccasse il nostro sistema, egli avrebbe pieno accesso a remotebox ed a tutti gli altri host che sono configurati con la rispettiva chiave pubblica.

So quello che stai pensando. Autenticazioni senza password sono belle ma hanno sempre qualche rischio. Ma c'è un modo migliore! Stai con me e capirai come trarre vantaggi da un autenticazione priva di password senza compromettere la sicurezza della tua chiave privata. Mostrerò come usare ssh-agent (ciò che rende sicura l'autenticazione senza password) nel prossimo articolo. Siamo pronti a usare ssh-agent per impostare autenticazione RSA e DSA. Ecco passo passo quello che si fa.

Generazione della copia di chiavi RSA

Per impostare l'autenticazione RSA dobbiamo fare alcuni piccoli passi per generare la copia di chiavi pubblica/privata. Per fare questo scriviamo :

Codice 1.5: Generazione delle chiavi...

$ ssh-keygen

Accettare la locazione di default per le chiavi quando richiesto (di norma ~/.ssh/identity e ~/.ssh/identity.pub per la chiave pubblica), e fornire ad ssh-keygen una sicura parola chiave. Quando ssh-keygen ha finito, otterrai una chiave pubblica ed una chiave privata cifrata.

Installazione della chiave pubblica RSA

Il prossimo passo consiste nel configurare il sistema remoto dove sia in esecuzione il servizio sshd ad utilizzare la nostra chiave pubblica per l'autenticazione RSA. Normalmente lo si fa copiando la chiave pubblica nel sistema remoto nel modo seguente :

Codice 1.6: Copiare la chiave pubblica

$ scp ~/.ssh/identity.pub drobbins@remotebox:

Dato che ancora la configuarazione dell'autenticazione RSA non è completata dobbiamo inserire la nostra password su remotebox. Fatto questo , aggiungiamo la chiave pubblica al seguente file ~/.ssh/authorized_keys così:

Codice 1.7: Installazione delle chiave pubblica

$ ssh drobbins@remotebox
drobbins@remotebox's password: (digita la password)
Last login: Thu Jun 28 20:28:47 2001 from localbox.gentoo.org

Welcome to remotebox!

$ cat identity.pub >> ~/.ssh/authorized_keys
$ exit

Adesso con l'autenticazione RSA configurata saremo invitati a digitare la nostra parola chiave (anzichè la nostra password) quando proveremo a connetterci a remotebox utilizzando ssh.

Codice 1.8: Loggarsi tramite l'autenticazione a chiave pubblica

$ ssh drobbins@remotebox
Enter passphrase for key '/home/drobbins/.ssh/identity':

Evvai!, l'autenticazione RSA è completata! Se non sei riuscito ad ottenere il prompt della parola chiave ci sono alcune cose da verificare. Prima cosa proviamo ad effettuare il login scrivendo ssh -1 drobbins@remotebox. Questo dirà ad ssh di utilizzare la versione 1 del protocollo, che potrebbe essere per qualche ragione l'autenticazione di default nel sistema remoto. Se anche così non dovesse funzionare prova a verificare che tu non abbia una linea simile a questa RSAAuthentication no nel tuo /etc/ssh/ssh_config. Se così fosse, prova a commentarla aggiungendo questo "#" all'inizio. Altrimenti prova a contattare l' amminitratore di sistema di remotebox e verificare che abbia abilitato l'autenticazione RSA nel suo sistema, ed eventualmente a verificare i parametri di /etc/ssh/sshd_config.

Generazione della chiave DSA

Mentre le chiavi di RSA utilizzano la versione 1 del protocollo dello ssh, le chiavi DSA sono utilizzate per il Livello 2, una versione aggiornata del protocollo dello ssh. Una qualsiasi versione recente di OpenSSH dovrebbe essere in grado di utilizzare sia le chiavi DSA che RSA. Le chiavi DSA generate utilizzando ssh-keygen di OpenSSH sono simili alle chiavi RSA nel seguente modo :

Codice 1.9: Generazione di una copia di chiavi DSA

$ ssh-keygen -t dsa

Nuovamente ci viene richiesto di inserire la parola chiave. Digitarne una corretta dal punto di vista della sicurezza. Ci verrà anche richiesto il percorso per salvare le nostre chiavi DSA. Normalmente ~/.ssh/id_dsa e ~/.ssh/id_dsa.pub, dovrebbero andare bene. Dopodichè la nostra generazione DSA è completata, è ora di installare la nostra chiave pubblica sul sistema remoto.

Installazione di chiave pubblica DSA

Nuovamente l'installazione della chiave pubblica DSA è identica a quella RSA. Nel caso della DSA, dobbiamo copiare il nostro file ~/.ssh/id_dsa.pub su remotebox, ed appenderlo al file ~/.ssh/authorized_keys2 sempre su remotebox. Da notare che questo file ha un nome diverso da quello RSA authorized_keys . Una volta configurato siamo in grado di fare un login su remotebox scrivendo la nostra parola chiave per la chiave privata di DSA anzichè la nostra normale password di remotebox.

Nota: Al giorno d'oggi si dovrebbe utilizzare soltanto la versione 2 del protocollo ssh, poichè la versione 1 presenta alcune debolezze.

La prossima volta

Bene, adesso dovresti avere le autenticazioni RSA e DSA funzionanti ma con la necessità di dover digitare la parola chiave per ogni nuova connessione. Nel prossimo articolo, noi vedremo come utilizzare ssh-agent, un comodo metodo per abilitarci a stabilire connessioni senza fornire la parola chiave, ma comunque ad avere la chiave privata cifrata sul nostro disco. Introdurrò inoltre keychain, un front-end molto comodo di ssh-agent che lo rende ancora più sicuro, comodo e facile da usare. Fino ad allora tieni a portata di mano le risorse qua sotto.

2.  Risorse



Stampa

Aggiornato il 9 ottobre 2005

Oggetto: In questo capitolo conoscerai come funzionano le autenticazioni RSA e DSA, e vedrai come impostare nel modo corretto autenticazioni senza password. Questo primo articolo della serie, di Daniel Robbins, è focalizzato sull'introduzione del protocollo di autenticazione RSA e DSA ed inoltre mostra come sia possibile farli lavorare sulla rete.

Daniel Robbins
Autore

Michele Schiavo
Traduzione

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.