# One-time password

Una one-time password, in sigla OTP, (in italiano "password (valida) una sola volta") è una password che è valida solo per una singola sessione di accesso o una transazione. Per questo l'OTP è anche detta password usa e getta o password monouso.
La OTP evita una serie di carenze associate all'uso della tradizionale password (statica). Il più importante problema che viene risolto da OTP è che, al contrario della password statica, essa non è vulnerabile agli attacchi con replica. Ciò significa che, se un potenziale intruso riesce a intercettare una OTP che è stata già utilizzata per accedere a un servizio o eseguire una transazione, non sarà in grado di riutilizzarla, in quanto non sarà più valida. D'altra parte, una OTP non può essere memorizzata da una persona in quanto sarebbe inutile per lo stesso motivo. Essa richiede quindi una tecnologia supplementare per poter essere utilizzata (un dispositivo fisico con la calcolatrice OTP incorporata o un numero di cellulare specifico o un'app installata su dispositivo certificato). Le OTP possono essere utilizzate come unico fattore di autenticazione, o in aggiunta ad un altro fattore, come può essere la password dell'utente, i dati della carta di credito o un PIN in modo da realizzare una autenticazione a due fattori. Sebbene il nome si riferisca ad una password l'OTP può essere un codice solo numerico (situazione prevalente) e non alfanumerico (cioè la password in senso stretto).

## Generazione e memorizzazione delle OTP

Gli algoritmi OTP che sono stati realizzati sono abbastanza diversi tra loro. Ciò che li accomuna è che ogni OTP viene generata applicando una funzione crittografica ad una serie di valori univoca. Questo è necessario perché altrimenti sarebbe facile prevedere la OTP futura osservando quelle precedenti. I vari approcci per la generazione di OTP sono elencati di seguito:
* Algoritmi basati sulla sincronizzazione temporale tra server di autenticazione e client che fornisce la password: le OTP sono valide solo per un breve periodo di tempo, il valore da cui viene generata la OTP è l'ora corrente.
* Algoritmi matematici che generano una nuova password in base alla password precedente. Il valore da cui viene generata la OTP è un numero all'interno di una sequenza predefinita (le OTP sono, di fatto, una catena di password legate tra loro, e devono essere utilizzate in un ordine predefinito).
* Algoritmi matematici dove la password è basata su una challenge (per esempio, un numero casuale scelto dal server di autenticazione o dai dettagli della transazione) e/o su un contatore.

## Metodi per la generazione
### Sincronizzazione temporale

Un OTP basato sulla sincronizzazione temporale è generalmente collegato a un componente hardware chiamato token, ad ogni utente viene assegnato un token personale per generare le proprie OTP. Il token è dotato di un orologio interno, che è stato sincronizzato con l'orologio sull'autenticazione proprietaria server. Su questi sistemi OTP, il tempo è una parte importante dell'algoritmo di generazione delle password, poiché la generazione di nuove password si basa sul tempo corrente anziché, o in aggiunta, sulla password precedente o su chiave privata. Questo token può essere un dispositivo proprietario, un telefono cellulare o simile dispositivo mobile che esegue software che è proprietario, gratuito o open source.

### Algoritmi matematici

Ogni nuova OTP deriva dalla precedente utilizzata. Un esempio di questo algoritmo, accreditato a Leslie Lamport utilizza una funzione unidirezionale (indicata in seguito come $f$), esso funziona come segue:
* Viene scelto un seme (valore iniziale) $s$.
* Una funzione di hash $f(s)$ viene applicata ripetutamente (ad esempio 1000 volte) (catena di hash) al seme generando un nuovo valore. Questo valore, indicato nell'esempio come $f_{1000}(s)$ è memorizzato nel sistema di destinazione.
* Il primo accesso dell'utente utilizza una password $p$ derivata applicando $f$ 999 volte al seme, ovvero $f_{999}(s)$. Il sistema di destinazione può autenticare che questa è la password corretta, perché $f(p)=f_{1000}(s)$, che è il valore memorizzato. Il valore memorizzato viene quindi sostituito da $p$ e l'utente può accedere.
* Il login successivo deve essere accompagnato da $p=f_{998}(s)$. Di nuovo, questo può essere convalidato perché applicando $f(p)$ si ottiene $f_{999}(s)$ che è il valore memorizzato dopo il login precedente. Di nuovo, il nuovo valore di $p$ sostituisce quello precedente e l'utente è autenticato.
* La procedura può essere ripetuta altre 997 volte, dopo di che è necessario scegliere un nuovo seme con cui inizializzare il dispositivo.
Le funzioni di hash sono progettate per essere estremamente difficili da invertire, quindi un utente malintenzionato dovrebbe conoscere il seme iniziale per calcolare le password possibili, mentre in senso inverso, il sistema può confermare che la password in ogni occasione è valida controllando che, una volta applicata la funzione di hash, il valore ottenuto sia quello precedentemente utilizzato per l'accesso.
Per ottenere la password successiva nella serie dalle password precedenti, è necessario trovare un modo per calcolare la funzione inversa $f^{-1}$. Poiché $f$ è stata scelta per essere unidirezionale, questo è estremamente difficile da fare. Se $f$ è una funzione crittografica di hash, che è il caso generale, è (per quanto è noto) un compito computazionalmente irrealizzabile. Un intruso che riesce ad ottenere una OTP può avere accesso per un periodo di tempo o per una sessione, ma diventa inutile una volta scaduto quel periodo. Il sistema di one-time password S/KEY e il relativo OTP token derivato sono basati sullo schema di Lamport.

### Challenge

Nei sistemi di OTP basati su una challenge il server invia all'utente la challenge, l'utente la inserisce nel suo dispositivo OTP, ed esso provvede a crittografarla usando la propria chiave privata; nel frattempo anche il server provvede a crittografare la challenge con la chiave privata associata all'utente, l'utente invia la challenge crittografata al server e se il valore calcolato dall'utente è uguale al valore calcolato dal server, allora l'autenticazione è autorizzata.

## Metodi per la distribuzione
### Telefonia cellulare

Una tecnologia comune utilizzata per la consegna delle OTP è la messaggistica di testo. Poiché la messaggistica di testo è un canale di comunicazione onnipresente, essendo direttamente disponibile in quasi tutti i telefoni cellulari e, attraverso la conversione da testo a voce, a qualsiasi telefono cellulare o fisso, la messaggistica di testo ha un grande potenziale per raggiungere tutti i consumatori con un costo totale basso. Tuttavia, il costo della messaggistica di testo per ogni OTP potrebbe non essere accettabile per alcuni utenti. L'OTP sulla messaggistica di testo può essere crittografato utilizzando uno standard A5/x, che diversi gruppi di hacking riportano possano essere decifrati con successo in pochi minuti o secondi. Inoltre, i difetti di sicurezza nel protocollo di routing SS7 possono e sono stati utilizzati per reindirizzare i messaggi di testo con le OTP agli aggressori; nel 2017 diversi clienti di O2 in Germania sono stati violati in questo modo per ottenere l'accesso ai loro conti di mobile banking. A luglio 2016, il NIST statunitense ha pubblicato una bozza di una pubblicazione speciale con linee guida sulle pratiche di autenticazione, che scoraggia l'uso di SMS come metodo di implementazione dell'autenticazione a due fattori fuori banda, a causa della capacità di intercettare SMS su scala.
Sugli smartphone, le OTP possono anche essere consegnate direttamente tramite app, incluse app di autenticazione dedicate come Authy, Duo e Google Authenticator o all'interno di un'app del fornitore di servizio, come nel caso di Steam. Questi sistemi non condividono le stesse vulnerabilità di sicurezza degli SMS e non richiedono necessariamente una connessione a una rete mobile da utilizzare, poiché sono basati su Internet.

### Token proprietari

EMV sta iniziando a utilizzare un algoritmo challenge-response (chiamato Chip Authentication Program) per le carte di credito in Europa. D'altra parte, nel controllo degli accessi per le reti di computer, SecurID di RSA Security e HID Global sono esempi di token a sincronizzazione temporale. I problemi principali dei token fisici sono che questi possono essere persi, danneggiati o rubati; inoltre, vi è un inconveniente legato alla vita delle batterie, specialmente per i token senza una funzione di ricarica o una batteria sostituibile. Una variante del token proprietario è stata proposta da RSA nel 2006 ed è stata descritta come "autenticazione onnipresente", in cui RSA collaborerebbe con i produttori per aggiungere i chip SecurID fisici a dispositivi come i telefoni cellulari.
Yubico offre un piccolo token USB con un chip incorporato che crea un OTP quando viene premuto un tasto e simula una tastiera per facilitare l'inserimento di una password lunga. Poiché si tratta di un dispositivo USB, evita l'inconveniente della sostituzione della batteria.

### Metodi basati sul web

I provider di autenticazione come servizio offrono vari metodi basati sul web per la consegna di OTP senza la necessità di token fisici. Google fornisce un servizio di generazione OTP chiamato Google Authenticator disponibile come applicazione mobile per Android, iOS e BlackBerry OS. Anche Microsoft offre il proprio servizio, chiamato Microsoft Authenticator, utilizzabile sia per accedere agli account utente Microsoft che a quelli di terze parti che supportino gli standard ToTP (RFC 6238).

### Copia cartacea

Nell'online banking di alcuni paesi, la banca invia all'utente un elenco numerato di OTP stampati su carta. Altre banche inviano carte plastificate con uno strato che l'utente deve grattare per rivelare un OTP numerato. Per ogni transazione online, l'utente è tenuto a inserire un OTP specifico da quella lista. Alcuni sistemi richiedono sequenzialmente le OTP numerate, altre scelgono in modo pseudo-casuale un OTP da inserire. In Germania e in molti altri paesi come Austria e Brasile, queste OTP sono in genere chiamate TAN ("Transaction Authentication Number"). Alcune banche addirittura inviano tali TAN al telefono cellulare dell'utente tramite SMS, in quel caso vengono chiamate mTAN ("mobile TAN").

## Confronto tra tecnologie
### Confronto tra le implementazioni di OTP

Le soluzioni OTP più economiche sono quelle che forniscono OTP su carta e quelle che generano OTP su un dispositivo esistente, senza i costi associati alla (ri) emissione di token di sicurezza elettronici proprietari e alla messaggistica SMS.
Per i sistemi che si basano su token elettronici, i generatori OTP basati su algoritmi devono far fronte alla situazione in cui un token si de-sincronizza con il proprio server se il sistema richiede che l'OTP venga immesso entro una scadenza. Ciò comporta un ulteriore costo di sviluppo. D'altro canto, i sistemi a sincronizzazione temporale evitano questo a spese di dover mantenere un orologio nei token elettronici (e un valore di offset per tenere conto della differenza di frequenza tra l'orologio del dispositivo e quello del server). Che l'OTP sia sincronizzato nel tempo è sostanzialmente irrilevante per la vulnerabilità, ma evita la necessità di reinserire le password nel caso in cui il server e l'OTP si siano de-sincronizzati al punto che il server chiede una password precedente o successiva a quella che dovrebbe chiedere.
L'utilizzo di un dispositivo mobile esistente evita la necessità di ottenere e trasportare un generatore OTP aggiuntivo. La batteria può essere ricaricata; a partire dal 2011 la maggior parte dei dispositivi di piccole dimensioni non ha batterie ricaricabili o sostituibili. Tuttavia, la maggior parte dei token proprietari ha caratteristiche a prova di manomissione.

### OTP rispetto ad altri metodi di protezione dei dati

Le OTP sono vulnerabili agli attacchi di social engineering in cui i phisher rubano le OTP ingannando i clienti nel fornire una o più OTP che hanno usato in passato. Alla fine del 2005, i clienti di una banca svedese furono indotti a rivelare la loro successiva OTP. Nel 2006 questo tipo di attacco è stato utilizzato contro i clienti di una banca statunitense. Anche gli OTP a sincronizzazione temporale sono vulnerabili al phishing, con due metodi: la password può essere utilizzata più rapidamente dall'attaccante come utente legittimo, se l'hacker può ottenere in modo sufficientemente rapido l'OTP. L'altro tipo di attacco - che può essere sconfitto dai sistemi OTP che implementano la catena di hash come discusso sopra - è che il phisher utilizzi le informazioni acquisite (passati codici OTP che non sono più validi) con questo metodo di social engineering per prevedere quali OTP saranno utilizzate in futuro. Ad esempio, un generatore di password OTP che è pseudo-casuale piuttosto che casuale potrebbe essere compromesso, poiché i numeri pseudo-casuali, a differenza di quelli realmente casuali, sono spesso prevedibili una volta che si hanno i codici OTP passati. Un sistema OTP può utilizzare solo OTP veramente casuali se l'OTP è generato dall'autenticatore e trasmesso (presumibilmente fuori banda) all'utente; in caso contrario, l'OTP deve essere generato in modo indipendente da ciascuna parte, rendendo necessario un algoritmo ripetibile e quindi semplicemente pseudo-casuale.
Sebbene gli OTP siano in qualche modo più sicuri di una password statica memorizzata, gli utenti dei sistemi OTP sono ancora vulnerabili agli attacchi man-in-the-middle. Le OTP non dovrebbero pertanto essere divulgate a terze parti e l'utilizzo di un OTP come fattore di autenticazione aggiuntivo è più sicuro rispetto all'utilizzo di OTP come unico fattore di autenticazione. Un modo per implementare l'autenticazione a più livelli consiste nell'utilizzare un OTP in combinazione con una password che viene memorizzata dall'utente (e mai trasmessa all'utente, come spesso accade negli OTP).

### Standardizzazione

Molte tecnologie OTP sono brevettate. Ciò rende più difficile la standardizzazione in questo settore, poiché ogni azienda cerca di spingere la propria tecnologia. Esistono tuttavia degli standard, ad esempio RFC 1760 (S/KEY), RFC 2289 (OTP), RFC 4226 (HOTP) e RFC 6238 (TOTP).