Bibliografia:
Computer Networking. Autori: James F. Kurose (University of Massachusetts, Amherst) Keith W. Ross (Polytechnic Institute of NYU).
Autenticazione è il processo di accertamento dell'identità di un mittente o di un destinatario. In una forma diretta, le persone si autenticano riconoscendo il volto sulla foto di un documento di identità.
In questa sezione si cercheranno delle soluzioni per autenticare due interlocutori in comunicazione attraverso la rete. Si concentrerà l'attenzione sul modo in cui un mittente o un destinatario autentica l'altro interlocutore con cui sta per iniziare una comunicazione. Si osserverà che è un problema leggermente diverso da quello che si previene con la firma digitale, la quale prova che un messaggio ricevuto e archiviato proveniva realmente da chi dichiarava di esserne l'autore.
L'autenticazione attraverso la rete non può sfruttare il riconoscimento vocale o visuale. In pratica, in una rete, non devono autenticarsi solo gli utenti, ma anche i router o i processi. L'autenticazione sulla rete può affidarsi solo allo scambio di messaggi e dati come componenti di un protocollo di autenticazione. L'esecuzione di un protocollo di autenticazione dovrebbe precedere l'esecuzione degli altri protocolli usati dalle due entità in comunicazione. Il protocollo di autenticazione prima verifica le identità delle parti, poi ne consente il dialogo.
Nel seguito verrà sviluppato gradualmente un protocollo di autenticazione, cercando, in ogni versione, le possibili carenze del metodo. Il primo passo consiste nell'assumere che Alice e Bob hanno bisogno di autenticarsi.
Il più semplice protocollo di autenticazione che si può immaginare consiste in un messaggio che Alice invia a Bob dicendo: "Io sono Alice". Il problema è ovvio: Bob non ha nessun modo per accertarsi che l'autore del messaggio sia realmente Alice. Anche Trudy potrebbe avere inviato il messaggio per spacciarsi per Alice. |
![]() |
![]() |
Nel caso in cui Alice abbia un indirizzo di rete ben preciso da cui abitualmente comunica, Bob potrebbe provare ad autenticare Alice verificando che l'indirizzo sorgente portato nel datagramma contenente il messaggio di autenticazione contenga esattamente quell'indirizzo. In questo caso Alice viene autenticata. Di fronta a questa misura, un intruso ingenuo desisterebbe dal provare ad impersonare Alice. Dalla conoscenza dei processi del livello Rete e di quelli del livello Collegamento si sa che non è difficile (ad esempio riuscendo ad accedere ai servizi del sistema operativo) creare un datagramma IP, contenente un qualsiasi indirizzo IP (ad esempio quello di Alice) nel campo "indirizzo sorgente" del pacchetto e consegnare il datagramma al router di default. Da quel punto in poi il datagramma con l'indirizzo falsificato verrebbe consegnato a Bob. Questa tecnica è denominata IP spoofing, una diffusa tecnica di attacco. L'IP spoofing può essere contrastato se il router è configurato per scartare i datagrammi IP che non hanno un determinato indirizzo sorgente. Ad esempio, il primo router che incontra Trudy potrebbe essere configurato per inoltrare solo pacchetti provenienti dal vero indirizzo sorgente di Trudy. Questa configurazione non è applicabile in tutti i casi, quindi Bob non può escludere che Trudy sia presente sulla rete. |
L'autenticazione classica prevede l'uso di una password segreta. Solo il sistema di autenticazione e il soggetto da autenticare conoscono la password. In questa versione del protocollo, Alice invia una password segreta a Bob. Se Trudy intercetta le comunicazioni di Alice, può conoscere la password di Alice. Questa eventualità non è improbabile, ad esempio quando ci si collega con Telnet ad un computer, la password viene inviata in chiaro. Qualcuno connesso alla stessa sottorete potrebbe sniffare i pacchetti in transito ed intercettare la password.
La prossima idea è quella di applicare la criptografia. Criptando la password, Trudy non riuscirà a leggere quella di Alice. Se si assume che Alice e Bob condividano una chiave simmetrica, KA-B, allora Alice può criptare la password, mandare il suo messaggio di identificazione, "sono Alice", insieme con la password criptata, a Bob. Bob decripta la password e, assumendo che la password sia corretta, autentica Alice. Bob si sente rassicurato dell'autenticazione perchè sa che solo Alice conosce la password e solo lei conosce anche la chiave segreta condivisa con cui ha criptato la password. Con questo metodo si impedisce a Trudy di conoscere la password di Alice, ma la criptografia non risolve ancora il problema dell'autenticazione. Bob può ancora subire il cosiddetto attacco di registrazione: Trudy ha bisogno solo di ascoltare le comunicazioni di Alice, registrare la password criptata, e successivamente inviare la password criptata a Bob per fargli credere che sta ricevendo un pacchetto da Alice. |
![]() |
Il problema con la versione del protocollo 3.1 è che la password viene usata ad ogni comunicazione, invece converrebbe cambiarla spesso. Alice e Bob si potrebbero accordare su una sequenza di password (o usare un algoritmo di generazione delle password) ed usare ogni password solo una volta in sequenza.
Si consideri comunque un approccio più generale per difendersi dagli attacchi di registrazione. Il problema è che Bob non riesce a distinguere l'autenticazione originale dalla successiva autenticazione registrata. Cioè, Bob non può sapere se Alice era realmente presente all'altro estremo della connessione o se il messaggio ricevuto è quello che Trudy ha registrato dalla precedente autenticazione di Alice. Si ricordi come è composta la fase di apertura connessione del TCP: il lato server della connessione TCP non accetta una richiesta di apertura connessione se il segmento SYN era una vecchia copia (ritrasmissione) di un segmento SYN proveniente da una connessione precedente. Come faceva il lato server della connessione TCP a sapere se il client era realmente attivo? Sceglie un numero di sequenza iniziale (che non è mai stato usato), invia quel numero al client, ed aspetta che il client risponda con un segmento ACK contenente quel numero. La stessa idea si può applicare al processo di autenticazione.
Un nonce è un numero che un protocollo userà solo una volta. La modifica al protocollo di autenticazione adesso è:
Alice manda il messaggio, "sono Alice" a Bob
Bob sceglie un nonce, R, e lo manda ad Alice
Alice cripta il nonce usando la chiave simmetrica segreta, KA-B, e invia il nonce criptato, KA-B(R) a Bob. Il fatto che Alice conosce KA-B e la usa per criptare un valore che solo Bob conosce assicura che il messaggio proveniva da Alice. Il nonce è usato per assicurare che Alice è presente.
Bob decripta il messaggio ricevuto. Se il nonce decriptato corrisponde al nonce che aveva inviato ad Alice, allora Alice è autenticata.
![]() |
Usando il valore R una sola volta e poi verificando il valore ricevuto come risposta, KA-B(R), Bob è sicuro sia che Alice è esattamente chi dice di essere (perchè solo lei conosce la chiave segreta con cui criptare R) sia che è presente all'altro estremo della comunicazione (perchè ha criptato il nonce, R, che Bob aveva appena creato). |
| ![]() |
Questa nuova versione del protocollo è sicura? Questo richiede che Bob recuperi la chiave pubblica di Alice. Si può vedere che Trudy pu` far credere a Bob di essere Alice:
Trudy invia a Bob il messaggio "sono Alice"
Bob sceglie un nonce, R, e lo manda ad Alice, ma questo messaggio viene intercettato da Trudy.
Trudy applica la sua chiave privata dT al nonce ed invia il valore risultante dT(R), a Bob. Per Bob dT(R) è solo un insieme di bit e non è in grado di stabilire se questi rappresentino dT(R) o dA(R).
Bob deve farsi consegnare la chiave pubblica da Alice eA per criptare il valore che ha ricevuto. Quindi Bob invia un messaggio ad Alice chiedendole di fornirgli la chiave eA. Trudy intercetta anche questo messaggio e risponde a Bob inviandogli la chiave eT, cioè la chiave pubblica di Trudy. Bob calcola eT(dT(R)) = R, e così autentica Trudy come Alice.
La sicurezza di questo metodo dipende dalla sicurezza dello scambio delle chiavi pubbliche.
Nell'esempio precedente, Bob può affermare di aver interagito con Alice, ma Alice sa che lei non ha mai interagito con Bob. C'è un altro metodo di attacco che potrebbe addirittura evitare che Bob ed Alice si accorgano di non aver mai interagito. Mentre Alice e Bob stanno comunicando, Trudy, che ha sfruttato il difetto evidenziato nel metodo di autenticazione, è in grado di inserirsi in modo trasparente tra Alice e Bob. In particolare, se Bob inizia ad inviare dati criptati ad Alice usando la chiave pubblica che ha ricevuto da Trudy, Trudy può risalire al testo in chiaro che Bob invia ad Alice. Contemporaneamente, Trudy può inviare i dati di Bob ad Alice (dopo aver ricriptato i dati usando la vera chiave pubblica di Alice).
Bob è soddisfatto di inviare dati criptati ed Alice è soddisfatta di ricevere dati criptati con la sua chiave pubblica. Entrambi ignorano la presenza di Trudy. Bob ed Alice poi si incontrano e parlano della loro interazione, Alice ha ricevuto esattamente ciò che Bob le ha inviato e quindi non si accorge di niente. Questo é un semplice esempio di attacco del tipo man-in-the-middle. Qualcuno lo denomina anche attacco bucket-brigade, perchè il passaggio dei dati da Bob ad Alice attraverso Trudy somiglia al passaggio dei secchi d'acqua tra le persone che tentano di spegnere un incendio.
Un nonce è un numero intero. Per adempiere alle sue finalità, un nonce deve possedere alcune proprietà: un nonce usato, non dovrebbe essere più valido e, conoscendo un nonce valido, dovrebbe essere impossibile prevedere il nonce successivo.
L'esempio che si propone di seguito, ha lo scopo di mostrare come si comporta un sistema che deve generare un nonce, cioò come fa ad evitare di generare due volte lo stesso valore. Il reale meccanismo di generazione del nonce si basa su calcoli un po' più sofisticati di quelli proposti qui.
Un algoritmo di generazione di numeri pseudocasuali, possiede queste proprietà. La regola per generare un numero pseudocasuale potrebbe essere la seguente:
xi+1 = (a · xi + c) (MOD m)
in cui a, c ed m sono delle costanti da regolare sperimentalmente, fino a trovare una serie di valori che soddisfano i requisiti imposti al generatore di numeri pseudocasuali (la distribuzione di probabilità dei numeri generati è uniforme, la sequenza dei numeri deve essere imprevedibile). Esistono dei criteri per orientarsi sui valori da assegnare a questi parametri. Ad esempio c ed m non devono avere fattori primi in comune, e ogni fattore primo di m deve esserlo anche di (a-1). Il valore iniziale x0 della sequenza può far variare la sequenza dei numeri, ma non influisce sull'intervallo dei numeri generati. L'ampiezza dell'intervallo dei numeri generati dipende dal valore di m.
Con i seguenti valori di esempio: a=12, c=5, m=11, scegliendo un valore per x0, si ottiene la sequenza di tutti gli 11 numeri che la formula può produrre.
A | B | C | |
1 | a | c | m |
2 | 12 | 5 | 11 |
3 | x | ||
4 | 1 | ||
5 | =RESTO(A$2*A4+B$2;C$2) |
Copiare la formula della cella A5 nelle 20 celle sottostanti (o anche oltre per osservare sequenze più lunghe, aumentando il valore di m.
Osservare dopo quanti numeri si ritrova il primo numero della sequenza (periodo).
Modificare il primo valore della sequenza ed osservare che cambia la sequenza, ma comunque, vengono generati tutti i numeri tra 0 e 10.
modificare a=11, c=5 ed m=23, ed analizzare i risultati.