Politecnico di Bari Corso di Laurea Specialistica in Ingegneria Informatica a.a. 2012-2013 Tesina del corso di SICUREZZA DEI SISTEMI INFORMATICI DOCENTE Giuseppe Mastronardi Titolo Token OTP: dai generatori di numeri pseudocasuali ai generatori quantistici di numeri realmente casuali STUDENTE Raffaella Piizzi 1. Introduzione all’Autenticazione …………………………………………………..…3 1.1. Paradigma username/password...............................................................................5 1.1.1. Attacchi e Difese……………………………………………………………7 1.2. Paradigma Challenge/Response…………………………………………………10 1.3. Paradigma Timestamp...........................................................................................12 2. One Time Password (OTP)..........................................................................................14 2.1. Time and Event Synchronization…………………………………………………17 2.2. Algoritmi matematici basati su una “sfida”……………………………………....20 2.3. Algoritmi matematici basati su funzioni unidirezionali…………………………..21 2.4. Standard OATH di riferimento…………………………………………………....26 3. Limiti delle funzioni crittografiche di hash….……………………………………...29 4. Veri numeri casuali con metodi quantistici………………………………………....30 4.1. Dispositivo ottico quantistico Quantis…………………………………………....33 5. Metodo di Autenticazione forte basato su TRNG…………………………………..35 6. Conclusioni…………………………………………………………………………….38 Bibliografia……………………………………………………………………………..40 2 1 Introduzione all’Autenticazione Autenticare significa verificare l'identità di un soggetto (non necessariamente umano) per garantirne l’accesso sicuro ad una infrastruttura o servizio. Le procedure di autenticazione vengono normalmente classificate sulla base del numero di partecipanti di cui, al termine del processo, risultano verificate le credenziali: - autenticazione unilaterale, in cui si verifica l'identità di un solo partecipante; - mutua autenticazione, in cui si stabilisce l'identità di entrambi i partecipanti. Per verificare le credenziali dei diversi partecipanti sono disponibili varie tecniche. Indipendentemente dai particolari della procedura implementata, uno schema di autenticazione si svolge secondo uno dei seguenti paradigmi: paradigma username/password; paradigma challenge/response; paradigma timestamp. Il paradigma username/password viene generalmente utilizzato nel caso di autenticazione unilaterale, ma i rischi ad esso associati sono notevoli, in quanto la password potrebbe essere smarrita, scoperta o addirittura indovinata ed utilizzata da un soggetto diverso rispetto al legittimo proprietario. La differenza principale tra l’autenticazione debole basata solo su password (weak authentication o one factor authentication) e l’autenticazione forte (strong authentication o multifactor authentication) consiste nel fatto che, nel secondo caso, si usa una combinazione di più fattori per autenticarsi: qualcosa che si conosce; qualcosa di cui si è in possesso; qualcosa che caratterizza la propria persona. Un servizio di autenticazione che usa solo un fattore di autenticazione può essere vulnerabile, combinando due o più fattori si ha una maggior sicurezza. In pratica, per aumentare la sicurezza di accesso ad un sistema, oltre ad un’informazione di cui l’utente è a conoscenza (password o PIN), è richiesto un elemento di cui egli è esclusivo possessore (token, smartcard). Quando si utilizzano due fattori in combinazione, il sistema di autenticazione viene chiamato autenticazione a due fattori (two factor authentication). Per incrementare ulteriormente il livello di sicurezza, qualora 3 l’elemento di proprietà esclusiva dell’utente venisse rubato, è possibile combinare con i due fattori precedenti un identificatore biometrico personale (impronte digitali, struttura dell'iride, geometria della mano, voce). Una delle tecnologie di strong authentication di più largo e semplice utilizzo è rappresentata oggi dalla One Time Password (OTP), ovvero da un codice univoco, dinamico e valido per una sola transazione, generato da un apposito dispositivo crittografico (token) sulla base del tempo o di un contatore interno al dispositivo stesso o in risposta ad una sfida. L’autenticazione a due fattori basata su token richiede all’utente di immettere un nome utente, il PIN (l’informazione conosciuta) e il codice che appare sul display del token nel momento in cui viene richiesto l’accesso (l’elemento di appartenenza esclusiva). Se sia la password che il codice token vengono riconosciuti dal sistema, l’autenticazione ha esito positivo e l’utente può accedere alla risorsa. 4 1.1 Paradigma Username/Password Il metodo tradizionale di autenticazione, caratterizzato dall'uso di password statiche, che non vengono modificate in tempo reale durante il processo di autenticazione, è il più diffuso e semplice da implementare. L'idea di base è la seguente: una password, tipicamente una stringa lunga 6-10 o più caratteri, viene associata ad ogni utente ed è condivisa tra il sistema e l'utente per autorizzarne l’accesso. Per ottenere accesso alla risorsa voluta, l’utente inserisce quindi la coppia <userid, password>, in cui l’identificativo utente è un’affermazione di identità e la password è una prova a supporto dell'identificazione. Il sistema è responsabile di verificare quanto ricevuto sulla base delle informazioni in suo possesso. Il paradigma username/password viene generalmente utilizzato nel caso di autenticazione unilaterale e rientra nella categoria di tecniche a chiave simmetrica, in cui l’utente ed il sistema condividono la chiave privata che è la password. Figura 1: Paradigma username/password. Gli schemi a paradigma username/password si distinguono in base all’immagazzinamento nel sistema dell’informazione necessaria all’autenticazione e al metodo di verifica [1]: File di password in chiaro L'approccio più semplice per il sistema è quello di memorizzare in un file di sistema non cifrato, protetto sia in lettura che in scrittura, la coppia <userid, password> relativa ad ogni utente. Il sistema confronta la stringa digitata con la password salvata nel file relativa al nome utente specificato, se c’è corrispondenza l'utente accede al sistema, altrimenti viene respinto. Questo approccio, non facendo uso di alcuna primitiva crittografica, viene denominato non crittografico. Un inconveniente di tale metodo è che non fornisce alcuna protezione contro gli 5 utenti privilegiati o superuser (utenti speciali che godono di accessi privilegiati ai file di sistema e alle risorse). Figura 2: Utilizzo di file di memorizzazione delle password in chiaro. File di password criptate Piuttosto che memorizzare le password degli utenti in chiaro, si memorizza una lista di password criptate secondo una particolare funzione unidirezionale (one-way), in un file protetto in sola scrittura (Figura 2). Con questo metodo il sistema memorizza nel file di password una coppia <userid, h(password)>, dove h(password) è una funzione hash della password. L'utente che vuole accedere al sistema inserisce la sua coppia <userid, password>. Il sistema ricerca l'userid nel file, calcola una funzione hash della password inserita e la confronta con quella memorizzata; se sono uguali l'identificazione ha successo, altrimenti viene rifiutata. Figura 3: Utilizzo di una funzione one-way per password checking. 6 1.1.1 Attacchi e Difese Attacco di replicazione dati (replay attack) Un possibile attacco a questi schemi, che usano password fisse riproponibili, è la replica non autorizzata delle password e deriva dal fatto che quando l'utente inserisce la propria password, questa (o in alternativa il valore della funzione one-way ad essa applicata) insieme all'userid viaggiano in chiaro sulla linea di comunicazione con il sistema, così da essere intercettata da un malintenzionato, che ha la possibilità di riusarla per effettuare successivi accessi. Ricerca esaustiva Un altro attacco molto semplice è la ricerca esaustiva della password. Questo attacco può essere eseguito da un malintenzionato che, in modo randomizzato o deterministico, prova le password una alla volta nella speranza di trovare quella corretta. Questo può essere fatto sia in modalità online, che in modalità off-line. L'attacco on-line può essere reso più difficile ampliando lo spazio in cui le password vengono scelte, limitando il numero di tentativi non validi consentiti in determinati periodi di tempo o rallentando il mapping delle password. Per limitare l’uso di programmi per la ricerca esaustiva, si può rallentare il mapping delle password, applicando in maniera ricorsiva la funzione unidirezionale, in cui all’iterazione i+1 si usa l’output dell’iterazione precedente i. Il numero totale di iterazioni deve essere limitato in modo da non imporre ai legittimi utenti un ritardo notevole o inammissibile. Figura 4: Applicazione ricorsiva di una funzione unidirezionale. Gli attacchi off-line non richiedono alcuna diretta interazione con il sistema verificatore, ad eccezione della volta in cui si fa il tentativo finale con la password trovata. Questo è teoricamente possibile se sia la funzione hash che il testo in chiaro sono conosciuti. Avendo il file contenente i 7 valori hash delle password, un malintenzionato può testare ogni password da lui creata con i valori hash del file per verificare il matching. La fattibilità di questo attacco dipende dal numero di password che bisogna provare prima che si verifichi un match e dal tempo necessario per ogni test. Attacco del dizionario Per migliorare la probabilità di successo di una ricerca esaustiva, piuttosto che cercare nello spazio di tutte le possibili password, un malintenzionato può cercare in uno spazio ridotto. Teoricamente le stringhe arbitrarie di n caratteri sono equiprobabilmente selezionabili dall'utente, di solito però la maggior parte degli utenti seleziona le password da un piccolo sottoinsieme dell'intero spazio di tutte le possibili stringhe (password brevi, parole del dizionario, nomi propri, stringhe in minuscolo), chiamato dizionario, aumentando così la probabilità che siano facilmente scoperte. Tali password deboli, sono facilmente prevedibili. Le password trovate in qualsiasi lista di parole potrebbero essere scoperte da un malintenzionato, che tenta tutte le parole in questa lista, usando il cosiddetto attacco del dizionario. Oltre i tradizionali dizionari, ne esistono altri di parole in lingue straniere, o su argomenti specializzati come musica, film etc. Attacchi di questo tipo non vengono utilizzati per trovare la password di un particolare utente, ma per trovare molte password nella maggior parte dei sistemi. Con l'aumentare degli attacchi, alcuni sistemi hanno imposto alcune regole per scoraggiare gli utenti a utilizzare password deboli: l’introduzione di un limite minimo alla lunghezza della password da utilizzare; l’uso all'interno della password di almeno un carattere per ogni diversa categoria di caratteri (maiuscolo, numerico,ecc.); inoltre, le password non devono essere composte da informazioni relative all'account, come lo userid o una sua sottostringa. Un'altra strategia, utilizzata per aumentare la sicurezza delle password, è l'invecchiamento delle stesse (aging), secondo il quale passato un periodo di tempo (30 o 90 giorni) la password non è più valida e deve essere sostituita. Per rendere gli attacchi di tipo dizionario meno efficaci, ogni password può essere aumentata con una stringa random di t-bit chiamata “sale” prima di applicargli la funzione unidirezionale. Sia il valore hash della password sia il “sale” vengono memorizzati all'interno del file di password protetto. Quando l'utente introdurrà una password, il sistema cercherà il “sale” relativo a quella password, aggiungerà alla password tale valore e applicherà la funzione one-way alla stringa ottenuta. La difficoltà nella ricerca esaustiva non cambia con l'aggiunta del “sale”, quello che aumenta è la complessità dell'attacco del dizionario, che richiede un più largo insieme di possibili password, dato che per ogni password di prova occorre testare 2t varianti della 8 password dovuti all'aggiunta dei t-bit del “sale”, implicando una maggiore richiesta di memoria per la memorizzazione del dizionario. Un'alternativa all'utilizzo del “sale”, senza ulteriore utilizzo di memoria, oltre a quella umana dell'utente, è rappresentata dall'estensione delle password con passphrase. In questo caso gli utenti digitano una frase o un detto, piuttosto che una semplice parola. Alla passphrase viene applicata una funzione hash e questa assume lo stesso ruolo di una password. L'idea di base è che l'utente possa ricordare le frasi più facilmente rispetto ad una sequenza di caratteri casuali. Un inconveniente è il dover digitare una quantità maggiore di testo. 9 1.2 Paradigma Challenge/Response Il paradigma challenge/response prevede che il client si autentichi presso il server seguendo una procedura articolata in tre passi distinti [2]: 1. il primo passo prevede che il client invii l’identificativo personale dell’utente al server; 2. il secondo passo prevede la generazione e la trasmissione di un numero casuale R (challenge) da parte del server, dove il numero R rappresenta la sfida da superare per completare l’autenticazione; 3. il terzo passo, infine, prevede che il client risponda al challenge inviando al server una trasformata del challenge ricevuto. La risposta alla sfida può essere il risultato di un’operazione di cifratura del challenge R (Figura 5) utilizzando una chiave comune K, oppure prodotto dalla concatenazione di R con una password P ed una successiva applicazione di una funzione di digest. In entrambi i casi è indispensabile che il processo compiuto dal client risulti ripetibile sul server. Poiché solo client e server sono a conoscenza del segreto (K o P) utilizzato per trasformare il numero R, il server è in grado di stabilire l’identità dell’utente che risponde al challenge in maniera univoca, applicando la trasformazione inversa in caso di codifica o confrontando il digest ricevuto dall’utente con quello prodotto localmente. Questo sistema è più sicuro del paradigma username/password, essendo infatti immune da attacchi di replicazione, proponendo al client sfide sempre diverse, ma non ideale per via dei tre passaggi, che possono risultare eccessivi per una buona fruibilità di alcune applicazioni Internet, soprattutto se l'autenticazione va ripetuta per ogni pacchetto trasmesso. Figura 5: Paradigma challenge/response, con Ek algoritmo di crittografia simmetrica con chiave K condivisa da A e B. 10 La soluzione ideale è ricorrere ad un paradigma che preveda l’invio di un solo messaggio per l’autenticazione, riuscendo al tempo stesso a garantire il livello di sicurezza associato al paradigma challenge/response. In tale paradigma ogni possibilità di attacco per la replicazione dei dati è scongiurata tramite la trasformazione di numeri casuali R, che non vengono mai riproposti dal server. Aspetto fondamentale della robustezza dell’intero schema di challenge/response è che non vengano mai codificati due numeri R uguali; autenticazione di secondaria importanza il fatto che il challenge sia generato in maniera veramente casuale. 11 1.3 Paradigma Timestamp Il paradigma timestamp si propone di trarre vantaggio dalla precedente considerazione, inviando al server la versione codificata di un numero T, sempre diverso, stabilito implicitamente dalle due entità. Per poter concordare implicitamente un numero comune T, client e server devono avere orologi interni perfettamente sincroni. Il numero T in tal caso rappresenta il valore riportato dall’orologio interno del client al momento della richiesta di accesso al servizio (timestamp), come mostrato nella Figura 6. Figura 6: Paradigma timestamp. Il server accetta richieste di servizio solo se contengono un timestamp compatibile con il valore del proprio orologio interno. Per semplificare la validazione del timestamp, lo si considera generalmente una quantità discreta, incrementata ad intervalli regolari. Richieste di servizio datate vengono generalmente scartate, interpretandole come messaggi trattenuti troppo a lungo dai sistemi coinvolti e/o ritrasmessi da un hacker per tentare una forma di attacco nota come attacco per trasmissione ritardata dei dati per l’autenticazione. Per riuscire in un attacco che prevede la trasmissione ritardata dei dati per l'autenticazione, è sufficiente che un hacker trattenga il primo messaggio inviato dal client al server. Non giungendo il messaggio al server, il client provvederà, dopo aver eventualmente ricevuto una sollecitazione esplicita dal server (o dallo stesso hacker), all'invio di un secondo messaggio codificando un timestamp aggiornato. 12 Il secondo messaggio viene lasciato passare dall'hacker consentendo regolare accesso al servizio. A questo punto, l'attaccante dispone di un messaggio contenente dati per l'autenticazione, emesso regolarmente dal client, che può inviare al server nel tentativo di accedere al servizio (Figura 7). Figura 7: Attacco tramite trasmissione ritardata dei dati per l'autenticazione. Per scongiurare questa forma di attacco, il server deve accettare solo messaggi contenenti timestamp recenti(generalmente non eccedenti il ritardo medio di andata e ritorno introdotto dalla rete nella trasmissione dati tra client e server). Indipendentemente dal paradigma utilizzato, la password, la chiave privata o la chiave comune, sono tutte informazioni che devono essere concordate preliminarmente tra le parti. La robustezza del meccanismo risiede nella riservatezza di queste informazioni, che devono essere mantenute segrete tramite uno sforzo comune che coinvolge entrambi i partecipanti. 13 2 One Time Password (OTP) Per limitare l’efficacia di attacchi basati su un approccio di tipo esaustivo, nonché l’intercettazione delle credenziali (replay attack), è opportuno adottare password di limitata validità temporale. La soluzione ottimale consiste nell’utilizzare password valide per una singola autenticazione, anche dette One Time Password (OTP). Una volta verificate le credenziali il server scarta la password utilizzata rendendone impossibile il riutilizzo, sia da parte dell’utente legittimo sia da parte di un hacker. Un simile schema teorico richiede che l’utente legittimo utilizzi password sempre diverse per ogni diversa richiesta di accesso al servizio e che il server sia sempre allineato a ricevere la nuova password valida. Lo schema OTP, oltre che robusto, deve risultare semplice al punto da essere praticamente sostenibile dai sistemi che decidono di implementarlo. Gli algoritmi di generazione delle OTP fanno uso di numeri casuali, perché altrimenti sarebbe facile prevedere l'OTP futuro osservando i precedenti. Gli algoritmi OTP, che sono stati realizzati sono abbastanza diversi tra loro. I vari approcci per la generazione delle OTP sono elencati di seguito [3]: Algoritmi, in cui il server di autenticazione e il client sono sincronizzati sulla base del tempo o di un contatore; Algoritmi matematici, che generano una nuova password in base alla password precedente (le OTP sono una catena di password legate tra loro e devono essere utilizzate in un ordine predefinito); Algoritmi matematici, dove la password è basata su una sfida (challenge, che può essere, ad esempio un numero casuale scelto dal server di autenticazione o dai dettagli della transazione). Gli algoritmi basati sulla sincronizzazione, sono quelli utilizzati dalle banche, soprattutto per il fatto che, a differenza dei metodi matematici, i quali richiedono che client e server si parlino (per comunicare la chiave precedente o i numeri casuali), non richiedono un dialogo diretto tra il client ed il server del servizio, per la generazione della chiave. Tutte queste modalità si basano su tecniche crittografiche di hashing a chiave segreta: il client ed il server di autenticazione hanno una chiave segreta condivisa, che viene utilizzata per criptare alcuni dati utili a generare l’OTP (Figura 8). 14 Figura 8: Opzioni per la generazione di una One Time Password con la crittografia a chiave segreta. Ci sono diversi modi per rendere note all'utente le successive OTP da usare (Figura 8). Alcuni sistemi elettronici prevedono l'uso di speciali token, che l'utente porta con sé, che generano le OTP e le mostrano utilizzando un piccolo display. Purtroppo, i token hardware, essendo di piccole dimensioni, sono particolarmente soggetti a perdite, danneggiamenti e furti. Come alternativa ai token hardware, ci sono in commercio dei token software che girano su diversi dispositivi mobili dell'utente, come il telefono cellulare. Il vantaggio principale di un token software è la semplicità d’uso, poiché molti step del processo di autenticazione sono nascosti all’utente, anche se il fatto che l’utente non ha più un token separato, ne riduce la sicurezza. Per ovviare a questo, alcuni fornitori offrono smartcard, dotate di display, tastierino numerico, chip di prossimità e microprocessore, o chiavi USB con all’interno la chiave segreta condivisa, che lavora con il token software. Altri sistemi generano le OTP sul lato server e le trasmettono all'utente su un canale fuori banda, ad esempio su un canale di messaggistica SMS. Infine, in alcuni sistemi le OTP sono stampate su carta, che l'utente è tenuto a portare con sé e ne usa una ogni volta. L’elenco di password costituisce il token, ma deve essere custodito con sicurezza. 15 Figura 9: Soluzioni OTP hardware e software. 16 2.1 Time and Event Synchronization Il meccanismo OTP time-based è stato inventato e brevettato da Security Dynamics, successivamente acquisita da RSA. Come mostrato nello schema in Figura 10, i token RSA SecurID basati sulla sincronizzazione temporale generano numeri pseudocasuali a 6 cifre ad intervalli regolari dell'ordine di poche decine di secondi (60 sec), secondo un algoritmo che, tra i vari fattori, tiene conto del trascorrere del tempo grazie ad un orologio interno. L’altro fattore che influenza l'algoritmo è il seed, un’informazione originaria condivisa tra server e token all'atto della consegna del token al possessore. Ogni token al mondo ha un diverso seed. Lo stesso algoritmo è anche implementato su di un server di autenticazione, che è stato inizialmente sincronizzato con il token e che, quindi, genera la stessa sequenza di numeri pseudocasuali del token negli stessi momenti, pur non essendoci alcuna comunicazione tra i due oggetti. A tale numero deve essere anteposto un PIN a 4 cifre noto all'utente ed al sistema di autenticazione per generare una passcode a 10 cifre temporanea, o di sessione, che può essere usata per effettuare l'autenticazione entro la scadenza dell'intervallo temporale. La sicurezza del seed memorizzato sul token è affidata ad un sistema in grado di cancellare l’informazione qualora il dispositivo sia forzato fisicamente. Gli “ACE Server” di RSA sono difesi direttamente da RSA [4]. Figura 10: Schema di funzionamento del token RSA SecurID. 17 L'autenticazione a due fattori è data dal fatto che per generare la passcode temporanea corretta è necessario (Figura 11): possedere lo specifico token che, in un dato istante, genera lo stesso numero pseudocasuale generato dal server di autenticazione; conoscere il PIN di partenza con cui l’OTP va combinata. Figura 11: Autenticazione a due fattori con token RSA SecurID. Teoricamente, considerato che la password temporanea scade dopo poche decine di secondi, chi volesse violare la sicurezza dovrebbe non solo essere a conoscenza di quella valida per il particolare istante, ma dovrebbe anche usarla prima che essa scada (oltre ad essere in possesso del PIN). Per questo motivo, un token di questo tipo dovrebbe elevare notevolmente gli standard di sicurezza. Nella realtà, però, i due clock raramente segnano lo stesso tempo: i token nel corso della loro vita sono soggetti ad una potenziale deriva temporale. Per ovviare a questo problema, si imposta sul server una finestra di tolleranza per consentire l'accettazione delle password entro i +/- 3 min. Pertanto, se il token è impostato per aggiornare le OTP ad intervalli di 60 secondi, 7 valori di password sarebbero accettate come corrette. Ciò consentirebbe ad un malintenzionato di effettuare il login con una delle altre password valide [5]. Un altro handicap per la sicurezza è rappresentato dal fatto che i token visualizzano continuamente codici OTP validi, visibili da chiunque intorno. Infine, essendo i token time-based pre-inizializzati dal costruttore, il produttore ha una copia del seed di ogni token venduto e ciò rende il meccanismo vulnerabile ad attacchi massivi. Infatti, il 17 marzo 2011 RSA ha dichiarato di aver subito un’intrusione dei propri sistemi e, successivamente, che sono stati resi insicuri oltre 40 milioni dei propri token, poiché gli attaccanti sono riusciti a sottrarne i seed ed altre informazioni sensibili. L’unico rimedio a questo tipo di attacco è sostituire il token. 18 Un ulteriore svantaggio risiede nella durata di vita di questo tipo di token, che si aggira intorno ai 24-60 mesi, momento in cui il dispositivo smette di funzionare, rendendo necessaria la sua sostituzione, con relative spese a carico dell’ente erogatore, che si ripetono ogni 2-5 anni per tutti gli utenti fruitori. I token event-based sono dotati di un pulsante, che deve essere premuto ogni volta che si desidera una nuova password. Quando la nuova OTP viene visualizzata, viene incrementato di uno il valore del contatore interno al token, dall'altra parte il server, ogni volta che un'autenticazione avviene con successo, incrementa il proprio valore del contatore, sempre di un'unità. In questo modo, teoricamente, i valori dei contatori sul token e sul server rimangono sincronizzati, in modo da generare sempre la stessa One Time Password [6]. I token event-based possono desincronizzarsi se si generano OTP, che non vengono effettivamente utilizzate per autenticarsi, perché in questo caso il valore del contatore del token continua ad essere incrementato, mentre il server, ignaro, non incrementa il valore del suo contatore. Quindi, il successivo tentativo di autenticazione non andrà a buon fine, perché il server non riconoscerà l'OTP generata dal token. Per ovviare a questo problema, vengono accettati come validi i 10 codici successivi all’ultimo utilizzato con successo e ad ogni autenticazione, che cade in questo range, i due contatori si sincronizzano nuovamente. Poiché non esiste un orologio interno, i token event-based non hanno una scadenza. Ogni 4-6 anni si dovranno solo sostituire le batterie che alimentano il token, operazione che può essere facilmente compiuta dall'utente finale. Pertanto, al contrario dei token time-based, non richiedono alcun costo aggiuntivo di sostituzione. 19 2.2 Algoritmi matematici basati su una “sfida” Ci sono diversi casi d'uso e scenari, che richiedono una variante asincrona per accontentare gli utenti, che non vogliono mantenere un sistema di autenticazione sincronizzato. Un metodo comunemente utilizzato è dato dallo schema Challenge-Response. In questo caso l'utente che vuol accedere al sistema digita il proprio login name e il server di sicurezza gli invia, in risposta, un numero pseudocasuale, che presenta come sfida (challenge) all'utente. L'utente per usare il token in suo possesso, dotato oltre che dello schermo di un tastierino numerico tipo calcolatrice, inserisce il proprio PIN e successivamente la sfida fornita dal server. Il token, così, provvede a crittografare la sfida usando la chiave segreta dell'utente. Il risultato (response) viene inviato dall’utente al server come risposta alla sfida. Nel frattempo il server accede tramite il login name ricevuto, al PIN e alla chiave segreta dell'utente ad esso associata, crittografa lo stesso la sua sfida, e attende la risposta dell'utente, se i due numeri coincidono l'utente può accedere al sistema. Il funzionamento appena descritto è illustrato nella figura sottostante. Figura 12: Meccanismo del Challenge-Response token; f è una funzione unidirezionale. 20 2.3 Algoritmi matematici basati su funzioni unidirezionali Tra gli algoritmi matematici che generano una nuova OTP in base all’OTP utilizzata in precedenza, quello più efficiente, che ha incontrato maggiore successo, è stato proposto da Leslie Lamport [2]. Si tratta di un token software implementato originariamente dalla Bellcore con il nome di S/KEY, che non prevede la necessità di sincronizzazione temporale. La robustezza deriva dall’impiego reiterato di una generica funzione crittografica di hash unidirezionale. Il funzionamento si articola nelle seguenti fasi, come evidenziato in Figura 13: 1. il client richiede al server di iniziare la procedura di autenticazione inviando lo username; 2. il server, riconosciuto lo username, invia al client un challenge per consentire la generazione della One Time Password; 3. il client genera la One Time Password e la invia al server per completare l’autenticazione; 4. il server verifica la validità della One Time Password, autorizzando o negando l’accesso al servizio. Figura 13: Autenticazione tramite One Time Password. Durante la prima fase, il client invia al server l’identità dell’utente, che intende accedere al servizio. Il server, ricevuto lo username, lo utilizza come puntatore per esaminare una lista locale di utenti accreditati per l’accesso al servizio. La presenza dello username nel file delle credenziali memorizzato dal server, non garantisce l’accesso al servizio. Sulla base dello username inviato, il server costruisce un messaggio specifico di challenge per il client. Il messaggio di sfida contiene: un identificatore della funzione di digest concordata tra client e server; un numero N (con N maggiore di 1) che stabilisce il numero di iterazioni necessarie per generare la One Time Password; un seme S, di lunghezza variabile, generato in maniera random dal server. 21 La concatenazione del numero N e del seme S rappresenta la componente challenge. Alla ricezione del messaggio di challenge, il client concatena le credenziali P digitate dall’utente (generalmente indicata come password locale, conosciuta soltanto dall'utente) al seme S ricevuto, ottenendo una stringa di lunghezza variabile che rappresenta l’ingresso della funzione hash prestabilita. La funzione hash viene applicata ricorsivamente per N volte, usando ogni volta l’output del processo come nuovo input. Il risultato finale della funzione di digest, viene trasformato in un numero binario a 64 bit, per mezzo di operatori XOR (OR esclusivo): ciò permette di avere un livello di sicurezza sufficientemente elevato e consente di non dovere digitare troppe cifre al momento dell'autenticazione. La versione compressa a 64 bit dell’uscita finale della funzione di digest rappresenta la notazione binaria della One Time Password, secondo il processo descritto in dettaglio in Figura 14. Figura 14: Processo di generazione della One Time Password. Nell’eventualità che il risultato debba essere digitato manualmente dall’utente, la OTP viene frammentata in sei blocchi da 11 bit (2 bit di padding sono aggiunti per ottenere i 66 bit necessari e sono destinati alla verifica dell'integrità della password) e ciascun blocco viene convertito in una singola parola, estratta da un vocabolario prestabilito di 2048 parole inglesi. L'utente, quando necessario, può eseguire questo algoritmo su un computer portatile o può stampare un elenco di password valide (passibile di furto), che contrassegnerà man mano che le utilizzerà: Figura 15: Stampa password S/Key. 22 Per evitare una facile estrapolazione della OTP da parte di un hacker, lo schema prevede l’inserimento di password non inferiori a dieci caratteri. Il challenge inviato dal server consente all’utente di utilizzare una stessa password per più autenticazioni successive. Il seme S inviato dal server deve essere modificato ogni volta in cui il numero N scende a 1, reinizializzando la sequenza. Se non vengono mai inviati challenge (concatenazione di S e N) uguali, il client non produce mai due volte la stessa One Time Password, anche se l’utente mantiene la stessa password per molteplici accessi al servizio. Dovendo applicare la funzione di digest almeno una volta (N maggiore di 1), la password digitata dall’utente non viene mai trasmessa in chiaro al server. Alla ricezione della One Time Password, il server effettua la verifica delle credenziali dell’utente, come indicato in Figura 16. A tale scopo il server usa la One Time Password appena ricevuta come ingresso di un blocco di digest. Il risultato finale viene confrontato con quanto contenuto nel file delle credenziali memorizzato dal server: se il risultato del confronto è negativo l’accesso al servizio è negato, se positivo l’accesso al servizio viene consentito. Il lavoro del server si completa modificando il file delle credenziali, predisponendolo per accettare le nuove richieste. L’operazione prevede di decrementare di un unità il numero N associato allo username e di memorizzare la One Time Password appena trasmessa. Se durante questa operazione il numero N scende a zero, vengono generati casualmente un nuovo seme S* e un nuovo numero N*. Figura 16: Processo di verifica della One Time Password. La differenza sostanziale tra lo schema appena descritto ed un generico schema challenge/response basato su funzioni di digest è che con lo schema S/KEY il server riesce a svolgere il suo ruolo anche senza conoscere la password, che rimane un esclusivo segreto dell’utente. In questo modo, anche se la lista locale contenente le credenziali degli utenti finisce nelle mani di un hacker, la non invertibilità della funzione di digest rende impossibile ricavare dalle informazioni in essa contenute 23 le password utilizzate dagli utenti. L’operazione di estrapolazione della password, a partire dalle credenziali memorizzate sul server, è complicata dal fatto che per generare la One Time Password la funzione non invertibile è stata applicata dal client N volte. Lo schema presentato funziona solo a regime. Per una corretta implementazione è necessario prevedere un opportuno meccanismo di inizializzazione e reinizializzazione. Il processo di reinizializzazione si ha ogni volta che: N scende a zero; l’utente decide di modificare la propria password. La principale debolezza dello schema proposto è legata al fatto che, alla prima autenticazione, le credenziali inviate dal client vengono accettate senza essere di fatto verificate dal server. Per evitare che un hacker possa trarre vantaggio da questa vulnerabilità, sostituendosi fin dall’inizio al client, è necessario procedere alla fase di inizializzazione utilizzando un canale intrinsecamente sicuro, ad esempio accettando la prima autenticazione solo da client attivi sulla stessa macchina, che ospita il server. Dopo l’inizializzazione un hacker non può più sostituirsi al client, non disponendo della password. Anche risolvendo le problematiche relative all’inizializzazione della sequenza, lo schema S/KEY presenta una seconda, per molti aspetti più grave, limitazione. Per ridurre il numero di informazioni che è necessario memorizzare, lo schema proposto viene generalmente implementato in modo da non rendere necessaria la memorizzazione, da parte del client, del numero di cicli N che sono serviti per produrre l’ultima One Time Password. Un hacker può sfruttare questa vulnerabilità operando, in condizione man-in-the-middle , nel seguente modo: intercetta il messaggio di challenge inviato dal server; modifica la componente N del challenge sottraendovi un numero K < N; invia il messaggio di challenge modificato al client; alla ricezione del messaggio, il client produce la One Time Password applicando ricorsivamente la funzione di digest (N-K) volte, in base al contenuto del messaggio di sfida, quindi la invia al server; intercetta la One Time Password prodotta dal client; modifica la One Time Password applicando ricorsivamente la funzione di digest altre K volte; invia la One Time Password prodotta al passo precedente al server. In questo modo, un hacker che intercetta la One Time Password entra in possesso delle credenziali per accedere (K-l) volte al servizio. L’hacker infatti, conoscendo la OTP al passo 24 (N-K), è in grado di generare le OTP ai passi (N-l,..., N-K+1, N-K), indispensabili per superare la verifica del server al momento della richiesta di accesso al servizio (Figura 17). Per scongiurare questa forma di attacco, tramite invio di messaggi di challenge con N alterato, è indispensabile che il generatore OTP tenga traccia dei valori N inseriti nei precedenti messaggi di sfida inviati dal server. Figura 17: Attacco tramite messaggi di challenge con N alterato. Per aiutare l’utente a ricordare a quale valore di N si è giunti, esistono dispositivi hardware personali per l’utente predisposti al calcolo della One Time Password off-line. L’utente è responsabile solo di digitare il seme S, trasmesso dal server al dispositivo personale e di inserire nel client la One Time Password, che appare a calcolo effettuato sul display del dispositivo. Questi dispositivi personali permettono all’utente di connettersi da qualsiasi terminale, senza richiedere ad altri componenti come il PC dell’utente, ad uno specifico programma client, il mantenimento di informazioni relative alle autenticazioni precedentemente concluse. Il dispositivo decrementa autonomamente il numero di cicli N, rendendo più difficile la conduzione di eventuali attacchi da parte di un hacker. 25 3 Standard OATH di riferimento OATH (Initiative For Open Authentication) è un'iniziativa per promuovere degli standard universali open di autenticazione. All'iniziativa per l'autenticazione aperta (OATH) collaborano i leader del settore industriale e informatico al fine di fornire una struttura di riferimento standard per l'autenticazione forte di tutti gli utenti, su tutte le reti, attraverso tutti i dispositivi. Per l’autenticazione forte via OTP, sono stati proposti 3 algoritmi OATH, già standardizzati dallo IETF (Internet Engineering Task Force): TOTP (Time-based, RFC-6238) HOTP (Event-based, RFC-4226) OCRA (Challenge/Response, RFC-6287) Lo standard di riferimento per il sistema OTP S/KEY è RFC-1760. HOTP rappresenta una delle pietre miliari dell’OATH ed è stato pubblicato nel 2005 (RFC-4226). La funzione HOTP(K, C) è definita come segue [7]: HOTP (K, C) = Truncate( HMAC-SHA-1 (K, C) ) dove: K è una chiave segreta; C è un contatore; HMAC-SHA-1 calcola un codice di autenticazione di messaggio (MAC), utilizzando la funzione di hash crittografica SHA-1; Truncate è una funzione, che seleziona 4 byte dal risultato della funzione precedente in modo deterministico. Vediamo adesso in dettaglio come funziona HMAC: HMAC-SHA-1 (K, C) = SHA-1 (K1, SHA-1 (K2, C)) con chiavi le K1, K2 ricavate da K (riempita con zeri a sinistra per ottenere una lunghezza pari alla dimensione del blocco) eseguendo le seguenti operazioni: 26 K1 = K ⊕ opad K2 = K ⊕ ipad dove opad e ipad rappresentano, rispettivamente, 2 stringe fissate: ipad = 00110110 ripetuto b/8 volte (con b dimensione del blocco) opad = 01011010 ripetuto b/8 volte (con b dimensione del blocco) Figura 18: Funzione HMAC-SHA-1. TOTP è la variante time-based di questo algoritmo, dove il valore T è un numero intero, derivato da un riferimento temporale, che sostituisce il contatore C nel calcolo HOTP [8]. Come definito nell’RFC-6238 del 2011, le implementazioni dell’algoritmo TOTP possono utilizzare le funzioni HMAC-SHA-256 o HMAC-SHA-512, basate rispettivamente sulle funzioni hash SHA-256 o SHA512 [SHA2], al posto della funzione HMAC-SHA-1 indicata per il calcolo HOTP nell’RFC-4226. L'algoritmo OATH Challenge-Response (OCRA) è una generalizzazione dell'HOTP, in cui le variabili di input non sono costituite soltanto da un contatore incrementale e da una chiave segreta. La definizione di OCRA (RFC-6287) richiede una funzione crittografica, una chiave K ed un insieme di parametri DataInput [9]. In poche parole: OCRA = CryptoFunction ( K, DataInput ) 27 dove: K è una chiave segreta condivisa da ambo le parti; DataInput è una struttura che contiene la concatenazione dei diversi dati di input; CryptoFunction è la funzione che eseguire il calcolo OCRA a partire dalla chiave segreta K e la struttura DataInput. 28 4 Limiti delle funzioni crittografiche di hash Il livello di sicurezza dei token dipende essenzialmente dal modo in cui vengono generate le One Time Password. Più il fattore random è buono, più l’OTP è sicura, perché non può essere prevista. Come noto, i token sono generatori di numeri pseudocasuali, il cui funzionamento si fonda sull’utilizzo di funzioni di hash unidirezionali che consentono di associare in maniera deterministica ad una sequenza arbitraria di byte un digest di lunghezza fissa. Pertanto, una soluzione OTP basata su hash inizia con gli input (parametro di sincronizzazione, chiave segreta, PIN), li esegue tramite la funzione unidirezionale e produce la password di lunghezza fissa. Gli algoritmi per la produzione di numeri pseudocasuali si basano su un valore iniziale, il cosiddetto “seme” o seed caricato nel generatore stesso, da cui parte una sequenza che è comunque periodica; conoscendo questo valore iniziale è teoricamente possibile risalire a tutta la sequenza dei valori generati. Gran parte dei linguaggi di programmazione dispone di funzioni per la generazione di numeri pseudo casuali. Tuttavia, la maggior parte di queste funzioni non soddisfa i requisiti rigorosi che la crittografia impone sui generatori di numeri pseudocasuali: La sequenza generata da un algoritmo deve avere un periodo il più esteso possibile; Data una porzione qualsiasi della sequenza generata, un estraneo non dovrebbe disporre di un metodo efficace per trovare il valore del seme fornito al generatore; Data una porzione qualsiasi della sequenza generata, un estraneo non dovrebbe essere in grado di ottenere informazioni positive sui membri successivi o precedenti la sequenza stessa. Nessuno garantisce che le funzioni crittografiche di hash siano anche generatori di numeri casuali (ovvero con una distribuzione di probabilità equamente distribuita per tutte le occorrenze generate), ma sovente vengono utilizzate anche a questo scopo. 29 5 Veri numeri casuali con metodi quantistici Secondo il principio di Kerchoff, un generatore di numeri casuali è adatto per applicazioni crittografiche se, nonostante fosse noto tutto del generatore (schema, algoritmi, ecc), produce ancora bit totalmente imprevedibili. Storicamente, ci sono due approcci per la generazione di numeri casuali: algoritmico (pseudocasuale) e di tipo hardware (non deterministico). I generatori di numeri pseudocasuali (PRNG, PseudoRandom Number Generators) utilizzano formule matematiche per produrre in maniera deterministica sequenze periodiche di numeri, completamente determinate dallo stato iniziale seed. Per definizione, tali generatori non sono realmente casuali. I vantaggi dei PRNG sono l’elevato throughput dei numeri generati, il basso costo, la facilità di implementazione e d'uso, specialmente in ambienti dotati di CPU, come i PC. A differenza dei generatori di numeri pseudocasuali, i generatori hardware di numeri random (TRNG, True Random Number Generation) non hanno bisogno di uno stato iniziale, dal quale partire per generare gli output, che rende il risultato prevedibile. Essi estraggono la casualità da processi fisici microscopici di natura non deterministica, quali il rumore termico o di Johnson nei resistori, il rumore atmosferico di facile acquisizione anche con un semplice apparecchio radio, il rumore a valanga (avalanche noise) generato dalla rottura (breakdown) di un diodo zener. In pratica è importante scegliere bene la sorgente di casualità da utilizzare. Un generatore di numeri casuali, che sfrutta i predetti fenomeni, contiene solitamente un amplificatore in grado di portare il prodotto dei fenomeni fisici a dimensione macroscopica, in aggiunta a un trasduttore o comparatore, per convertire l'uscita in un segnale digitale. A titolo d’esempio, nella figura sottostante viene mostrato lo schema a blocchi di un TRNG, che utilizza come fonte di casualità il rumore termico, dovuto all’agitazione termica dei portatori di carica (rumore bianco), in un resistore. 30 Figura 19: Schema a blocchi di un TRNG con rumore termico come sorgente di casualità. I vantaggi dei generatori hardware di numeri casuali risiedono nella genuinità del numero casuale, che risulta statisticamente indipendente da qualsiasi altro numero generato nello stesso contesto, e per tale ragione ha valide applicazioni nell’ambito della crittografia, ma presenta uno svantaggio a causa del basso throughput, assolutamente non comparabile con quello dei sistemi PRNG, oltre ad un costo più elevato. Nell’ambito del proprio computer si possono anche utilizzare fenomeni fisici molto più immediati, derivati direttamente dalle informazioni di sistema (variabili di sistema, numero di file su dischi od in particolare directory, spazio libero su dischi, il numero di task in coda, stato della memoria centrale) o da eventi esterni (movimenti o posizione relativa del mouse in un certo istante, tempi di battitura, tempo arrivo pacchetti in rete). In generale, però, forniscono pochi bit casuali e alcune informazioni possono essere facilmente dedotte. Per quanto incredibile, quasi nessuno di questi sistemi fornisce risultati soddisfacenti: in genere le distribuzioni di probabilità non sono uniformi (ci sono degli sbilanciamenti a favore di certi valori), c’è un certo margine di prevedibilità. Il problema di fondo è che la fisica classica semplicemente non consente la casualità reale in senso stretto. Vale a dire, che l'esito di un qualsiasi processo fisico classico può in definitiva essere determinato, se si dispone delle informazioni sufficienti sulle condizioni iniziali. Viceversa, nella meccanica quantistica vi è certezza dell’indeterminazione di moltissimi fenomeni, al contrario del determinismo che permea tutte le leggi della fisica classica. 31 Solo i processi quantistici possono essere dunque realmente casuali, e anche allora, bisogna assicurarsi che i dispositivi siano effettivamente quantistici e non contengano alcun residuo della fisica classica. Condizione necessaria è che siano completamente isolati dal mondo esterno, per non perdere la sovrapposizione coerente quantistica degli stati, che ne garantisce la natura non deterministica. La casualità intrinseca della fisica quantistica permette di scegliere processi molto semplici, come fonti di casualità. Questo significa che un generatore quantistico è facile da modellare e che il suo funzionamento può essere monitorato costantemente per confermare che stia funzionando correttamente e producendo numeri casuali. Contrariamente alla fisica classica, in cui la casualità si cela dietro la complessità del sistema, si può dire che nella fisica quantistica la casualità è caratterizzata dalla semplicità. Fino a poco tempo fa l'unico generatore quantistico esistente di numeri realmente casuali era basato sull'osservazione del decadimento radioattivo di qualche elemento. Pur producendo numeri di ottima qualità, questi generatori sono piuttosto ingombranti e l'impiego di materiali radioattivi può causare problemi di salute. Attualmente, vengono sfruttati altri fenomeni quantistici, come un processo elementare di ottica quantistica, che prevede l’emissione di un fotone su di uno schermo semitrasparente, e l’effetto fotoelettrico, cioè l’emissione di elettroni da una superficie solitamente metallica, quando questa viene colpita da una radiazione elettromagnetica avente una certa frequenza. Questi processi sono, perlomeno in teoria, completamente imprevedibili e quest’affermazione è suffragata da test sperimentali. 32 5.1 Dispositivo ottico quantistico Quantis Cristian Calude e i ricercatori dell’Università neozelandese di Auckland hanno testato diverse metodiche per la generazione random di numeri, che sfruttano diversi assunti teorici. Uno di questi sfrutta la teoria della meccanica quantistica e si chiama Quantis. Da un punto di vista della fisica quantistica, la luce consiste di particelle elementari chiamate fotoni, che presentano in certe situazioni un comportamento casuale. Il sistema di generazione Quantis si basa su un processo ottico quantistico molto elementare (Figura 20) : un fotone viene proiettato su uno schermo semitrasparente, che permette con uguale probabilità la trasmissione del fotone stesso oppure la sua riflessione. L’emissione avviene mediante un diodo ad emissione luminosa, che dosa il flusso delle particelle, poi captate da uno speciale rilevatore con una risoluzione prossima al singolo fotone. Quantis è dotato di un complesso sistema per la verifica del suo corretto funzionamento, al fine di accertare in continuo che la generazione dei numeri venga effettuata in modo sempre casuale. Il processo di verifica è in grado di inibire il suo funzionamento, quindi la produzione di numeri, nel momento in cui si rileva qualche problema. È ormai risaputo e provato che questo fenomeno di trasmissione/riflessione dei fotoni è totalmente casuale e che non può essere influenzato da alcun fattore esterno. A ciascuno dei due eventi (trasmissione-riflessione) viene assegnato valore binario rispettivamente 1 o 0, così si possono produrre sequenze casuali illimitate di bit La velocità con cui vengono prodotti i bit casuali può raggiungere i 16 Mbps. Figura 20: Sistema ottico utilizzato per generare numeri casuali. 33 I ricercatori neozelandesi, oltre a Quantis, hanno testato anche altri sistemi di generazione, che non si basano su teorie quantistiche. Le sequenze di numeri provenienti dai diversi generatori sono state sottoposte a vari test, i cui risultati hanno evidenziato come i numeri generati da Quantis, non presentando alcuna correlazione e avendo superato con successo tutti i test statistici, non siano prevedibili e ripetibili in sequenza, a differenza di quelle realizzate dagli altri sistemi. Ovviamente, questa conclusione deriva da prove sperimentali, che i ricercatori sostengono siano molto difficili da riproporre teoricamente, visto che la casualità assoluta non si può provare con una specifica teoria scientifica. Il sistema Quantis, prodotto dall’azienda elvetica ID Quantique, si presenta molto compatto e viene commercializzato sia sotto forma di dispositivo USB, che di scheda PCI e PCI Express (Figura 21). Anche l’azienda americana MagiQ Technologies ha in vendita un modello commerciale ormai stabile per la crittografia quantistica, con la funzione anche di generatore di numeri casuali. Toshiba, NEC, Corning sono esempi di grandi multinazionali interessate alla creazione di dispositivi quantistici, che hanno investito ingenti capitali nella ricerca, ma che non hanno ancora presentato sul mercato un prodotto completo. Figura 21: Random Generator Number commercializzati dalla ID Quantique. In conclusione, la caratteristica più distintiva dei quantum TRNG è che offrono la prova scientifica della casualità. Essi rappresentano la scelta migliore per la crittografia e altre applicazioni che criticamente richiedono numeri realmente casuali. Lo svantaggio più significativo di tale soluzione è il costo elevato. 34 6 Metodo di Autenticazione forte basato su TRNG I sistemi di autenticazione, che utilizzano token OTP tradizionali, sono soggetti ai seguenti problemi: le One Time Password generate dal token variano sulla base del seed iniziale, ma c'è un limite al numero di seed e di conseguenza anche al numero di utenti; c'è la possibilità che il seed, che varia secondo un determinato algoritmo, venga scoperto. Per risolvere tali inconvenienti, i ricercatori Osamu Kameda e Masakazu Sato hanno proposto un nuovo metodo di autenticazione forte [10], che prevede l’utilizzo di un token per generare i codici, il cui schema a blocchi è mostrato in Figura 22. Figura 22: Diagramma a blocchi del token proposto da Osamu Kameda e Masakazu Sato. In questo esempio, è stata scelta l’interfaccia USB, ma può essere utilizzata anche un'altra interfaccia. Due codici generati attraverso un elemento di generazione di numeri puramente casuali (TRNG), vengono letti da una sezione di controllo e memorizzati in una memoria non volatile (che può essere una EEPROM o una SRAM). La sezione di controllo comprende una CPU, un’unità di I/O ed un memory controller. In aggiunta alle suddette funzioni, la sezione di controllo provvede alla cifratura dei codici e alla loro trasmissione verso un PC locale, tramite un controllore USB e un connettore USB. Secondo questo metodo, una procedura di autenticazione viene eseguita come segue: Impostazioni iniziali I primi due codici TRNG1 e TRNG2, che sono generati nel token, vengono registrati sul server di autenticazione insieme ad un nome utente. Gli stessi codici TRNG1 e TRNG2 sono memorizzati 35 anche all’interno del token. Successivamente, il token può essere consegnato ad un utente. La stessa operazione deve essere eseguita per tutti i token, prima che vengano consegnati ai rispettivi utenti finali. Autenticazione 1. Il codice TRNG2 viene criptato con il codice TRNG1 (chiave comune) all'interno del token USB. 2. Il codice cifrato TRNG2(EN) (codice di autenticazione) viene trasmesso al server di autenticazione tramite PC. 3. Il server di autenticazione decripta il codice cifrato TRNG2(EN) con il codice TRNG1. Quindi, viene verificato se il codice decriptato TRNG2(DE) è identico al codice TRNG2. 4. Se il TRNG2(DE) corrisponde al codice TRNG2 l'utente ha accesso, altrimenti viene rifiutato. Nuovo codice di impostazione 1. Dopo il log-in, viene generato un nuovo codice TRNG3 all'interno del token USB e registrato nella memoria, mentre il codice TRNG1 viene eliminato. Quindi, a questo punto sono presenti nel token i codici TRNG2 e TRNG3. 2. Il codice TRNG3 viene criptato con il codice TRNG2 (nuova chiave comune) all'interno del token USB, generando il codice cifrato TRNG3(EN). 3. Il codice cifrato TRNG3(EN) viene trasmesso al server di autenticazione. 4. Sul lato server, il codice cifrato TRNG3(EN) viene decriptato con il codice con la nuova chiave comune TRNG2. Il codice decriptato TRNG3(DE) è registrato come codice TRNG3 ed il codice TRNG1 viene cancellato, in modo tale che anche sul server siano presenti gli stessi codici TRNG2 e TRNG3 del token e si possa procedere con una nuova autenticazione. Pertanto, la chiave comune ed il codice di autenticazione vengono aggiornati ad ogni accesso sia sul token, che sul server di autenticazione, realizzando un sistema di autenticazione estremamente sicuro. La sicurezza è incrementata dall’uso di codici puramente casuali, che non possono essere 36 previsti in alcun modo. Inoltre, poiché il codice di autenticazione viene criptato all'interno del token, l'autenticazione può essere eseguita utilizzando qualsiasi PC. Figura 23:Flowchart della procedura di autenticazione. 37 7 Conclusioni I numeri casuali sono utilizzati per costruire simulazioni di fenomeni fisico-ingegneristici (reattori nucleari, gasdinamica, traffico stradale), nei problemi decisionali e finanziari (prezzo di un’opzione, previsione Dow Jones), in informatica (autenticazione, crittografia, progettazione VLSI, rendering) o come semplice fonte di divertimento (gioco d’azzardo, videogiochi). In questa tesina ci si è concentrati sull’importanza di avere numeri puramente casuali nelle operazioni di autenticazione, ma ci sono anche molti algoritmi crittografici, che richiedono la generazione di numeri perfettamente random. Quando si parla di generazione di numeri casuali, occorre precisare che il numero delle richieste per i numeri casuali, differisce enormemente a seconda dei sistemi crittografici utilizzati. Nell’algoritmo asimmetrico RSA, ad esempio, la casualità è richiesta nella generazione della coppia di chiavi (pubblica e privata). Un altro esempio è il One Time Pad (cifrario di Vernam), letteralmente "blocco monouso", in cui la chiave deve essere scelta in maniera casuale, in modo tale che la somma della chiave ad un testo in chiaro (della stessa lunghezza), annulli l'ordine del testo stesso, producendo un cifrario a sua volta casuale, nel quale l'entropia è massima. Tuttavia, bisogna sottolineare che l’innovazione introdotta dalla meccanica quantistica nel campo informatico non si limita alla realizzazione di TRNG quantici. Attualmente, il settore in cui la meccanica quantistica ha le applicazioni più avanzate è la crittografia. Il contributo della fisica quantistica alla crittografia è duplice e di segno contrastante: distruttivo, in un certo senso; costruttivo in un altro. Gli sviluppi della fisica quantistica rendono, infatti, teoricamente possibile la creazione di un computer di tipo completamente diverso e innovativo rispetto a quelli classici, il cosiddetto computer quantistico. Se realizzato in pratica, sarebbe in grado di effettuare in tempo polinomiale calcoli svolti da un computer classico in tempo esponenziale. Questo renderebbe vulnerabile ogni attuale sistema crittografico, mettendo in serio pericolo sistemi di sicurezza civili, militari, bancari ecc. Il risultato potrebbe essere il collasso della nostra stessa civiltà, in gran parte basata su tali sistemi di sicurezza. D'altro canto, le stesse idee su cui poggia il concetto di computer quantistico portano a concepire e realizzare sistemi crittografici quantistici assolutamente inattaccabili, anche da un eventuale computer quantistico, con la sorprendente capacità di scoprire se eventuali malintenzionati hanno solo tentato, anche senza riuscirvi del tutto, di intromettersi abusivamente in una comunicazione riservata. Secondo una delle leggi fondamentali della meccanica quantistica, il principio di indeterminazione di Heisenberg, ogni misura effettuata su un sistema quantistico perturba il sistema 38 stesso. I legittimi interlocutori che utilizzano il canale quantistico sono, quindi, sempre in grado di rilevare le intrusioni. La crittografia quantistica sfrutta questa proprietà per garantire una comunicazione sicura e, tipicamente, consentire uno scambio non di messaggi ma, dei bit della chiave, necessari per avviare algoritmi di crittografia simmetrica. Una problematica, che deve affrontare la crittografia quantistica per diventare un’applicazione industriale vantaggiosa, è la difficoltà di mantenere la polarizzazione dei fotoni per lunghe distanze: un adeguato supporto per il canale quantistico è costituito dalle fibre ottiche, purchè vengano definite tecnologie opportune di mantenimento degli stati quantistici coerenti. L’applicazione delle leggi della fisica quantistica alla crittografia ha permesso per la prima volta la realizzazione di sistemi intrinsecamente sicuri, in quanto basati su leggi fisiche, anzichè congetture matematiche. La teoria, se non la pratica, dei computer quantistici è già sviluppata. Le stime più ottimistiche indicano che ci vorranno ancora 20 anni per costruire un computer quantistico. 39 Bibliografia [1] Mara Corona, Francesco Scarano, Ilaria Scarano. “Autenticazione”. Terza Università Statale di Roma (2004-2005). [2] Maurizio Cinotti. “Internet Security”. HOEPLI (2002). [3] “One-time password”. http://en.wikipedia.org/wiki/One-time_password. [4] “RSA securID: quando il mondo dipende dalla (in)sicurezza di una sola azienda”. Pubblicato da Tiger Security Srl (2011) [5] Whitepaper: “Time-Based vs Event-Based Two-Factor Authentication”. http://www.iroam.com/documents/crypto.pdf [6] N. Haller. "The S/KEY One-Time Password System" RFC-1760 (1995). [7] D. M'Raihi. "HOTP: An HMAC-Based One-Time Password Algorithm" RFC-4226 (2005). [8] D. M'Raihi. "TOTP: Time-Based One-Time Password Algorithm" RFC-6238 (2011). [9] D. M'Raihi. "OCRA: OATH Challenge-Response Algorithm" RFC-6287 (2011). [10] Osamu Kameda, Masakazu Sato. “Authentication device using true random number generating element or pseudo-random number generating element, authentication apparatus, and authentication method” United States Patent Application Publication (16 Agosto, 2012). 40