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.
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.
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 f1000(s) è memorizzato nel sistema di destinazione.
Il primo accesso dell'utente utilizza una password p derivata applicando f 999 volte al seme, ovvero f999(s). Il sistema di destinazione può autenticare che questa è la password corretta, perché f(p)=f1000(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=f998(s). Di nuovo, questo può essere convalidato perché applicando f(p) si ottiene f999(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.
MCMX

