Verify

Cosa significa OTP? Le one-time password spiegate

OTP sta per one-time password (a volte one-time passcode). È un codice breve, di solito da quattro a otto cifre, valido per un singolo accesso o una singola transazione e poi scade. Poiché ogni codice funziona una sola volta e solo per una breve finestra temporale, un codice trapelato dopo l'uso non ha alcun valore per un attaccante. Questa natura usa e getta è l'unico motivo per cui gli OTP esistono.

Ne hai quasi sicuramente digitato uno: le sei cifre che la banca ti invia via SMS prima di un bonifico, il codice che un'app di autenticazione mostra quando accedi, il numero che un sito web ti invia via email per confermare che sei davvero tu. Tutti questi sono OTP, e differiscono principalmente per come il codice viene generato e come ti raggiunge.

Come funziona un OTP?

Il servizio e l'utente hanno bisogno di un modo per concordare quale sia il codice valido in quel momento, senza trasmettere la password stessa in modo prevedibile. Esistono due metodi standard, e la differenza sta in ciò che fa cambiare il codice.

  • HOTP (one-time password basata su HMAC). Il codice è derivato da un segreto condiviso e un contatore. Il token dell'utente avanza un contatore quando genera un codice. Il verificatore del servizio avanza il proprio stato corrispondente dopo aver accettato il codice atteso. Un codice HOTP non scade semplicemente perché passa il tempo.
  • TOTP (one-time password basata sul tempo). Il codice è derivato da un segreto condiviso e dall'ora corrente, arrotondata a una finestra (di solito 30 secondi). Il codice cambia da solo con il passare del tempo, che qualcuno lo abbia usato o meno. È ciò che generano le app di autenticazione.

TOTP è il più diffuso dei due perché la scadenza automatica limita per quanto tempo un codice rubato resta utile. HOTP compare ancora nei token hardware e nei flussi in cui un orologio sincronizzato è difficile da garantire.

Come viene recapitato un OTP?

Il metodo di generazione e il canale di recapito sono scelte separate. Un codice può essere calcolato sul dispositivo dell'utente oppure generato sul server e inviato all'utente.

  • SMS. Il server genera un codice e lo invia via SMS al numero di telefono dell'utente. Copertura universale, nessuna app necessaria. È anche il canale più intercettabile, tramite SIM-swap o attacchi alla rete.
  • Email. Il codice arriva nella casella di posta dell'utente. Comodo e senza app, ma sicuro solo quanto l'account email stesso.
  • Chiamata vocale. Una chiamata automatica legge il codice ad alta voce, utile per gli utenti che non possono ricevere SMS o che hanno bisogno di un'opzione accessibile.
  • App di autenticazione. Il codice è calcolato localmente con TOTP. Nulla viene inviato sulla rete, quindi non c'è niente in transito da intercettare.

Ogni canale bilancia la copertura con la difficoltà di attacco. SMS e l'email raggiungono quasi tutti; i codici generati da app sono più difficili da rubare ma richiedono che l'utente abbia già configurato un'app.

Dove vengono usati gli OTP?

L'uso più familiare è come secondo fattore nell'autenticazione a due fattori, dove l'OTP dimostra il possesso di un telefono o dispositivo oltre alla password. Ma gli OTP compaiono ben oltre il login.

  • Verifica del login: conferma di un accesso, specialmente da un nuovo dispositivo o luogo.
  • Conferma della transazione: approvazione di un pagamento, un bonifico o una modifica ai dettagli di pagamento.
  • Recupero dell'account: conferma del controllo di un numero di telefono o un'email prima di reimpostare una password.
  • Controlli step-up: richiesta di un codice nuovo prima di un'azione sensibile, anche a sessione in corso.

Se stai valutando se un OTP rende un login effettivamente "two-factor", dipende dal resto del flusso. La distinzione è trattata in autenticazione a due fattori vs. verifica in due passaggi.

Considerazioni sulla sicurezza e buone pratiche

Gli OTP sono semplici, ed è proprio per questo che i dettagli contano. Alcune buone abitudini li mantengono efficaci.

  • Scadenza breve. Limita rigorosamente la durata dei codici. Pochi minuti per SMS ed email, la finestra standard di 30 secondi per TOTP. Più breve è la finestra, minore è la possibilità che un codice venga riutilizzato.
  • Limitazione delle richieste. Limita sia quanti codici un utente può richiedere sia quanti tentativi può fare. Un codice a sei cifre ha un milione di possibilità, che un attaccante senza limiti può forzare; pochi tentativi per codice chiudono quella porta.
  • Uso singolo, applicato lato server. Invalida un codice nel momento in cui viene accettato e dopo troppi tentativi falliti. Non affidarti al client per impedire il riutilizzo.
  • Non registrare mai il codice. Tieni gli OTP fuori dai log applicativi, dall'analytics e dai report di errore. Un codice che resta in un file di log è un codice che un insider o una violazione dei log può leggere.
  • Lega il codice al contesto. Associa un codice all'utente specifico e all'azione per cui è stato emesso, così un codice destinato a uno scopo non può essere riutilizzato per un altro.

Una breve nota sul phishing: un utente può essere ingannato e indotto a comunicare un codice SMS o da app a un attaccante su un sito falso, quindi gli OTP non sono a prova di phishing come le chiavi hardware. Bloccano comunque l'attacco di gran lunga più comune, cioè qualcuno che accede con una semplice password rubata.

Invio e verifica degli OTP

Puoi gestire un flusso OTP in autonomia: genera un codice, salvalo con una scadenza, invialo e confronta l'input dell'utente entro la finestra. Se vuoi che il recapito e la verifica siano gestiti per te (incluse la limitazione delle richieste e la scadenza), il prodotto Verifications di Bird invia e valida codici tramite SMS, voce ed email. Se ti serve solo il trasporto e vuoi gestire la logica di verifica, il prodotto SMS copre il recapito dei codici sui telefoni.

FAQ

Qual è la differenza tra HOTP e TOTP?

HOTP avanza il contatore del token dell'utente quando genera un codice. Il verificatore del servizio avanza il proprio stato dopo aver accettato il codice atteso. TOTP deriva il codice dall'ora corrente, quindi cambia con una cadenza fissa (di solito ogni 30 secondi). TOTP è più diffuso perché la scadenza automatica limita l'utilità di un codice rubato.

Gli OTP via SMS sono sicuri?

Sono sufficientemente sicuri per la maggior parte degli account e bloccano la gran parte degli attacchi basati solo sulla password, ma SMS può essere intercettato tramite SIM-swap o attacchi alla rete. Per account di alto valore, preferisci un'app di autenticazione o una chiave hardware.

Per quanto tempo dovrebbe restare valido un OTP?

Il tempo sufficiente perché l'utente lo legga e lo digiti, e non di più. Pochi minuti per SMS o email, e la finestra standard di 30 secondi per TOTP. Finestre più brevi riducono la possibilità che un codice trapelato sia ancora utilizzabile.

Lo stesso OTP può essere usato due volte?

Non dovrebbe. Un sistema implementato correttamente invalida un codice nel momento in cui viene accettato e anche dopo troppi tentativi falliti. Applica l'uso singolo sul server, mai sul client.

Le one-time password sono un'idea semplice che ha un grande peso nella sicurezza degli account. Per vedere come si inseriscono in una difesa completa del login, leggi cos'è l'autenticazione a due fattori, oppure scopri come Bird genera, recapita e verifica i codici nel prodotto Verifications.

Costruisci sulla stessa rete.

Una chiave API di test è subito tua. L'accesso alla produzione si sblocca quando aggiungi un metodo di pagamento e verifichi un mittente.

La tua prossima idea.
Pronta a partire.