24.2.1 Autenticazione
Il meccanismo di autenticazione tra client e server della suite di OpenSSH dipende dal
protocollo utilizzato.
24.2.1.1 SSH1
Ogni macchina ha una coppia di chiavi (pubblica/privata) RSA (in genere di 1024 bit) che la
identificano. Inoltre quando sshd viene avviato, viene generata automaticamenrte una chiave
RSA (per default di 768 bit) che identifica il processo server.
Quando un client si connette da una macchina C, sshd risponde con la sua chiave pubblica
RSA di sistema e la chiave RSA di server. Il client confronta la chiave pubblica della macchina
S con quella presente sulla macchina C per vedere se la riconosce. Quindi il client genera un
numero casuale di 256 bit, lo cifra con la chiave RSA pubblica della macchina S e con quella
del server e lo invia a sshd. Entrambe le parti (client e server) utilizzeranno quindi tale
valore numerico come chiave (simmetrica) di sessione, utilizzata per cifrare il resto
della comunicazione con uno dei possibili algoritmi di cifratura (3DES o Blowfish -
3DES è il default). Il client utilizzerà l’algoritmo di cifratura fra quelli proposti dal
server.
I metodi di autenticazione possibili sono quelli riportati di seguito
-
rhosts
l’accesso alla macchina S è consentito se la macchina C, dalla quale l’utente
accede, è elencata nel file /etc/hosts.equiv o nel file /etc/shosts.equiv sulla
macchina S e lo username dell’utente sulla macchina C è quello richiesto per il
login sulla macchina S e sulla macchina S tale username esiste. Se i file sopra
indicati non eistono, l’accesso alla macchina S è consentito se sulla macchina S
esiste il file ~/.rhosts o ~/.shosts e contiene una riga che riporta il nome della
macchina C e lo username dell’utente sulla macchina C è quello richiesto per il
login sulla macchina S e sulla macchina S tale username esiste.
-
rhosts + RSA host key
l’autenticazione si basa sul controllo effettuato nel caso rhosts ed in più
la chiave pubblica della macchina C viene ricercata all’interno del file
/etc/ssh/ssh_known_hosts (e se non presente viene ricercata anche nel file
~/.ssh/known_hosts);
-
RSA challenge-response
l’autenticazione si basa sul riconoscimento della chiave pubblica e sullo
scambio di un challenge per mezzo di cifratura asincrona: il client segnala
al server la chiave pubblica dell’utente ed il server la ricerca nel file
~/.ssh/authorized_keys e nel caso la trovi, invia un challenge al client, ovvero
un valore casuale cifrato con la chiave pubblica dell’utente, cosicché solo il client
che è in esecuzione con i privilegi dell’utente considerato può decifrare il challenge
per mezzo della chiave privata dell’utente, contenuta nel file ~/.ssh/identity.
-
password
l’autenticazione avviene sulla base di una password digitata dall’utente e
trasmessa cifrata dal client al server;
24.2.1.2 SSH2
Ogni macchina ha una coppia di chiavi (pubblica/privata) RSA o DSA (in genere di 1024 bit)
che la identificano.
La comunicazione viene cifrata con uno dei possibili algoritmi a chiave simmetrica (AES a
128, 192 o 256 bit, Blowfish, 3DES, CAST128, Arcfour). Il client utilizzerà l’algoritmo di
cifratura fra quelli proposti dal server. Inoltre l’integrità dell’informazione sarà garantita da
un’impronta crittografica (hash MAC - Message Authentication Code) SHA-1 o
MD5.
I metodi di autenticazione possibili sono quelli riportati di seguito
-
hostbased
l’autenticazione si basa su un controllo analogo a quello effettuato nel caso rhosts
+ RSA host key con SSH1;
-
public key
l’autenticazione è analoga a quella descritta nel caso RSA challenge-response con
SSH1 ma la chiave di sessione deriva da un valore condiviso Diffie-Hellman. Il
client genera un’impronta della chiave di sessione con la chiave privata dell’utente
in questione, contenuta nel file ~/.ssh/id_rsa (RSA) o ~/.ssh/id_dsa (DSA),
e invia il messaggio al server. Il server autentica il client se riconosce la sua
chiave pubblica e se l’impronta corrisponde al messaggio inviato.
-
challenge-response
l’autenticazione si basa su un controllo analogo a quello effettuato nel caso RSA
challenge-response con SSH1;
-
password
l’autenticazione avviene sulla base di una password digitata dall’utente e
trasmessa cifrata dal client al server;