Lo standard GSM è stato progettato per essere un sistema di telefonia mobile sicuro con un rigido sistema di autenticazione dell’abbonato ed una trasmissione cifrata via-etere. Dallo studio del modello di sicurezza e degli algoritmi sono stati riscontrati errori critici. Così, dopo un’occhiata da vicino allo standard GSM, ci si può rendere conto che tale  modello non è molto buono. Un attaccante può passare attraverso il modello di sicurezza o aggirarlo attaccando altre parti della rete GSM, invece della chiamata telefonica in corso.

Sebbene lo standard GSM sia stato progettato per prevenire l’eventuale clonazione del telefono e la possibilità di decifrare le conversazioni via-etere, queste cose sono entrambe possibili con un po’ di lavoro addizionale se comparato a quello fatto per i sistemi di telefonia mobile analogici, e possono essere implementati mediante vari attacchi. Non si può inviare qualcosa di confidenziale su una rete GSM senza una codifica addizionale.

1 Introduzione

La comunicazione intesa in termini di trasmissione tra e con i mezzi in movimento è sempre stata un'esigenza fondamentale, sia in ambito militare (specie in quello marittimo) che nei servizi pubblici. I primi esperimenti vennero condotti nel 1921 dal Dipartimento di Polizia di Detroit negli Stati uniti, con sistemi che permettevano la comunicazione uni-direzionale dalla centrale agli autoveicoli in dotazione.

Un notevole sviluppo dei sistemi FM si realizzò durante la Seconda Guerra Mondiale, ma si evidenziò subito che non vi sarebbe stato in futuro la disponibilità di un numero tale di canali radio da poter soddisfare la richiesta dei vari settori: militari, polizia, vigili del fuoco, servizi di trasporto pubblici e privati, etc. Ciò che ancora non era stato raggiunto era l'obiettivo di connettere questi sistemi direttamente alla rete di telefonia fissa.

Solo alla fine degli anni '40 si introdussero i sistemi di telefonia mobile che, strutturati in modo da utilizzare un singolo trasmettitore FM, permettevano di coprire un'area determinata al cui interno, le persone erano abilitate ad effettuare le chiamate telefoniche anche da un'automobile durante gli spostamenti. La commutazione delle chiamate avveniva in modo manuale nella stazione radio. Il limite evidente di questo sistema dipendeva dai canali disponibili, che risultavano essere pochi e soprattutto finivano per sovraccaricarsi.

Nei primi sistemi radio-mobili ogni terminale utente operava ad una frequenza fissa, per cui si avevano un determinato numero di trasmettitori indipendenti, ad ognuno dei quali era assegnato un numero specifico di utenti e quindi un certo numero di frequenze. Successivamente si svilupparono sistemi più moderni, basati sul trunked, nel senso che tutti i canali sono a disposizione di tutti gli utenti e all'occorrenza si provvede a selezionare un canale libero.

Contemporaneamente a questi notevoli progressi, anche la selezione del canale si rinnovò. Infatti, prima avveniva manualmente, poi fu automatizzata.

La svolta decisiva si ebbe con l'introduzione dei sistemi cellulari, ideati già negli anni '40, sperimentati negli anni '60 e introdotti in sistemi commerciali solo negli anni '80.

Con i sistemi cellulari si ricorre alla tecnica del riutilizzo delle frequenze, cioè, una frequenza si utilizza più volte in luoghi diversi, sufficientemente lontani tra loro, in modo da evitare interferenze. Il territorio viene suddiviso in aree (celle) adiacenti, che utilizzano un numero ridotto di frequenze. 

Due celle adiacenti utilizzano frequenze differenti. Ciò che accade quando l'utente si sposta da una cella ad un'altra, è che necessariamente con il suo terminale mobile deve sintonizzarsi su una nuova frequenza, tipicamente quella ricevuta meglio tra tutte le frequenze della nuova cella. Questa operazione prende il nome di handover

I primi sistemi commerciali introdotti negli US erano di tipo analogico e presentavano diversi problemi: costi elevati, gestione delle frequenze complicate, consumi elevati e problemi di sicurezza. Per correggere tali difetti sono stati ideati sistemi di tipo digitale a partire dal 1982. Uno di questi è il sistema GSM che prende il nome dal gruppo di studio originario Groupe Special Mobile creato allo scopo di sviluppare un sistema radio-mobile mondiale e soprattutto sicuro. 

A tutt'oggi il GSM è il sistema di telefonia mobile cellulare più largamente utilizzato nel mondo con più di 100 milioni di utenti. Esso è stato uno dei primi sistemi di telefonia mobile digitale che ha seguito l’era analogica. I problemi maggiormente conosciuti con i sistemi analogici erano la possibilità di frodi telefoniche attraverso la clonazione dei telefoni che permetteva di effettuare chiamate a spese di qualcun altro e la possibilità che qualcuno intercettasse la chiamata telefonica via-etere e decifrasse la conversazione. Il sistema GSM è stato progettato per correggere questi problemi implementando sia una rigida autenticazione sia una forte codifica dei dati sul canale per le trasmissioni via-etere tra il cellulare e la rete.

Le specifiche del GSM sono state progettate dal GSM Consortium in segretezza e distribuite solo in base alla necessità di conoscenza dei fabbricanti hardware e software, ed agli operatori della rete GSM. Le specifiche non sono mai state esposte al pubblico, prevenendo così l’apertura di una comunità scientifica nel mondo che studiasse gli algoritmi di autenticazione e di cifratura dell’intero modello di sicurezza GSM. Il GSM Consortium ha fatto affidamento sulla sicurezza mediante la segretezza, cioè gli algoritmi sarebbero stati difficili da rompere se non fossero stati pubblicamente disponibili. In accordo con la comunità scientifica, una delle richieste di base per algoritmi di crittografia forti è che la sicurezza dei crittosistemi dipenda solamente dalla chiave. Questo principio è conosciuto come assunzione di Kerckhoffs. L’algoritmo in questione dovrebbe essere pubblicamente disponibile, così che esso possa essere esposto allo scrutinio pubblico. È opinione generale, infatti, che nessuna singola entità possa impiegare abbastanza esperti per competere con la comunità scientifica nella crittoanalisi di un algoritmo. Così gli algoritmi progettati ed implementati in segreto probabilmente saranno in qualche modo crittograficamente deboli e conterranno errori di progettazione. Tuttavia, gli algoritmi GSM sono stati resi pubblici e sono stati ampiamente studiati dalla comunità scientifica. Durante la crittoanalisi degli algoritmi A3, A5 e A8 sono stati scoperti particolari interessanti.

In questo paragrafo si introdurrà il modello di sicurezza GSM, prestando una particolare attenzione al cifrario A5 (ed alla famiglia degli stream cipher a cui A5 appartiene) e si esploreranno alcuni punti vulnerabili di questo modello per mostrare che possono essere attaccati da una persona maliziosa, che potrebbe essere o un operatore di rete o un utente. Si mostrerà, inoltre, che sulla rete GSM è possibile sia intercettare che decifrare una chiamata telefonica a prescindere dalle affermazioni del GSM Consortium. Durante l'analisi dei differenti tipi di attacco al sistema GSM, si mostreranno anche alcuni metodi di intercettazione che possono essere implementati per origliare e decifrare una chiamata telefonica su un GSM. Verranno introdotti sei diversi tipi di attacco. Si forniranno alcuni suggerimenti su come la sicurezza della rete GSM potrebbe essere migliorata in futuro, allo scopo di garantire la privacy agli abbonati GSM.

2 Stream cipher

Un approccio alternativo a quello dei cifrari a blocchi consiste nell’utilizzo degli stream cipher. A differenza dei cifrari a blocchi nei quali la stessa chiave k viene riutilizzata per la cifratura di ogni blocco, l’idea di base degli stream cipher consiste nel generare una sequenza, a partire da k, detta keystream:

z = z1z2….

e nell’utilizzarla per cifrare la stringa

x = x1x2….

del testo in chiaro nel modo seguente:

y = y1y2…. = ez1(x1) ez2(x2)….

dove:

zi = fi(k, x1, x2,…..,xi-1).

Per semplicità si considerano i singoli xi, zi, yi e k Î Z26.

L’elemento zi della sequenza è utilizzato per cifrare xi. Pertanto, per cifrare la stringa x1x2 ….  bisogna calcolare

z1  y z y2 …..

Analogamente per decifrare la stringa y1y2 …  si calcola

z1  x1  z2  x2 …..

Per esempio, le funzioni di cifratura e decifratura potrebbero essere del tipo:

yi = xi + zi mod 26

 xi = yi - zi  mod 26.

Gli stream cipher sono spesso definiti in  Z2. In tal caso le funzioni di cifratura e decifratura possono essere le seguenti:

ezi(xi) = xi + zi mod 2

dzi(yi) = yi - zi mod 2

Associando a “0” il valore booleano “falso”, e ad “1” il valore booleano “vero” allora l'addizione e la sottrazione modulo 2 corrispondono allo XOR, pertanto la cifratura e la decifratura possono essere implementate molto efficientemente in hardware. Un metodo per generare la keystream a partire da m valori k1, …, km, consiste nel fissare i valori per z1,…,zm con zi = kj per ogni i = 1,2,…,m e nel calcolare i valori successivi in base ad una relazione di ricorrenza lineare di grado m:

dove c0, …, cm-1 Î Z2 sono costanti predeterminate che individuano univocamente un polinomio chiamato polinomio delle connessioni che ha la forma seguente:

 c0zm + c1zm-1 + c2zm-2 +  ........  + cm-1z + 1

Questa ricorrenza è detta lineare perché zi+m è funzione lineare dei termini precedenti, ed ha grado m dato che ciascun termine dipende dagli m precedenti. In tal caso la chiave consiste dei 2m valori

(k1, …, km, c0, …, cm-1),

dove   Ki  = zi  per i = 1, …, m.

Esempio

Sia m = 4 e sia la keystream generata nel modo seguente:

zi+4 = zi + zi+1 mod 2

dove i > 1. Se ad esempio si considerano i seguenti valori di k: 1, 0, 0, 0 la keystream corrispondente è:

1, 0, 0, 0, 1, 0, 0, 1, 1, 0, …

Un altro aspetto interessante di questo metodo è che la keystream può essere generata in hardware in modo molto efficiente utilizzando un linear feedback shift register (LFSR).

Si consideri un registro con m stadi. Il vettore (k1, ...…, km) viene usato per l’inizializzazione. Ad ogni istante vengono effettuate contemporaneamente le seguenti operazioni:

1.    k1 è il bit di output del LFSR;

2.    i valori k2, ......, km vengono shiftati a sinistra di una posizione;

3.    viene calcolato il nuovo valore di km, che è

Esempio

Consideriamo il linear feedback shift register relativo all’esempio precedente.

L’inizializzazione dei registri viene fatta in questo modo:

z0 = 1,    z1 = 0,    z2 = 0,    z3 = 0

dopo di che il contenuto del primo registro sarà dato in output come primo bit della keystream, il contenuto degli altri registri sarà shiftato di una posizione a sinistra e lo XOR dei primi due registri verrà inserito nell’ultimo registro.

In generale il funzionamento del linear feedback shift register è illustrato nella seguente figura:

Quando si utilizza uno stream cipher, da un certo istante in poi, i bit della keystream cominciano a ripetersi. L’ampiezza dell’intervallo di ripetizione dei bit si chiama periodo. Il periodo dipende dal polinomio delle connessioni e tanto più è grande, tanto più il cifrario è sicuro. La keystream relativa a questo esempio ha periodo 15 (al massimo possiamo avere 16 combinazioni dei 4 bit, ed inoltre quella con tutti 0 non viene considerata, poiché darebbe luogo ad una keystream composta da soli 0) ed il polinomio delle connessioni ad essa associato è x4 + x3 + 1.

2.1 Cifrario autokey

Questo cifrario può essere considerato un caso particolare di stream cipher in cui la sequenza degli zi è calcolata nel modo seguente: zi =  kj  per i£ m,   zi = xi-m,   per i > m. Le funzioni di cifratura e decifratura sono le seguenti:

yi = xi + zi mod 26

xi = yi - zi mod 26.

 Nel caso in cui la lunghezza della chiave k sia 1, questo tipo di cifrario può essere rotto con soli 26 tentativi.

3 Architettura GSM

Il sistema GSM è stato progettato fondamentalmente come una combinazione di quattro sottosistemi principali [13] [14]:

3.1 Mobile Station (MS)

La stazione mobile si compone di due parti essenziali, il Mobile Equipment (ME), che è sostanzialmente un sistema radio non contenente informazioni correlate all'abbonato e la SIM, la cui programmazione e distribuzione è affidata all'operatore che si garantisce così un completo controllo su tutti i dati legati alla sicurezza.

3.2 Base Station Subsystem (BSS)

La BSS è composta di due parti: BTS (Base Transceiver Station) che è una stazione base con la quale la MS comunica e BSC (Base Station Controller) che agisce come un nodo comune tra le varie BTS.

3.3 Network Subsystem (NS)

L'NS è costituito dai seguenti elementi: Mobile Switching Center (MSC), Visitor Location Register (VLR), Home Location Register (HLR), Autentication Center (AuC) ed Equipment Identity Register (EIR).

Una MSC svolge le funzionalità di un normale nodo di commutazione di una rete, cioè ha in carico una certa area del territorio (controlla quindi tutte le BSC in quella zona) e deve servire tutte le MS che transitano in quell'area, provvedendo quindi, all'impostazione delle chiamate, includendo anche la procedura di autenticazione.

L'MSC fornisce la connessione con le reti fisse, Public State Telephone Network (PSTN), Integrated Services Digital Network (ISDN), Packet Switched Public Data Network (PSPDN), Circuit Switched Public Data Network (CSPDN); per cui il centro di comunicazione MSC è interfacciato da un lato con il BSS e dall'altro con le reti esterne.

Per gestire la mobilità degli utenti l'MSC deve scambiare continuamente informazioni con un database, detto Visitor Location Register (VLR), che memorizza, temporaneamente, le informazioni relative alle MS che si trovano in quell'area.

L'HLR è un database centrale, che memorizza permanentemente sia i dati di abbonamento degli utenti (noti come statici) sia i dati (detti dinamici) che possono variare a seguito di azioni degli utenti stessi (attivazione servizi supplementari, ecc.). L'HLR memorizza anche i parametri di sicurezza che vengono generati dall'AuC.

L'AuC è l'unità funzionale del sistema GSM, incaricata di generare i parametri necessari per l'autenticazione degli utenti, che poi fornisce all'HLR. Si occupa di verificare se il servizio è stato richiesto da un abbonato leggittimo, fornendo sia i codici per l'autenticazione che per la cifratura. L'AuC contiene: il codice IMSI (Interntional Mobile Subscriber Identity), la chiave di autenticazione (Ki), il codice TMSI (Temporary Mobile Subscriber Identity) corrente ed il codice LAI (Location Area Identity) corrente, usati per autenticare i canali radio, oltre ad un generatore di numeri casuali, agli algoritmi A3 e A8.

L'EIR è il database dove sono registrati tutti gli International Mobile Equipment Identity (IMEI), ciascuno dei quali identifica univocamente un ME. Un IMEI può essere invalido quando l'unità mobile risulta rubata, oppure è di tipo non approvato.

3.4 Operation and Support Subsystem (OSS)

L'OSS è costituito dai seguenti elementi: Operation and Maintenance Centre (OMC) e Network service Managment Center (NMC).

L'OMC è responsabile solo della gestione regionale della rete.

L'NMC offre una visibilità globale di tutte le attività di controllo e coordina e gestisce tutti gli OMC presenti nella rete.

 

4 Modello di sicurezza GSM

Il modello di sicurezza GSM è basato su un segreto condiviso tra l’HLR della rete di appartenenza del sottoscrittore e la carta SIM di quest'ultimo. Il segreto condiviso, chiamato Ki, è una chiave di 128 bit. La chiave Ki viene utilizzata sia per l’autenticazione alla rete GSM, sia per la generazione della chiave di sessione a 64 bit Kc, usata per la codifica sul canale via-etere.

Il flusso di dati trasmesso tra la MS e la stazione base (BTS) viene diviso in frame. Ciascun frame contiene 114 bit e rappresenta una parte della comunicazione tra MS e BTS o viceversa. Un nuovo frame viene inviato ogni 4.6 ms ed è identificato con un  numero sequenziale di 22 bit chiamato Fn. Ogni volta che viene inviato un frame, Fn viene incrementato di 1. All'inizio di una trasmissione è necessario che MS e BTS si accordino sul valore iniziale di Fn. Per l'intera durata della comunicazione, vengono inviati due frame alla volta: uno da MS a BTS ed uno da BTS a MS.

Quando la MS vuole comunicare con la rete GSM, invia una richiesta di accesso alla BTS che la inoltra alla MSC. Alla richiesta di identificazione della MS alla rete, l’HLR fornisce alla MSC cinque triple contenenti:

Ogni tripla viene utilizzata per una autenticazione della MS confrontando la SRES inviata dalla MS con la SRES della tripla. Quando tutte le triple sono state utilizzate l’HLR fornisce un nuovo insieme di cinque triple per l’MSC [9].

Autenticazione

Quando la MS entra nell’area di una MSC invia un richiesta di accesso alla rete (vedi sottoparagrafo seguente). L’MSC invia la RAND della prima tripla alla MS. La MS calcola una SRES con l’algoritmo A3 utilizzando la RAND ricevuta dalla MSC, e la chiave Ki che risiede nella SIM. Quindi, la MS invia la SRES alla MSC, che la può confrontare con la SRES contenuta nella tripla dell’HLR. In questo modo la MS si è identificata all’MSC.

La scelta di generare una stringa casuale è dovuta al fatto che se tale stringa non fosse generata, il valore SRES trasmesso dalla MS alla BTS sarebbe sempre lo stesso; si potrebbe, dunque, effettuare un attacco di ripetizione.

Sicurezza della rete

Tutto l'intero costrutto per la sicurezza si fonda su criteri inerenti l'identificazione dell'abbonato, introdotti specificamente con il sistema GSM. L'abbonato è identificato univocamente dal codice IMSI che, unitamente alla chiave personale di autenticazione Ki, costituiscono le credenziali di identificazione. L'innovazione particolare è che le procedure di autenticazione e crittografia al fine di garantire maggiore sicurezza e protezione nel sistema si esplicano in modo che queste informazioni non vengano mai trasmesse sul canale radio. Precisamente, per l'autenticazione si utilizza un meccanismo di tipo challenge-response, mentre per la crittografia dei dati trasmessi si adotta una chiave di sessione Kc, ed anch'essa non viene mai trasmessa sul canale radio. Gli elementi del sistema GSM che intervengono attivamente nella realizzazione delle procedure sono la SIM, il ME, la BSS e l'NS. La SIM contiene il codice IMSI, la chiave personale di autenticazione Ki, l'algoritmo A8 che genera la chiave temporanea di crittografia Kc, l'algoritmo A3 di autenticazione dell'abbonato ed il Personal Identification Number (PIN). Il terminale mobile ME racchiude l'algoritmo A5 di crittografia. Nella rete GSM le informazioni sono distribuite tra le varie componenti. Nella BTS sono predisposti l'algoritmo A5 e, in fase di crittografia, la chiave Kc. Alla base dei processi di crittografia ed autenticazione c'è l'unità funzionale AuC che utilizza i codici TMSI/IMSI, il codice LAI (Location Area Identity), la chiave Ki, gli algoritmi A3 ed A8 oltre ad un algoritmo per la generazione di numeri pseudo-casuali. L'AuC memorizza nei database VLR ed HLR i parametri di sicurezza.

Anonimia - Riservatezza dell'identità dell'abbonato

L'anonimia consiste nell'uso di un temporary identifier specifico per l'MS. Difatti, il GSM dovendo provvedere a proteggere l'IMSI di un utente sull'interfaccia aerea, procede assegnando un ID temporaneo (TMSI), che è un numero di identificazione provvisorio usato durante l'aggiornamento dell'ubicazione per proteggere la vera identità di chi chiama. 

Si tenga conto che sia l'IMSI che il TMSI, sono immagazzinati direttamente nella SIM: il primo in modo permanente, il secondo in un'area di memoria riscrivibile.

Le procedure di sicurezza sono preordinate a non trasmettere mai sul canale radio le credenziali di identificazione (codice IMSI e chiave Ki) per evitare, ad esempio, che possa essere monitorata la posizione dell'utente intercettandone l'identità. D'altro canto è evidente che la rete può autenticare la SIM solo se ne conosce l'identità. Pertanto, nei casi in cui non vi dovessero essere altri modi per procedere all'identificazione, il codice IMSI è utilizzato per aprire la sessione.

Ne consegue che, quando una mobile station entra in un'area MSC/VLR diversa e accende il segnale radio utilizzando per la prima volta la SIM, obbligatoriamente viene usata la sua vera identità (IMSI) che viene immediatamente sostituita con la sua identificazione provvisoria (TMSI), ed è proprio quest'ultima ad essere resa pubblica nella rete. Infatti, non appena si conclude con successo l'autenticazione, la rete assegna alla SIM un TMSI e lo trasmette in forma cifrata alla MS dove viene poi decifrato. La MS risponde confermando l'avvenuta ricezione e memorizza il TMSI nella SIM. Da questo momento, per tutte le comunicazioni successive, il codice TMSI è utilizzato al posto del codice IMSI.

Le riallocazioni sono temporalmente preordinate, cioè avvengono in istanti specifici stabiliti direttamente dall'operatore, ad esempio ad ogni accesso alla rete. Il codice TMSI è valido esclusivamente nella Location Area (LA) in cui è stato rilasciato; di conseguenza, per le comunicazioni al di fuori della LA, è necessario ricorrere all'utilizzo del LAI in aggiunta al TMSI. Ogni volta che si compie un Location Updating il VLR assegna una nuova TMSI alla MS e la invia insieme al messaggio che comunica l'esatto aggiornamento della localizzazione (Location Updating Accept). Alla ricezione di questo messaggio, la MS provvede a rispondere con un preciso messaggio di conferma (TMSI Reallocation Complete). 

Si osservi che il codice TMSI, quando il processo di crittografia è stato attivato può essere riallocato anche in occasione di altri accessi alla rete. Ciò che avviene in proposito è che la rete trasmette una esplicita TMSI Reallocation Request cifrata; la MS risponde con una TMSI Reallocation Confirmation cifrata. Nell'eventualità che per vari motivi, il codice TMSI inviato da una MS non venga riconosciuto dalla rete, ad esempio a causa di un fallimento della fase di autenticazione, si attiva la procedura di Identity Request tramite la quale viene richiesto alla MS l'invio del proprio IMSI.

Per una maggiore chiarificazione si consideri la seguente figura, che illustra il processo di assegnazione di un nuovo TMSI (TMSI-n) come risultato di un aggiornamento della locazione.

Pertanto, si noti che il processo comincia con la richiesta della MS per un aggiornamento della locazione con il TMSI-n. Dopo che la MS riceve il TMSI-n, si attiva il processo di riconoscimento di TMSI al BSS che viene infine spedito al VLR dall'MSC. In questo modo la protezione è ottenuta usando un'identità alias al posto dell'identità permanente dell'abbonato.

Generazione della chiave di sessione

La MS allora genera una chiave di sessione Kc con l’algoritmo A8, usando la stessa RAND utilizzata per l'autenticazione e la Ki memorizzata nella SIM. La BTS riceve Kc dalla MSC. Ora tutto ciò che viene trasmesso sul canale di comunicazione via-etere tra BTS ed MS viene cifrato utilizzando la keystream generata con la chiave Kc mediante l'algoritmo A5.

Tale algoritmo viene inizializzato con la chiave Kc ed il numero di frame da cifrare, generando così una keystream differente per ogni frame. Questo significa che una telefonata può essere decifrata qualora l’attaccante conoscesse Kc in quanto il numero di frame viene trasmesso in chiaro. La stessa Kc viene utilizzata fin quando l’MSC non identifica nuovamente la MS, nel qual caso ne viene generata una nuova (si veda paragrafo 4.1).

In una rete GSM viene cifrato solo il traffico via-etere. Una volta che i frame sono stati ricevuti dalla BTS, essa li decifra e li invia in chiaro alla rete centrale dell’operatore [9].

4.1 A3, l'algoritmo di autenticazione della MS

La procedura di autenticazione si avvia ogniqualvolta la MS  si connette alla rete. In particolare l'autenticazione avviene:

A3 è l’algoritmo di autenticazione utilizzato nel modello di sicurezza GSM. La sua funzione è di generare SRES in risposta alla RAND che la MSC ha ricevuto dall'HLR. L’algoritmo A3 prende in input la RAND dalla MSC e la chiave segreta Ki e genera un output di 32 bit che è la risposta SRES. Sia RAND che Ki sono lunghe 128 bit.

4.2 A8, l'algoritmo per la generazione della chiave di sessione

A8 è l'algoritmo utilizzato per generare la chiave di sessione Kc dalla RAND ricevuta dalla MSC e dalla chiave segreta Ki. L’algoritmo A8 prende due input a 128 bit e genera un output di 64 bit. Questo output è la chiave di sessione Kc [6]. La BTS riceve la stessa Kc dalla MSC. L'HLR è in grado di generare la Kc poiché esso conosce sia RAND che la chiave segreta Ki. Le chiavi Ki sono mantenute in un database per tutti gli abbonati GSM dal proprio operatore di rete. Una chiave di sessione Kc, è utilizzata fin quando la MSC decide di autenticare nuovamente la MS.

Sia l’A3 che l’A8 sono memorizzati nella SIM. Questo significa che l’operatore può decidere quali algoritmi utilizzare indipendentemente dai produttori di hardware e dagli altri operatori. Infatti, l’autenticazione funziona anche negli altri paesi, poiché le reti locali chiedono le 5 triple all’HLR della rete di appartenenza dell’abbonato. Così la rete locale non deve sapere niente riguardo gli algoritmi A3 ed A8 utilizzati.

4.3 COMP128, l'algoritmo di autenticazione e generazione della chiave di sessione

Invece di utilizzare due algoritmi distinti, A3 ed A8, la maggior parte degli operatori GSM utilizza un unico algoritmo, chiamato COMP128. COMP128 prende in input RAND e Ki,  e genera 128 bit di output, di cui i primi 32 bit formano la risposta SRES e gli ultimi 54 bit formano la chiave di sessione Kc [6] .

Si noti che la lunghezza della chiave Kc a questo punto è di 54 bit invece di 64, che è la lunghezza della chiave data come input all’algoritmo A5. Alla chiave generata dalla funzione COMP128 vengono aggiunti dieci bit posti a zero ottenendo, così,  una chiave di 64 bit con gli ultimi 10 bit azzerati. Questo riduce effettivamente lo spazio delle chiavi da 264 a 254. Si è riscontrato che questo avviene in tutte le implementazioni di A3/A8, incluse quelle che non usano COMP128 per la generazione della chiave e sembra che sia una caratteristica "voluta" delle implementazioni dell’algoritmo A8 [6].

Operatori

Algoritmi
Vodafone (Australia) Sconosciuto
Libertel (Olanda) Sconosciuto
PTT (Olanda) Sconosciuto
Deutsche Telekom (Germania) Sconosciuto
E-Plus (Germania) Sconosciuto

Tabella 1: lista operatori che non usano COMP128

 

4. 4 A5/1, l'algoritmo di cifratura

L’algoritmo A5 è lo stream cipher utilizzato per cifrare i frame che vengono inviati via-etere. Lo stream cipher viene inizializzato ogni volta che un frame viene inviato con la chiave di sessione Kc e con il numero di frame da cifrare. La stessa Kc viene utilizzata per tutta la sessione, durante la quale il numero del frame di 22 bit cambia. In questo modo viene generata un’ unica keystream per ciascun frame [1].

L’algoritmo A5, utilizzato nei paesi europei, consiste di tre LFSR di lunghezze differenti [11], organizzati in modo non lineare, che corrispondono ai tre polinomi delle connessioni:

x19 + x5 + x2 + x + 1

x22 + x + 1

x23 + x15 + x2 + x + 1

Tali polinomi sono stati scelti primitivi in modo che i corrispondenti registri abbiano periodo massimale. Il periodo massimo di un registro a k bit è 2k– 1, che è la cardinalità dell'insieme delle sequenze di k bit, tranne quella composta da tutti 0.

La lunghezza totale dei tre LFSR è di 64 bit. Lo XOR dei bit meno significativi dei tre registri rappresenta un bit della keystream. Gli LFSR sono lunghi rispettivamente 19, 22 e 23 bit e le funzioni utilizzate sono polinomi di feedback sparsi. Ad ogni passo ciascun registro viene shiftato se il suo bit centrale concorda con il valore di maggioranza dei bit centrali dei tre registri. Per esempio, se i bit centrali dei tre registri sono rispettivamente 0,1 e 1, gli ultimi due registri vengono shiftati, invece se i bit centrali sono rispettivamente 0, 1 e 0, allora vengono shiftati il primo ed il terzo registro. Così, ad ogni round, vengono shiftati almeno due registri [8].

E’ evidente che l’attaccante non è in grado di individuare quali registri siano stati shiftati e quali no, dato che si effettua lo shift di due o tre registri, ma non è possibile individuare quali.

I tre LFSR vengono inizializzati con una combinazione non lineare della chiave di sessione Kc ed il numero di frame  (vedi capitolo 4). I 64 bit di Kc vengono inizialmente caricati nei tre registri r1, r2 ed  r3  bit a bit, in modo sequenziale. Durante il caricamento dei bit della chiave, la regola di shift dei registri che contengono i bit di maggioranza è disabilitata. Il caricamento dei bit viene mostrato nel seguente esempio:

Dopo il caricamento dei bit della chiave di sessione ciascuno dei 22 bit del numero di frame viene messo in XOR con i tre valori di feedback dei registri stessi. Durante il caricamento di ciascun bit del numero di frame, vengono shiftati i registri il cui bit centrale concorda con il bit di maggioranza. Dopo che i registri sono stati inizializzati con la chiave di sessione Kc ed il numero del frame corrente:

Ad ogni passo, viene prodotto un bit della keystream. L'algoritmo restituisce una keystream di 228 bit. La cifratura effettiva avviene mettendo in XOR 114 bit della keystream e 114 bit del messaggio in chiaro. Successivamente, l’algoritmo A5 viene reinizializzato con la stessa chiave Kc ed il numero del frame successivo [1] [7].

Fin dai primi sistemi GSM, altre varianti dell’algoritmo A5 sono state progettate ed implementate. La motivazione principale è stata che l’algoritmo di cifratura A5 era troppo robusto per essere esportato in Medio Oriente. Così, il primo algoritmo A5 fu rinominato A5/1. Gli altri algoritmi includono l’A5/0, che non cifra affatto, ed A5/2, un algoritmo di cifratura più debole.

In generale, gli algoritmi A5 successivi all’A5/1 sono stati chiamati A5/x. Molti degli algoritmi A5/x sono considerevolmente più deboli dell’A5/1, per il quale la complessità temporale di un attacco è al più pari a 254 operazioni, come visto nel paragrafo 4.3. La complessità temporale stimata per un attacco ad A5/2 è molto più bassa, nell’ordine di 216 operazioni. Questo cifrario viene utilizzato negli USA. Le altre implementazioni di A5 non sono ancora conosciute pubblicamente. Così, non ci sono elementi reali da discutere riguardo ad esse, soltanto congetture ed assunzioni [2].

 

5. Critiche sulla debolezza della chiave di A5/1

Un gruppo di ricercatori dell’Università della California ritiene che la semplicità nel rompere l’A5 sia dovuta al fatto che il governo lo abbia deliberatamente indebolito per fini di sorveglianza delle comunicazioni.

Due ricercatori della California University di Berkeley  sono riusciti a rompere il sistema di  crittografia GSM (A5 + A3/A8) utilizzando un computer per determinare il numero di identità segreto memorizzato nella SIM (Agosto 98).

Se dei criminali, potessero rompere il metodo di crittografia GSM, essi potrebbero clonare un telefono protetto da tale codifica, cioè rilevare un numero di telefono ed utilizzarlo in una comunicazione fraudolenta da un altro telefono. In ogni caso, sia i ricercatori che le compagnie telefoniche hanno minimizzato circa l’effettiva minaccia di clonazione di telefoni digitali, se paragonate alla vulnerabilità dei telefoni cellulari analogici.

I ricercatori sostengono che il cracking del GSM ha richiesto al più 10 ore di prove elettroniche e computazioni ad alta potenza.

La cosa più intrigante è che, apparentemente, la chiave usata dal  GSM  sia stata intenzionalmente indebolita durante la fase di progettazione per permettere alle agenzie governative di “decifrare”  le conversazioni tra telefoni cellulari.

Sebbene l’A5 utilizzi una chiave a 64 bit, i ricercatori hanno scoperto che gli ultimi 10 bit sono settati a 0 (vedi paragrafo 4.3). Questo  significa che con computer estremamente potenti, a disposizione delle varie agenzie governative, potrebbe essere possibile, abbastanza velocemente, decodificare una conversazione.

Per anni, è girata voce che le industrie di computer siano state persuase o forzate dalle agenzie spia del governo ad indebolire matematicamente i sistemi di sicurezza delle comunicazioni o installare trappole segrete. Alcuni sospetti riguardavano anche l’NSA (National Security Agency), e la CIA (Central Intelligence Agency).

L’NSA è una delle agenzie maggiormente sospettate, dato che la maggior parte  delle sue missioni è quella di intercettare  chiamate telefoniche.

 

6 Attacchi di intercettazione

Una questione interessante riguardo al modello di sicurezza GSM concerne se sia possibile decifrare una chiamata, dato che l'algoritmo COMP128 è stato rotto (vedi paragrafo 6.4).

Vari scienziati nel mondo sembrano essere unanimi sul fatto che l’intercettazione e la decodifica real-time di una chiamata via-etere sia ancora impossibile nonostante lo spazio delle chiavi sia ridotto [2]. Ci sono, tuttavia, altri tipi di attacchi al sistema che sono attuabili e sembrano essere minacce molto reali. Sono stati, infatti, implementati alcuni attacchi  che non sfruttano nessuno dei difetti degli algoritmi di sicurezza.

 

6.1 Attacco Brute-Force

Un attacco di forza bruta in real-time contro il sistema di sicurezza GSM non è realizzabile, come già affermato. La complessità in tempo di tale attacco è di 254 operazioni. Ciò non è realizzabile in quanto richiede troppo tempo per decifrare le chiamate sui GSM  in tempo reale. Potrebbe, però, essere possibile memorizzare i frame tra la  MS ed la BTS e lanciare l’attacco in un momento successivo.

Se avessimo un chip della classe Pentium III con approssimativamente 20 milioni di transistor e l’implementazione di tre LFSR richiederesse circa 2000 transistor, potremmo avere un insieme di 10000 implementazioni parallele di A5/1 su di un chip [10]. Se il chip fosse clockato a 600 MHz ed ogni implementazione di A5 potesse generare un bit di output per ogni ciclo di clock e avessimo la necessità di generare 100+114+100+114 bit di output, potremmo tentare approssimativamente 600.000.000/428»1.4 milioni di chiavi al secondo per ciascuna implementazione. Uno spazio delle chiavi di cardinalità 254 richiederebbe così circa 254/(1.4x106x10.000)»1.300.000 secondi ovvero 15 giorni, con un chip.

 

6.2 Attacco Divide-and-Conquer

Un attacco divide-and-conquer riesce a ridurre la complessità dai 254 tentativi dell’attacco di forza bruta a 245, che è un cambiamento eccezionale (infatti è 29 = 512 volte più veloce) [2]. L’attacco divide-and-conquer è di tipo known-plaintext. L’attaccante tenta di determinare lo stato iniziale degli LFSR da una sequenza di keystream conosciuta. Egli ha bisogno di conoscere solo 64 bit consecutivi della keystream che vengono calcolati dalle coppie testo in chiaro-testo cifrato a lui note [8].

In breve, l’attacco divide-and-conquer è implementato indovinando il contenuto dei due LFSR più corti e computando il terzo LFSR dalla keystream conosciuta mediante la risoluzione di equazioni lineari appropriate. Questo attacco richiederebbe in media 240 tentativi, nell'ipotesi in cui gli shift dei primi due registri non fossero dipendenti dal terzo registro. Comunque, J.Golic ha proposto un altro attacco divide-and-conquer basato sulle stesse assunzioni con la complessità media di circa 240. Golic ha mostrato che soltanto 262.32 stati interni possono essere raggiunti a partire dai 264 stati iniziali. Basandosi su queste assunzioni, egli ha descritto come ottenere delle equazioni lineari indovinando n bit negli LFSR. Risolvendo queste equazioni lineari, si potrebbero recuperare gli stati iniziali dei tre LFSR. La complessità di risoluzione delle equazioni lineari è 241.16 tentativi. In media, si potrebbero calcolare gli stati interni nel 50% dei casi con 240.16 tentativi [8].

Golic propose anche un Attacco Trade-Off Tempo-Memoria basato sul Paradosso del Compleanno [8]. L’obiettivo dell’attacco è di recuperare gli stati interni dei tre LFSR in un dato istante per una sequenza di keystream conosciuta corrispondente ad un numero di frame noto, ricostruendo così la chiave di sessione Kc.

 

6.3 Accesso ai segnali della rete

I due esempi precedenti affermano chiaramente che l’algoritmo A5 non è crittograficamente sicuro, poiché esiste un attacco più efficiente dell’attacco di forza bruta (che di per se non è molto difficile da implementare con l’hardware attualmente disponibile). Tuttavia, l’algoritmo è sicuro abbastanza da prevenire l’intercettazione di chiamate via-etere e la decifratura in real-time. Sfortunatamente, le onde radio tra la MS e la BTS non sono i soli punti vulnerabili nel sistema GSM. 

Come affermato in precedenza, le trasmissioni sono cifrate solo tra la MS e la BTS. Dopo la BTS, i segnali vengono trasmessi  in chiaro nelle operazioni di rete [9].

Questo apre nuove possibilità. Se l’attaccante può accedere ai segnali degli operatori della rete, egli sarà capace di ascoltare ogni cosa che viene trasmessa, includendo la chiamata telefonica in corso così come, eventualmente, RANDSRES  e Kc. La rete di segnalazione SS7 utilizzata dagli operatori della rete GSM è completamente insicura se l’attaccante ne guadagna l’accesso diretto.

In un altro scenario, l’attaccante potrebbe provare ad accedere all’HLR di una particolare rete. Se l’attaccante riuscisse ad  accedere all’HLR, sarebbe capace di recuperare le Ki di tutti gli abbonati di una particolare rete.

Accedere ai segnali della rete non è molto difficile. Sebbene le BTS siano di solito connesse alle BSC attraverso un cavo, alcune di esse sono connesse alle BSC per mezzo di microonde o anche di un link satellitare. Sarebbe relativamente facile accedere a tale link con il giusto tipo di attrezzatura. Molte delle attrezzature disponibili per origliare i canali GSM sembrano utilizzare questa particolare vulnerabilità [12]. Tuttavia le attrezzature specifiche sono disponibili solo a persone autorizzate.

Non è inoltre esclusa la possibilità di accedere al cavo di uscita della BTS. Questa potrebbe essere una minaccia reale. Un attacco, se implementato con attenzione, potrebbe non essere rilevato per molto tempo. L’abilità di attingere i dati trasmessi tra la BTS e la BSC renderebbe l’attaccante capace sia di monitorare le chiamate in corso origliando sul canale, che di recuperare la chiave di sessione Kc, intercettando la chiamata via-etere e decifrandola on-the-fly. Una volta che l’attaccante ha individuto Kc, la cifratura real-time non è un problema.

Un altro approccio riguarda l’ingegneria sociale. Questo approccio non dovrebbe essere sottovalutato sebbene sembri ridicolo. L’attaccante potrebbe farsi passare per un addetto alle riparazioni o simile, entrare nell’edificio appropriato ed istallare un filo di intercettazione. Egli potrebbe anche corrompere un ingegnere che lo faccia al posto suo o che gli dia tutte le Ki di tutti gli abbonati di quel particolare operatore. Le possibilità sono innumerevoli e reali. 

 

6.4 Recupero della chiave dalla SIM

La sicurezza dell’intero modello GSM è basata sulla chiave segreta Ki. Se la chiave venisse scoperta l’intero accesso alla rete sarebbe compromesso. Una volta recuperata la chiave Ki, l’attaccante non solo può ascoltare le chiamate dei sottoscrittori, ma anche addebitare le proprie chiamate sul conto dell'abbonato di cui si è recuperata la chiave segreta. Se due telefoni con lo stesso ID inoltrano una chiamata nello stesso istante, la rete GSM lo nota:

Se l’attaccante è interessato solo all’ascolto delle chiamate dell'abbonato resta invisibile alla rete GSM.

La SDA e l'ISAAC hanno scoperto un difetto nell’algoritmo COMP128 che rende capaci effettivamente di recuperare la chiave segreta Ki, dalla SIM [4] [5]. L’attacco richiede l'accesso fisico alla SIM ed è di tipo chosen-challange. Tale attacco sfrutta le debolezze dell'algoritmo COMP128 in modo da rivelare informazioni circa Ki quando i RAND appropriati gli vengono forniti in input. La SIM può essere attaccata utilizzando un lettore di smart card connesso ad un PC. Il PC deve lanciare circa 217.5 challange alla SIM, per generare le SRES e le chiavi di sessione Kc. La chiave segreta può essere dedotta dalle risposte SRES mediante la crittoanalisi differenziale. Il lettore di smartcard utilizzato per implementare l’attacco lancia 6.25 query al secondo alla SIM. Così l’attacco richiede circa otto ore per essere portato a termine. In questo modo, l’attaccante ha bisogno soltanto di avere l’accesso fisico alla SIM bersaglio per almeno otto ore.

Anche questa vulnerabilità è applicabile nell’ambito dell’ingegneria sociale. Si può assumere che un operatore GSM corrotto voglia clonare delle SIM card in questo modo per poi venderle a terzi. Si potrebbe anche vendere una SIM clonata a determinate persone allo scopo di intercettarne le chiamate successivamente. Un impiegato corrotto potrebbe anche fornire all’attaccante la SIM card della vittima, così che possa clonarla ed in seguito decifrare le chiamate del possessore. Questi sono scenari realistici nei quali la vulnerabilità trovata in COMP128 compromette l’intero modello di sicurezza del sistema GSM.

 

6.5 Recupero della chiave via etere

I ricercatori dell'SDA e dell’ISAAC sono sicuri che l'attacco descritto nel paragrafo 6.4 possa essere lanciato anche via etere. Tuttavia, essi non possono confermare i loro sospetti, perché le attrezzature necessarie per farlo sono illegali negli USA. L’attacco via etere è basato sul fatto che la MS deve rispondere ad ogni challange inviatagli dalla BTS [4]. Un attaccante potrebbe impersonare la BTS legittima inviando alla MS obiettivo delle challenge per risalire alla chiave segreta mediante le risposte a queste challenge. Non si conosce la durata dell’attacco quando viene condotto via etere. Le stime variano da otto a tredici ore [4].

L’attacco potrebbe essere condotto in una metropolitana, dove il segnale della BTS legittima non è disponibile, ma il telefono è ancora acceso. Il sottoscrittore potrebbe non accorgersi di tale attacco nonostante il fatto che la batteria del telefono si scarichi un po’ più velocemente potrebbe renderlo sospettoso. L’attacco potrebbe anche essere eseguito in più volte: invece di eseguire un unico attacco di otto ore. L’attaccante potrebbe testare il telefono per venti minuti ogni giorno su di un percorso abituale della vittima.

6.6 Recupero della chiave dall’AuC

Lo stesso attacco utilizzato per il recupero di Ki da una SIM card può essere utilizzata per recuperare la chiave Ki dall’AuC. Quest'ultimo deve rispondere alle richieste fatte dalla rete GSM e restituire triple valide da utilizzare nell' autenticazione della MS. La procedura di base è identica alla procedura utilizzata nella MS per accedere alla SIM. La differenza è che l’AuC è molto più veloce nel processare le richieste di quanto non lo sia la SIM card. La sicurezza dell’AuC gioca un ruolo fondamentale riguardo alla possibilità di eseguire o meno questo attacco, ma questo esula dagli scopi di questa trattazione. 

 

7 Possibili miglioramenti

La sicurezza potrebbe essere migliorata in alcuni punti con misure relativamente semplici. L’operatore potrebbe utilizzare un altro algoritmo crittograficamente sicuro al posto di COMP128. Questo potrebbe richiedere la distribuzione di nuove SIM a tutti i sottoscrittori e l’aggiornamento del software dell'HLR. Ciò effettivamente neutralizzerebbe l'attacco a COMP128 (vedi paragrafo 6.4 e 6.5). Tale miglioramento sarebbe il più facile da introdurre, dato che l’operatore di rete non avrebbe bisogno né del supporto dei costruttori hardware e software, né di quello del GSM Consortium.

Un’altra soluzione sarebbe quella di impiegare una nuova implementazione di A5 con una forza crittografica tale che un attacco brute-force (vedi paragrafo 6.1) non sia ammissibile in ogni caso. Questo miglioramento richiederebbe la cooperazione del GSM Consortium. I costruttori hardware e software dovrebbero realizzare nuove versioni dei loro software e hardware compatibili con il nuovo algoritmo A5.

Un altro possibile miglioramento sarebbe quello di cifrare il traffico tra gli operatori della rete centrale e tra le componenti della rete. Ciò neutralizzerebbe gli attacchi ai segnali della rete (vedi paragrafo 6.3). Questa soluzione potrebbe probabilmente essere implementata anche senza l’approvazione del GSM Consortium, ma sarebbe ancora richiesta la cooperazione dei costruttori hardware. 

In definitiva, nessuno dei miglioramenti precedenti è troppo difficile da implementare. Essi presentano tutti nuove spese prevalentemente a carico degli operatori di rete e non sono, quindi, molto allettanti dal loro punto di vista. Così, questi miglioramenti non saranno implementati fino a quando l’insicurezza delle reti GSM non diventi di pubblico dominio e gli operatori di rete non siano forzati a migliorare la sicurezza della rete. Tutti e tre i miglioramenti sarebbero necessari per la sicurezza della rete contro tutti gli attacchi introdotti in questa trattazione.

 

8 Conclusioni

Il modello di sicurezza del GSM è stato rotto a più livelli ed è, così, vulnerabile ai numerosi attacchi contro parti differenti della rete dell’operatore.

Anche assumendo che tutti gli algoritmi di cifratura non siano stati rotti, l’architettura GSM sarebbe ancora vulnerabile agli attacchi che hanno come obiettivo la rete centrale dell’operatore o l’HLR ed ai vari ambiti dell’ingegneria sociale nei quali l’attaccante corrompe un impiegato dell’operatore, ecc.

Inoltre, è stato provato che gli algoritmi di cifratura che vengono utilizzati dal sistema GSM sono difettosi. L’algoritmo A5 utilizzato per la cifratura del canale di trasmissione via-etere è vulnerabile agli attacchi known-plaintext e divide-and-conquer e lo spazio delle chiavi, che è stato intenzionalmente ridotto, è abbastanza piccolo da rendere ammissibile anche un attacco brute-force. Dato che l'algoritmo COMP128 utilizzato dalla maggior parte delle reti GSM è difettoso, se fossero fondate le affermazioni dell'ISAAC, la chiave segreta Ki potrebbe essere recuperata con un attacco chosen-challange in poche ore.

Non si può assumere che il modello GSM fornisca una sicurezza completa contro un eventuale attaccante. Le risorse necessarie dipendono dall’attacco scelto. Così, non si può fare affidamento solo sul modello di sicurezza GSM qualora si trasferiscano dati confidenziali sulla rete.

In aggiunta alla possibilità di intercettazione di una chiamata, anche il difetto della funzione COMP128 rende il cloning della SIM una minaccia, abilitando così un attaccante ad effettuare chiamate a spese di qualcun altro.

Comunque, la realtà è che sebbene lo standard GSM sia stato ideato per correggere i difetti dei sistemi di telefonia mobile analogici, tali obiettivi non sono stati raggiunti. Lo standard GSM corrente e la sua implementazione permettono sia il cloning dell’identità del sottoscrittore che l’intercettazione di una chiamata [3]

 


 

RIFERIMENTI

[1]

Anderson Ross, A5 - The GSM Encryption Algorithm, 17.6.1994
< http://chem.leeds.ac.uk/ICAMS/people/jon/a5.html >

[2]

Anon., Crack A5

< http://jya.com/crack-a5.htm >

[3]

Anon., GSM Alliance Clarifies False & Misleading Reports of Digital Phone Cloning

< http://jya.com/gsm042098.txt >

[4]

Anon., GSM Cell phones Cloned
< http://jya.com/gsm-cloned.htm >

[5]

Anon., GSM Cloning
< http://www.isaac.cs.berkeley.edu/isaac/gsm-faq.html >

[6]

Briceno M. & Goldberg I. & Wagner D., An Implementation of the GSM A3A8 Algorithm
< http://www.scard.org/gsm/a3a8.txt >

[7]

Briceno M. & Goldberg I. & Wagner D., A Pedagogical Implementation of A5/1
< http://www.scard.org/gsm/a51.html >

[8]

Golic J. Dj., Cryptanalysis of Alleged A5 Stream Cipher
< http://jya.com/a5-hack.htm >

[9]

Margrave David, GSM Security and Encryption
< http://www.net-security.sk/telekom/phreak/radiophone/gsm/gsm-secur/gsm-secur.html >

[10]

Racal Research Ltd., GSM System Security Study, 10.6.1988
< http://jya.com/gsm061088.htm >

[11]

Schneier B., Applied Cryptography, 2nd Ed., Wiley, New York, 1996

[12]

Lauri Pesonen, GSM Interception, 21.11.1999;

<http://tool.tky.hut.fi/~smile/netsec.html> on the Internet

<netsec.html> local

[13]

John Scourias, Overview of the Global System for Mobile Communications, 19.5.1995;

PDF format: gsmreport.pdf 

PostScript format: gsmreport.ps 

Overview of the Global System for Mobile Communications

< gsmreport.html > local

< http://ccnga.uwaterloo.ca/~jscouria/GSM/gsmreport.html > on the Internet

Overview of the GSM Cellular System Extended Abstract

< trio.html > local

< http://ccnga.uwaterloo.ca/~jscouria/GSM/trio.html > on the Internet

[14]

Javier Gozàlvez Sempere, An Overview of the GSM System

< http://www.comms.eee.strath.ac.uk/~gozalvez/gsm/gsm.html >

 

 


 

GLOSSARIO

A3

L’algoritmo di autenticazione utilizzato nel sistema GSM.

A5

L’algoritmo di crittografia utilizzato nel sistema GSM.

A8

L’algoritmo di generazione della chiave utilizzato nel sistema GSM. 

AuC

Authentication Center. Il registro AuC viene utilizzato a scopi di sicurezza. Esso fornisce i parametri necessari alle funzioni di autenticazione e crittografia (RAND, SRES e Kc).

BSC

Base Station Controller.  La BSC agisce come un nodo comune tra le varie BTS.

BSS

Base Station Subsystem. La BSS connette la stazione mobile e l’NS. La BSS è composta di due parti:

  • Base Transceiver Station (BTS) o Base Station.

  • Base Station Controller (BSC).

BTS

Base Transceiver Station,  stazione base con la quale la MS comunica.

COMP128

Algoritmo che viene correntemente utilizzato nella maggior parte delle reti GSM al posto di A3 ed A8.

EIR

Equipment Identity Register. Database che memorizza tutti gli IMEI

GSM

Global System for Mobile communications, un sistema di telefonia mobile basato su celle radio multiple (rete cellulare di telefonia mobile).

HLR

Home Location Register. L’HLR è parte dell’AuC. L’HLR fornisce all’MSC delle triple che specificano una RAND, una SRES ed una Kc basate sulla chiave Ki e sulla RAND di un abbonato specifico. L’HLR si occupa di verificare se il servizio è stato richiesto da un abbonato leggittimo

IMEI

International Mobile Equipment Identity. Codice che identifica univocamente una ME.

IMSI

International Mobile Subscriber Identity. Codice che identifica univocamente un abbonato. È contenutto nella SIM.

ISAAC

Internet Security, Applications, Authentication and Cryptography. Un piccolo gruppo di ricercatori alla Computer Science Division alla University of California, Berkeley. < http://www.isaac.cs.berkeley.edu/ >

Kc

La chiave segreta di sessione usata per cifrare il traffico via-etere tra la BTS e la MS. La Kc viene calcolata a partire dalla Ki e dalla RAND inviata dalla MSC utilizzando l’algoritmo A8. La MS e l’HLR calcolano entrambi la Kc indipendentemente l’una dall’altra. La Kc non viene mai trasmessa via-etere.

Ki

Ki è la chiave segreta condivisa tra la SIM e l’HLR della rete di appartenenza dell’abbonato.

LSB

Bit meno significativo.

LFSR

Linear Feedback Shift  Register. Un registro che genera un bit di output in base ai suoi stati precedenti e ad un polinomio di feedback.

ME

Mobile Equipment. Il telefono in cui inserire la SIM. Contiene l'algoritmo di cifratura A5.

MS

Mobile Station. L'insieme di ME e SIM.

MSC

Mobile services Switching Center, la componente centrale dell’NS. La MSC esegue le funzioni di switching della rete. Fornisce anche una connessione con altre reti.

NMC

Nedtwork service Managment Center. Sottosistema dell'OSS che offre una visibilità globale di tutte le attività di controllo. Coordina e gestisce tutti gli OMC presenti nella rete

NS

Network Subsystem, il suo ruolo principale è quello di gestire le comunicazioni tra utenti mobili ed altri utenti, quali utenti mobili, utenti ISDN, utenti della telefonia fissa, ecc.. Include anche i database necessari allo scopo di memorizzare informazioni  riguardanti i sottoscrittori e gestire la loro mobilità.

OMC

Operation and Maintenance Centre. Sottosistema dell'OSS responsabile della gestione regionale della rete.

OSS

Operation and Support Subsystem. Sottosistema di esercizio e manutenzione che sovraintende al corretto funzionamento e settaggio della rete GSM.

RAND

Un numero di 128 bit generato casualmente, che serve come seme per l'inizializzazione degli algoritmi A3 e A8.

SDA

The Smartcard Developers Association è un’organizzazione senza scopi di lucro che cerca di fornire informazioni di pubblico dominio sulle smart card.

< http://www.scard.org/ >

SIM

Subscriber Identity Module. La SIM identifica un sottoscrittore. Il sottoscrittore può utilizzare più telefoni GSM con la stessa SIM. Tutte le chiamate vengono addebitate sullo stesso conto ed il numero di telefono del sottoscrittore resta lo stesso. La carta SIM contiene l'IMSI, la Ki e gli algoritmi A3 ed A8.

SRES

Signed RESponse. Questa è la risposta che la MS restituisce alla richiesta di autenticazione fatta dall’MSC.

SS7

Signaling System 7 viene utilizzata in molte reti intelligenti come un protocollo di segnali. SS7 è definito da ITU-T.

TMSI

Temporary Mobile Subscriber Identity. Numero provvisorio di identificazione della MS.

VLR

Visitor Location Register. Database utilizzato dall'AuC per l'assegnazione di un nuovo TMSI alla MS in occasione di Location Updating

 


 

Codice A5

Descrizione dell'algoritmo in PDL

(carica la chiave segreta Kc)

FOR ogni bit della chiave segreta from 1 to 64
	carica il bit nella corrispondente posizione nell'LFSR
END FOR
 
(Carica il numero di frame)
FOR ogni bit del numero di frame from 1 to 22
	shift_bits = f()
	FOR ogni registro i, from 1 to 3
		Esegui lo XOR del bit della chiave pubblica nell'LSB
		IF il bit i dello shift_bits is set
			THEN Shift
		END IF
	END FOR
END FOR
 
(produce entrambi gli stream di cifratura e decifratura)
FOR i from 1 to 2
 
	(esegui shift adizionali)
	FOR j from 1 to 100
		shift_bits = f()
	FOR ogni registro k from 1 to 3
		IF il bit k dello shift_bits is set
			THEN Shift
		END IF
	END FOR
 
	(output stram di 114 bits)
	FOR j from 1 to 114
		shift_bits = f()
		FOR ogni registro k from 1 to 3
			IF bit k of shift_bits is set
				THEN Shift
			END IF
		END FOR
		Output = XOR degli MSB di tutti e tre i registri
	END FOR
END FOR
 
 
 
Shift function f
 
BEGIN FUNCTION f
	FOR ogni registro i from 1 to 3
		Poni middle[i] = il bit 'medio' del registro i
	END FOR
	IF almeno due 'bit medi' sono 1
		THEN bit-complement code
	END IF
	RETURN code
END FUNCTION
 

Implementazione in  C dell'algoritmo A5

/*
 * The following implementation of A5 is due to Mike Roe.
 *
 * Reading this program, note that:
 *
 * 1. Which bit of the key are loaded into which bits of the shift register
 * 2. Which order the frame sequence number is shifted into the SR (MSB first or LSB first)
 * 3. The position of the feedback taps on R2 and R3 (R1 is known).
 * 4. The position of the clock control taps. These are on the `middle' one, 
 *    it has been assumed to be 9 on R1, 11 on R2, 11 on R3.
*/
/*
 * Look at the `middle' stage of each of the 3 shift registers.
 * Either 0, 1, 2 or 3 of these 3 taps will be set high.
 * If 0 or 1 or one of them are high, return true. This will cause each of the
 * middle taps to be inverted before being used as a clock control. In all
 * cases either 2 or 3 of the clock enable lines will be active. Thus, at least
 * two shift registers change on every clock-tick and the system never becomes stuck.
*/

static int threshold(r1, r2, r3)
unsigned int r1;
unsigned int r2;
unsigned int r3;
{
	int total;

	total = (((r1 >>  9) & 0x1) == 1) +
		(((r2 >> 11) & 0x1) == 1) +
		(((r3 >> 11) & 0x1) == 1);
	if (total > 1)
		return (0);
	else
		return (1);
}
unsigned long clock_r1(ctl, r1)
int ctl;
unsigned long r1;
{
	unsigned long feedback;

	/* Primitive polynomial x**19 + x**5 + x**2 + x + 1 */
	ctl ^= ((r1 >> 9) & 0x1);
	if (ctl){
		feedback = (r1 >> 18) ^ (r1 >> 17) ^ (r1 >> 16) ^ (r1 >> 13);
		r1 = (r1 << 1) & 0x7ffff;
		if (feedback & 0x01)
			r1 ^= 0x01;
	}
	return (r1);
}

unsigned long clock_r2(ctl, r2)
int ctl;
unsigned long r2;
{
	unsigned long feedback;
 	/* Primitive polynomial x**22 + x**9 + x**5 + x + 1 */   
 	ctl ^= ((r2 >> 11) & 0x1);
	if (ctl){
		feedback = (r2 >> 21) ^ (r2 >> 20) ^ (r2 >> 16) ^ (r2 >> 12);
		r2 = (r2 << 1) & 0x3fffff;
		if (feedback & 0x01)
			r2 ^= 0x01;
	}
	return (r2);
}
unsigned long clock_r3(ctl, r3)
int ctl;
unsigned long r3;
{
	unsigned long feedback;
 	/* Primitive polynomial x**23 + x**5 + x**4 + x + 1 */
 	ctl ^= ((r3 >> 11) & 0x1);
	if (ctl){
		feedback = (r3 >> 22) ^ (r3 >> 21) ^ (r3 >> 18) ^ (r3 >> 17);
		r3 = (r3 << 1) & 0x7fffff;
		if (feedback & 0x01)
			r3 ^= 0x01;
	}
	return (r3);
}

int keystream(key, frame, alice, bob)
unsigned char *key;   /* 64 bit session key              */
unsigned long frame;  /* 22 bit frame sequence number    */
unsigned char *alice; /* 114 bit Alice to Bob key stream */
unsigned char *bob;   /* 114 bit Bob to Alice key stream */
{
	unsigned long r1;   /* 19 bit shift register */
	unsigned long r2;   /* 22 bit shift register */
	unsigned long r3;   /* 23 bit shift register */
	int i;              /* counter for loops     */
	int clock_ctl;      /* xored with clock enable on each shift register */
	unsigned char *ptr; /* current position in keystream */
	unsigned char byte; /* byte of keystream being assembled */
	unsigned int bits;  /* number of bits of keystream in byte */
	unsigned int bit;   /* bit output from keystream generator */
	/* Initialise shift registers from session key */
 	r1 = (key[0] | (key[1] << 8) | (key[2] << 16) ) & 0x7ffff;
	r2 = ((key[2] >> 3) | (key[3] << 5) | (key[4] << 13) | (key[5] << 21)) & 0x3fffff;
	r3 = ((key[5] >> 1) | (key[6] << 7) | (key[7] << 15) ) & 0x7fffff;
	/* Merge frame sequence number into shift register state, 
	 * by xor'ing it into the feedback path
	*/
	for (i=0;i<22;i++){
		clock_ctl = threshold(r1, r2, r2);
		r1 = clock_r1(clock_ctl, r1);
		r2 = clock_r2(clock_ctl, r2);
		r3 = clock_r3(clock_ctl, r3);
		if (frame & 1){
			r1 ^= 1;
			r2 ^= 1;
			r3 ^= 1;
		}
		frame = frame >> 1;
	}
	/* Run shift registers for 100 clock ticks to allow frame number to
	 * be diffused into all the bits of the shift registers
	*/
	for (i=0;i<100;i++){
		clock_ctl = threshold(r1, r2, r2);
		r1 = clock_r1(clock_ctl, r1);
		r2 = clock_r2(clock_ctl, r2);
		r3 = clock_r3(clock_ctl, r3);
	}
	
	/* Produce 114 bits of Alice->Bob key stream */
	ptr = alice;
	bits = 0;
	byte = 0;
	for (i=0;i<114;i++){
		clock_ctl = threshold(r1, r2, r2);
		r1 = clock_r1(clock_ctl, r1);
		r2 = clock_r2(clock_ctl, r2);
		r3 = clock_r3(clock_ctl, r3);
		bit = ((r1 >> 18) ^ (r2 >> 21) ^ (r3 >> 22)) & 0x01;
		byte = (byte << 1) | bit;
		bits++;
		if (bits == 8){
			*ptr = byte;
			ptr++;
			bits = 0;
			byte = 0;
		}
	}
	if (bits)
		*ptr = byte;
	/* Run shift registers for another 100 bits to hide relationship between
	 * Alice->Bob key stream and Bob->Alice key stream.
	*/
	for (i=0;i<100;i++){
		clock_ctl = threshold(r1, r2, r2);
		r1 = clock_r1(clock_ctl, r1);
		r2 = clock_r2(clock_ctl, r2);
		r3 = clock_r3(clock_ctl, r3);
	}
 
	/* Produce 114 bits of Bob->Alice key stream */
	ptr = bob;
	bits = 0;
	byte = 0;
	for (i=0;i<114;i++){
		clock_ctl = threshold(r1, r2, r2);
		r1 = clock_r1(clock_ctl, r1);
		r2 = clock_r2(clock_ctl, r2);
		r3 = clock_r3(clock_ctl, r3);
		bit = ((r1 >> 18) ^ (r2 >> 21) ^ (r3 >> 22)) & 0x01;
		byte = (byte << 1) | bit;
		bits++;
		if (bits == 8){
			*ptr = byte;
			ptr++;
			bits = 0;
			byte = 0;
		}
	}
	if (bits)
		*ptr = byte;
	return (0);
}