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