Come funziona la password monouso (OTP)?
In questo articolo, introduciamo due diversi metodi di password monouso: email/telefono + codice di verifica e codice dinamico.
Con l'evoluzione di internet, abbiamo utilizzato una vasta gamma di servizi online per soddisfare quasi tutte le nostre esigenze. Il primo passo per utilizzare questi servizi è spesso la registrazione e l'accesso. Quando si tratta di registrazione e accesso, l'autenticazione con ID utente e password è ancora ampiamente utilizzata, nonostante siano trascorsi più di tre decenni dai tempi dei computer desktop standalone che non potevano connettersi a internet.
In passato, dovevamo solo ricordare la password del nostro account email, ma ora utilizziamo spesso dozzine o addirittura centinaia di servizi online, e non possiamo utilizzare la stessa password per tutti (se la password per un account viene compromessa, tutti gli account che utilizzano la stessa password saranno a rischio). Di conseguenza, l'accesso senza password sta diventando sempre più popolare e sta gradualmente diventando l'approccio principale.
Ci sono molti metodi diversi per l'autenticazione senza password, inclusi ma non limitati a accesso con social network, email/telefono + codice di verifica e l'uso di app di autenticazione con password dinamiche. Gli ultimi due metodi possono essere classificati come password monouso (OTP).
Che cos'è la password monouso (OTP)?
Una OTP è una sequenza di caratteri generata automaticamente che è valida solo per una singola sessione di accesso o per un breve periodo di tempo. Poiché una OTP può essere utilizzata solo una volta, può prevenire il rischio di perdita delle credenziali, come una password smarrita o rubata.
In teoria, una OTP può essere una stringa casuale di caratteri di una certa lunghezza, inclusi lettere maiuscole e minuscole, e persino simboli speciali. Ma per migliorare l'esperienza dell'utente, la maggior parte dei servizi utilizza numeri puri quando usano le OTP.
Email / telefono + codice di verifica
Molti siti web richiedono di verificare la tua identità inviando un codice di verifica (o passcode) all'email o al numero di telefono che hai registrato.
Immagina che Jack e Joe stiano giocando a un gioco di indovinare, dove Jack pensa a un numero tra 0 e 999, e dà a Joe tre possibilità di indovinare il numero entro un minuto. Oltre a conoscere l'intervallo del numero, Joe non ha altre informazioni.
Sappiamo tutti che è quasi impossibile per Joe indovinare correttamente il numero entro un minuto usando solo tre tentativi.
Email / telefono + codice di verifica funziona sullo stesso principio: il codice di verifica è generalmente valido per un periodo di tempo molto breve, solitamente non più di 10 minuti (simile a Jack che dà a Joe "un minuto" per indovinare il numero). Inoltre, l'API o il metodo per verificare il codice di verifica ha tipicamente un limite di velocità per prevenire attacchi brutali sul codice (come Jack che dà solo "tre possibilità" a Joe).
Per i potenziali attaccanti, è quasi impossibile violare questo metodo. Tuttavia, il sistema comunica il codice di verifica all'utente attraverso un canale attendibile (email o telefono), consentendo all'utente di verificarlo direttamente.
Codice dinamico
Il codice dinamico, noto anche come OTP basato sul tempo (TOTP), è "dinamico" nel senso che cambia nel tempo. Generalmente, se un'app web utilizza TOTP, seguirà RFC6238 - Algoritmo per Password Monouso Basato sul Tempo.
Password monouso basata su hash
Prima di introdurre TOTP, dobbiamo brevemente spiegare RFC4226 - HOTP: Algoritmo per Password Monouso Basato su HMAC (HMAC è un algoritmo di hashing). L'algoritmo HOTP funziona come segue:
-
Segreto: HOTP richiede una chiave segreta condivisa K, che è la stessa tra il server e il client.
-
Contatore: Il cuore di HOTP è un contatore C, che viene incrementato ogni volta che viene generata una nuova password.
-
Calcolo HMAC:
-
Utilizza HMAC-SHA-1 (o altre funzioni hash) per calcolare il codice di autenticazione:
-
Qui, H è un valore hash a 160 bit.
-
-
Troncamento: Estrarre una parte del valore hash H per generare la OTP. Supponiamo di volere una OTP a 6 cifre, il processo è il seguente:
- Estrarre l'ultimo byte di H come offset di troncamento O.
- Estrarre i 4 byte a partire da O, convertirli in un intero T.
- Prendere le ultime d cifre di T, cioè OTP = T mod 10^d.
In sintesi, la formula HOTP è:
Dove d è la lunghezza desiderata della OTP (di solito 6-8 cifre).
Password monouso basata sul tempo
TOTP è un'estensione di HOTP, dove il contatore è sostituito con un passo temporale. Utilizza il tempo corrente per generare un codice di verifica dinamico, quindi la OTP scade automaticamente col passare del tempo. Il principio di funzionamento è il seguente:
-
Passo temporale: TOTP utilizza il tempo corrente T invece del contatore HOTP C. Il passo temporale è un intervallo di tempo fisso impostato (generalmente 30 secondi).
- Ad esempio, supponiamo che il passo temporale sia di 30 secondi e che il timestamp Unix corrente sia T. Il contatore TOTP è calcolato come: T' = T / time_step
- Dove T′ è il contatore del passo temporale, in unità di 30 secondi.
-
Generare OTP: Sostituire T′ nell'algoritmo HOTP per generare la OTP:
-
Aggiornamento dinamico: Poiché TOTP è basato sul passo temporale, la OTP cambia nel tempo, quindi il server può verificarne la validità fintanto che la OTP è all'interno della finestra temporale valida.
In sintesi, la formula TOTP è:
Basandoci sulla nostra esperienza con l'utilizzo di app di autenticazione, possiamo sincronizzare il valore segreto tra il dispositivo e il server scansionando un codice QR o copiandolo e incollandolo direttamente, e poi dobbiamo inserire il codice dinamico corrente una volta per garantire che il valore segreto sia lo stesso.
Nei primi giorni dell'uso di dispositivi mobili, potremmo scoprire che l'ora su dispositivi diversi non era la stessa, e avremmo dovuto regolare manualmente il tempo sui dispositivi periodicamente. Negli ultimi anni, quasi tutti i dispositivi utilizzano il servizio di tempo di rete (NTP) per sincronizzare e aggiornare regolarmente l'ora del dispositivo. Anche se l'orologio del dispositivo non è del tutto preciso, gli aggiornamenti frequenti possono garantire che il tempo sia ragionevolmente coerente tra dispositivi diversi. Basandosi su questo presupposto, il codice dinamico può ancora essere utilizzato anche se il dispositivo è offline, mentre sarebbe difficile ricevere un codice di verifica in uno stato offline.
Note finali
In questo articolo, abbiamo introdotto due diversi metodi di password monouso: email/telefono + codice di verifica e codice dinamico.
Email/telefono + codice di verifica si basa su infrastrutture di comunicazione e servizi di posta elettronica o di messaggi brevi (SMS) di terze parti per l'implementazione; il codice dinamico non dipende da servizi esterni e strutture di comunicazione, e può essere utilizzato offline.
Logto, come servizio IAM (Identity and Access Management) popolare, potente e altamente estensibile, supporta entrambi i metodi OTP, consentendo agli utenti di scegliere la soluzione che meglio si adatta alle loro esigenze dal punto di vista aziendale.